Fórum témák
» Több friss téma |
Az IAR 5.51.6-ban megtaláltam, de a CCS 5.3.0...90 sajnos még nem támogatja.
Sziasztok!
Két db, sorba kapcsolt AA-s áramforrás feszültségét (egy tizedes volt pontossággal) szeretném gombnyomásra megmérni 2553-as mikrovezérlővel, majd az eredményt egy leden keresztül kiíratni úgy, hogy hosszú villanások száma mutatná meg a mért egész voltok számát, ezután a rövid felvillanások száma mutatná a tizedvoltok számát. Megköszönnöm, ha valaki tudna segíteni a dologban! ![]()
Az AA (3V) áramforrásról megy a mikrovezérlő is, vagy az független tőle?
A "step-up" miért kell?
A g2553-as 1.8V-ról már működik. A boost konverter 1.8V-ig fölösleges, mert elég sok rajta a veszteség. A felépítése viszont elég egyszerű: - Figyeled a gomb állapotát, akár egy feltételben, akár megszakításban. (én ez utóbbit választanám) - Ha változás történt, megnyomod a gombot, elindítod az AD konverziót. - Kiszámolod a feszültséget. pl. ha a referencia a Vcc, akkor: ADC_vale*Vcc/1024. - A kiszámolt értéket elosztod annyival ahány tizedes kell. - Egy Timer modullal villogtatod a ledet, úgy, hogy két értéket adsz meg neki. pl: egyesek = 100, tizedes = 50. De ezt megcsinálhatod egy egyszerű "delay"-al is.
Üdv. sziasztok van egy MSP-s LCD.s feszütlség mérőm Bővebben: Link
![]() Üdv. Mybuster A hozzászólás módosítva: Ápr 14, 2013
A programot Energia IDE fordította? Abban valamiért ugrál az ADC konverzió eredménye, de nem tudtam rájönni, hogy miért. Tisztán C-ben megírva ((lásd pl. itt)( nem volt ilyen gondom, akkor sem, ha az Energia fordította, de nem a beépített függvényeket használtam (tehát nem az mspgcc fordító a hibás).
A belinkelt kapcsolásban az 50 kOhmos soros ellenállás nem biztos, hogy nyerő, közvetlenül az analóg bemenetre tegyél egy kondenzátort (100 nF is megteszi).
Üdv igen energia8 al lett fordítva. Bocs igazabol csak hat századot ugrál na de az se mindegy
![]()
Hát nem sokat segített a kondi se. Am ha megnézitek az eredeti ardunios videot ugyanúgy nála is ingadozik + - 0.06V
![]()
Köszönöm!
Ha kihagyom a mikrovezérlő 3,3v-os step-up ját és közvetlenül a két AA-ról táplálom akkor: 1. feszültség méréskor belső referenciát kell választanom? 2. 2,5v nál nem tudok magasabb feszültséget mérni? ![]() Idézet: „1. feszültség méréskor belső referenciát kell választanom?” Nem feltétlen szükséges, de ha külső referenciát választasz, akkor a referencia feszültséget elő is kell állítani. Erre a legegyszerűbb a TL431. De a Te esetedben inkább a belsőt választanám, mert miden plusz alkatrész, plusz energiát jelent, ami jelen esetben elég kevés. Idézet: „2. 2,5v nál nem tudok magasabb feszültséget mérni?” Miért ne tudnál! Ha a Vcc a ref. akkor a Vcc fesz.-ig tudsz mérni. Pl. REF = Vcc = 3.5V akkor ADC 1023 = 3.5V Azt elfelejtettem "mondni" az előző hsz-ben, hogy ha befejezted az AD konverziót, kapcsold ki az ADC-t a következő konverzióig. (energiatakarékosság).
A 2. kérdés arra vonatkozott volna, hogy ha pl.: a legmagasabb feszültségű 2,5v belső referenciát választok, akkor nem tudok ennél magasabb értékű feszültséget mérni.
Jól gondolom?
Igen. Úgy ahogy írtam.
REF. = REF2_5V high, akkor ADC 1023 = 2.5V, REF. = REF2_5V low, akkor ADC 1023 = 1.5V A "REF2_5V" az ADC10CTL0 6. bitje. (ha jól emlékszem)
Miért ne tudnál?
Közvetlenül persze valóban nem, de közvetetten igen. Keresőszó: ellenállásosztó
Annyit még hozzátennék, hogy természetesen a mérendő feszültség leosztásával (a 0 - referencia fesz tartományba) elméletileg bármekkora feszültséget mérhetsz...
Igen, azt elfelejtettem hozzátenni, hogy megfelelő elektronikával (feszosztó, opamp, stb), akár Paksot is meg lehet mérni.
![]() Kösz a kiegészítést.
Köszönöm!
Még feltartanálak egy kicsit: Ugyebár egy tizedesre van szükségem, ha ref 3,3v akkor 1023/33=31 egy tized értéke. Ebből hogyan mondom meg neki, hogy egyesből kettőt villogj, tizedből pedig ötöt. Amire én gondoltam: az egész voltok számát kivillogni viszonylag egyszerűen megy megnézem , hogy a négy tartomány közül melyikbe tartozik a mért érték 0-3-ig kap egy ciklusváltozót és annak megfelelően indítok egy for ciklust . Ez után kivonom az egész volt értékét (ami a ciklusváltozóval megegyezik) a mért értékből, majd megvizsgálom, hogy a különbség a 10 tartomány közül melyikbe esik és megint kap egy ciklusváltozót és mehet a for ciklus. Esetleg kifejtenéd nekem, hogy hogyan lehetne egyszerűbben megoldani (pl.:timer modullal, ahogyan korábban írtad). ![]() A hozzászólás módosítva: Ápr 16, 2013
A feladatot mindenképp 3 részre bontanám, mert sokkal könnyebb átlátni és tesztelni:
Először el kell végezni az ADC mérést, és az eredményt feszültség dimenzióba alakítani (célszerűen milivolt, vagy valami hasonló, hogy ne kelljen lebegőpontos számítás). Második lépés hogy az egész és tizedes értékeket külön változóba teszed (milivoltot elosztod 100-al -> tizedes, ennek a maradékát 10-el -> egész). Harmadik lépés, hogy csinálsz egy villogtató függvényt, aminek átadod paraméterként a lementett egész, illetve tizedes változó tartalmát.
A 2. lépés nem teljesen világos:
pl.: 2,5 v a mért feszültség. 2,5v=2500mV 2500/100= 25. A 25-ből hogyan lesz nekem 5 ami a tizedesek száma?? (Lehet hogy nagyon este van... ![]() A hozzászólás módosítva: Ápr 16, 2013
Csak sorjában.
Idézet: „ha ref 3,3v akkor 1023/33=31 egy tized értéke” Nem. Példa: ref=3.3V akkor 3300mV/1023=3,22 ebből csinálunk egy egész számot = 322. Az AD konverzióból így lesz fesz: A konverzió eredménye: XY = ADC10MEM; // pl. XY = 512 eredmény = XY * ref, azaz 512*322 = 164864 ADC_fesz = eredmény/10000, azaz 164864/100000=1,6Volt Mivel neked egy tizedes kell, elég 10000-el osztani. Így kapod eredményként a 16-ot. Ezt kell "szétszedni" egyesek = ADC_fesz/10; // 16/10=1 tizedes = ADC_fesz%10; // 16%10=6 Megvan a két értéked. Innentől jön a villogtatás rutin.
Köszönöm a felvilágosítást!
Azt hiszem minden világos (95%). Most az ágyikómra szavazok holnap meg megpróbálom összerakni és tesztelni! Még egyszer köszöntem a türelmedet. ![]()
Még egy kis kiegészítés. A változók definiálására oda kell figyelni. Célszerű itt "long" típusú változókat használni.
Most van egy kis dolgom, de utána leírom a Timerrel megvalósított kijelzés menetét is.
Visszatérve a kijelzésre. A legegyszerűbb megoldás, ha nincs más dolga a mikrovezérlőnek, a "__delay_cycles()" függvény használata.
Írsz egy függvényt, ahol ms-ban adhatod meg az időt, hogy ne keljen nagy számokkal dolgozni. Egy másik függvénnyel pedig megvalósítod a kijelzést. Az előző példánál (változóknál) maradva, én így valósítanám meg a kijelzést:
Na most birkózok vele!
Az jó, ha a változókat "volatile unsigned long"-nak deklarálom?
A "volatile" fölösleges. Simán "long" elég.
Eddig jutottam:
Nem akartam kiteregetni a szennyest,de nincs tippem... Idézet: „| ADC10IE; // ADC10 megszakítás engedélyezése” Engedélyezed az ADC megszakítást. De hol van?
Benne maradt.
Kivettem- nem megy. Betettem a megszakítást- nem megy...
Na.....
Idézet: „Betettem a megszakítást- nem megy...” Engedélyezted is? A már kiszámolt értékeket, hogy juttatod el a "led_vill" függvénynek? A led_vill függvény másodig ciklusában, nem az "egyesek" változót kell csökkenteni egyel, hanem a "tizedes" változót, de ezt lehet még én rontottam el. |
Bejelentkezés
Hirdetés |