Fórum témák
» Több friss téma |
Cikkek » Nyolc lábbal AVR III. rész Nyolc lábbal AVR III. rész
Ilyen témájú kapcsolás úgy nagyjából a 70-es évek élején jelent meg az akkori nagybecsű Ezermester újságban. Aztán jöttek sorra a szebbnél szebb, egyszerűbbnél egyszerűbb, de szinte kivétel nélkül 4093-ra épülő kapcsolások. Szonda korrózió elleni védelemmel megbolondítva, tovább az akkori minimal fogyasztásosnak számító kapcsolások láttak napvilágot. Most, ezt az időt, pontosabban ezt a kapcsolást szeretném felidézni az azóta születettek kedvéért, melybe ugye magam is beletartozom. Az áramkör ismertetése előtt, ám szükség van a mérési elv részletes ismertetésére is. A mérést egy soros RC tag végzi. C egy fix kapacitás, R pedig a föld és a kapacitás szabad kivezetése között lévő szondák által létrehozott ellenállás. Erre a kapacitásra négyszögjelet vezetve, kis ellenállás esetén (vizes föld) a négyszögjelünk "leharapásra" kerül a kondenzátor által (kimenő jel minimális) száraz növény esetén a kimenet egyre magasabb amplitúdójú négyszögjel. Egy szó mint száz, vizes föld nincs kimenő jel, száraz föld, van. Energiatakarékosság is fontos szempont ugyanis elemről működünk. Ezt úgy oldjuk meg, hogy megismerkedünk az interruptokkal és a processzor sleep üzemmódjával. Idle üzemmódban a processzor áramfelvétele uA-es nagyságú. Adott időközönként megtörténik a mérés, ami idejére a processzor "felébred" mér, majd visszaalszik. Így egy CR2032-es lítium elem akár fél évig is szolgálhatja áramkörünket. Az áramkör a következőket teszi. Ha a potméter által beállított szárazsági szintet eléri a föld (amibe a szondákat szúrtuk) akkor adott időközönként az áramkörön lévő kék led felvillan. Természetesen ilyenkor is, eltekintve a uA-es sleep közbeni fogyasztástól, csak a LED világítás és mérés idejére van áramfelvételünk. A hozzávaló forráskód pedig a következő:
Timer1 az a timer ami felébreszti a processzort, úgy nagyjából 2 mp-enként. Pontosan 255/1000000/8192 = 2.08896 másodpercenként Mivel semmi fizikailag megírt interruptja nem kell, így elég a TCCR1-el bekapcsolni az előosztást és az interruptot a TIMSK-ban engedélyezni. Ez már felébreszti majd a processzort. A program végrehajtás, a sleep_mode() függvény meghívásakor felfüggesztődik, majd mikor az interrupt életbe lép, ami felébreszti a processzort, onnan folytatja a parancs végrehajtást. Fontos! Programozásnál állítsuk be a CLKDIV8 bitet, és a projekt beállításainál az órajelet vegyük le a 8-al való osztásnak megfelelően, tehát 1 000 000 Hz-re! Előfordul programozásnál, hogy az 1MHz-es órajel már túl alacsony a program beégetéséhez, tehát tegyük a következőt: Figyeld meg, hogy a kimenet, tehát amire a potméter van kötve, egy speciális funkcióval bír. Ez az OC0A kimenet, tehát a Timer0 Compare A kimenete. CTC mód esetén, amikor a számláló eléri a OCR0A-ban beállított értéket, a kimenet állapotot vált, a beállításoknak megfelelően, majd nullázódik a timer. Ez a folyamat a CTC mód, melyről egy jól szemléltető ábra található az adatlapban, ami ugye megint megnyitva ott van előtted. Bővebb leírása az adatlapban található, így nem térek ki rá sokkal bővebben. Nah... Csak lehet értelmes dolgokat is építeni A cikk még nem ért véget, lapozz! Értékeléshez bejelentkezés szükséges! |
Bejelentkezés
Hirdetés |