Fórum témák
» Több friss téma |
Cikkek » Arduino tápfeszültségének mérése Arduino tápfeszültségének mérése
Szerző: Josi777, idő: Feb 2, 2021, Olvasva: 10815, Oldal olvasási idő: kb. 3 perc
Miután az IDE nem tartalmazza az ADC regisztereinek a megváltoztatásához szükséges utasításokat, ezért azt magunknak kell végrehajtani. De szerencsére tartalmaz olyan lehetőséget, mellyel képesek vagyunk a processzor regisztereinek az érékét megváltoztatni. Ezek az _SFR_BYTE() és _BV() makrók. Ezek segítségével készítünk magunknak egy-egy makrót, mellyel a kívánt regiszter értékét tudjuk változtatni és kiolvasni. Ez a két makró a következő:
Az elsővel egy regiszter meghatározott bitjét tudjuk megváltoztatni, míg a másodikkal egy regiszter egyik bitjének az állapotát ismerhetjük meg. Az első makróban a |= operandus egy bitenkénti VAGY művelet, aminek a végrehajtása után az eredmény a regiszterbe kerül. A második makróban az & operandus bitenkénti ÉS művelet, amivel ellenőrizni tudjuk egy regsziter bármelyik bitjének az állapotát. A setup() függvényben beállítjuk az ADMUX regiszter azon bitjeinek az értékét, melyekre szükségünk van.
Az ADMUX regiszter ADLAR nevű bitje határozza meg az átalakítás utáni érték hogyan helyezkedjen el a két regiszterben. Ugyanis a két regiszter 16 bites, míg az ADC csak 10 bites értéket ad. Lehetőségünk van, hogy ez a 10 bit a 16 bites regiszterben balra vagy jobbra legyen. Ezt jelenti az ADLAR megnevezés: Left Adjust Result. Mi ide nullát állítunk be, így nem lesz balra eltolva, azaz normál módon fog tárolódni. A REFS0 bit azt határozza meg, hogy az ADC pozitív referencia feszültség bemenete hova csatlakozzon. Nekünk ez a tápfeszültség. (Zárójelben jegyzem meg, hogy be lehet állítani a negatív referencia feszültség forrását is, de annak a megváltoztatására nincs szükségünk, így azt a GND-n hagyjuk.) Végül a MUX 4 bites értékét állítjuk be 14-re, azaz ezzel mondjuk meg, hogy az ADC bemenete a belső referencia feszültségre legyen csatlakoztatva.
Ezt a már korábban említett sbi() makróval tesszük. Az ADC ADCSRA regiszterének az ADSC bitjét 1-re állítjuk (ADC Start Conversion), ezzel jelezve, hogy el akarjuk indítani az ADC-t, majd várakozunk, hogy az analóg jel átalakítása befejeződhessen, de legfőképp azért, hogy a bekapcsolás utáni feszültség stabilizálódjon és ne mérjünk hamis értéket. Ez a várakozás függhet a lapkához csatlakoztatott áramkörtől és a tápfeszültség stabilitásától is, ezért ezt az értéket lehet, hogy szükséges megváltoztatni; vagy azt a módszert is választhatjuk - amennyiben nem szeretnénk a delay() függvényt használni -, hogy az első n darab mérést figyelmen kívül hagyjuk.
Itt addig várunk, amíg az ADIF jelző nem vált át 1-es értékre, ezzel jelezve, hogy bekerül a kimeneti regiszterekbe az analóg feszültségnek megfelelő érték. Elvileg erre nem lenne szükség, de azért van benne mégiscsak a programban, hogy ha valamilyen oknál fogva minden egyes loop ciklusban szükségünk lenne a tápfeszültség értékére, akkor is megfelelő értéket kapjunk. Tapfeszultseg=(1024*1.1)/(ADCL+256*ADCH) Ez után elindítjuk a következő ADC konverziót:
Majd a tápfeszültség értékét kiküldjük a soros monitorra:
Valamint beállítjuk azt az értéket, hogy hány loop ciklus után legyen ismét kiszámítva a tápfeszültség értéke:
A cikk még nem ért véget, lapozz! Értékeléshez bejelentkezés szükséges! |
Bejelentkezés
Hirdetés |