Fórum témák
» Több friss téma |
Cikkek » 11 zónás öntözésvezérlő ATmega1284P-vel, RTC-vel, 1-vezetékes hőmérsékletérzékelőkkel, talajnedvesség-érzékelővel 11 zónás öntözésvezérlő ATmega1284P-vel, RTC-vel, 1-vezetékes hőmérsékletérzékelőkkel, talajnedvesség-érzékelővel
Szerző: Srajmund, idő: Márc 24, 2014, Olvasva: 24486, Oldal olvasási idő: kb. 4 perc
A szoftver: A szoftver elkészítésében kollégám, és fórumtársam, Desser oroszlánrészt vállalt. Ennek megfelelően az alábbi működési leírás az Ő tollából származik. Ezúton is köszönöm a segítségét a firmware elkészítésében. A programozás ismertetése előtt röviden leírom a működését, hogy a részletes ismertetésnél tudjak erre hivatkozni, illetve könnyebben érthető lesz az egyes funkciók tárgyalása: - A program egy 4x20 karakteres kijelzőt kezel 4 vezetékes módban bekötve - Az öntözési csatornák adatai és egyéb beállítási értékek EEPROM-ba kerülnek, tápkimaradás esetén értékük megmarad - A program 4 gombbal kezelhető: ESC, ENTER, BAL, JOBB - A vezérlő indulásakor elsőnek az egyes öntözési zónákhoz tartozó adatok EEPROM-ból való betöltése történik meg:
1. ábra Betöltés - Ezután megtörténik az egyvezetékes buszrendszer lekérdezése, a rákötött hőmérők felismerése és ellenőrzése:
2. ábra 1-wire hőmérő - Ha ez sikeresen lezajlott, egy üdvözlő képernyő jelenik meg:
3. ábra Üdvözlő - Alapesetben a program a főképernyőt jeleníti meg, amely tartalmazza az aktuális időt, dátumot, valamint az összes öntözési zóna állapotát, valamint a hőmérséklet-érzékelők és nedvesség-érzékelő adatait
4. ábra Főképernyő - Beállítástól függő ciklusban a főképernyő és a nagyszámos idő kijelzés váltja egymást, ha nincs beavatkozás a gombok felől
5. ábra Az idő kijelzése nagy számokkal - Az ENTER gomb megnyomására a kijelzőn a főmenü jelenik meg, az egyes menüpontok között a BAL és a JOBB gombokkal lehet váltani, a főképernyőre pedig az ESC gomb megnyomásával jutunk - Az első menü az RTC idejének beállítására szolgál. Az idő és dátum minden adatán végiglépkedve lehet beállítani az aktuális dátumot és időt. Rákérdezés után a beírt értékek beíródnak az RTC-be I2C buszon keresztül 6. ábra RTC beállítása - A második menüpontban lehet a vezérlő kimeneteit tesztelni. Lehetőség van külön-külön be- és kikapcsolni az egyes zónákat, illetve a zóna kimenetek egy lépésben való invertálására is mód nyílik a „*” karakter aktiválásával. A szivattyú és master szelep kimenetek külön tesztelhetők.
7. ábra Zóná tesztelése - A harmadik menüpont való az öntözési zónák beállítására. A BAL és a JOBB gombokkal lehet a zónát kiválasztani, a kijelzőn ekkor megjelenik az adott zóna néhány fontosabb beállítási értéke. További ENTER megnyomásával tudjuk a kiválasztott zóna adatait megváltoztatni, majd rákérdezés után az adatok EEPROM-ba kerülnek.
8. ábra Zóna beállítása - A negyedik menüpontban lehet a működést befolyásoló egyéb beállításokat megváltoztatni:
9. ábra Beállítási lehetőségek Megpróbálom a programot az egyes funkciókat ellátó egységekre tagolva bemutatni, talán így könnyebb a program futását fejben is követni: Inicializálás: a program rögtön egy megjegyzés blokkal kezdődik, melyben rögzítésre kerülnek a FUSE bitek helyes beállításai. A gyári állapothoz képest szükség van változtatásra: egyrészt, hogy az AVR külső kristályról való járatását bekapcsoljuk, másrészt biztosítani kell, hogy a program letöltése során az EEPROM tartalmát ne törölje. Ez utóbbi beállítás csak fejlesztéskor volt fontos, a gyakori letöltések miatt nem szerencsés, ha a tesztadatokkal feltöltött EEPROM-ot is mindig újra kell tölteni. A program ezután a kijelző beállításával folytatódik: definiálni kell a kommunikációs és kontraszt-állító lábakat, kurzorvillogást. A használt kijelzőtípus összesen 8db, egyénileg definiált karakter tárolására és megjelenítésére képes. Ezt ki is használtuk: egyrészt a nagyszámos óra kijelzés, másrészt az ékezetes betűk helyes megjelenítésére. Beállítjuk a kijelző kontrasztját kezelő PWM időzítőt, a dátum ellenőrzést végző időzítőt, valamint az összes használt be- és kimenetnek nevet adunk a programon belüli könnyebb tájékozódás miatt. Viszonylag sok belső változót használ a program, ezek szintén itt vannak meghatározva. Ezután következhet a zóna adatok EEPROM-ból való betöltése, majd a hőmérséklet-érzékelőket tartalmazó 1 vezetékes busz feltérképezése és a megtalált hőmérők azonosítása. Maga a program fő ciklusa rövid és egyszerű: első lépésként a hőmérséklet-érzékelőket mérésre utasítjuk, majd az RTC-ből kiolvassuk az aktuális időt, ezt megjelenítjük, majd megvizsgáljuk, hogy a felhasználó megnyomta-e az ENTER gombot, ezután pedig kiolvassuk a hőmérőkből az eltárolt hőfokot illetve lekérdezzük az öntözési zónák aktuális állapotát, és ezt is kiírja a program. Zónák ellenőrzése: A kontroller rendszeres időközönként, megszakítás által vezérelve, sorban megvizsgálja az egyes öntözési zónákra beállított induló és záró időpontokat, ezt összehasonlítja az aktuális idővel, majd a zónák állapotát tároló tömb megfelelő flag-jét beállítja ennek megfelelően. Ennek hatására fognak az egyes zónákhoz kapcsolt kimenetek be-, illetve kikapcsolni. Mivel az időpontok ellenőrzése viszonylag időigényes folyamat, a megszakításban végrehajtandó utasítások számát minimálisra kellett csökkenteni. Emiatt a kontroller csak minden 20. megszakítás alkalmával végez időpont ellenőrzést, akkor is egyszerre csak egy zónának az adatait ellenőrzi. A megszakításon belül nem vezéreljük közvetlenül a kimeneteket, csak a zónák állapotait tároló tömb egy logikai mezőjét állítjuk át. A kimenetek beállítása a főprogram feladata a zónák adatait tároló tömb értékei alapján. RTC kezelés: Az aktuális időt a kontroller a főprogramjának minden ciklusában kiolvassa az RTC modulból I2C buszon keresztül, ez kerül a kijelzőre is. A dátum és idő beállításakor szintén I2C buszon keresztül kell beírni a beállítani kívánt időt az RTC modulba, ehhez az elküldendő adatokat BCD formátumra kell hozni, ami az adatok elküldése előtt zajlik. Egyvezetékes hőmérő: Az egyvezetékes hőmérőt „parasite power mode”–ban használjuk, ekkor elegendő a 3 lábú tokozat két lábát bekötni: GND és DQ. Az érzékelő ebben az üzemmódban csak akkor kap tápfeszültséget, ha kommunikálunk vele, ezért a mérés folyamata a következő: első lépésben a kontroller utasítja a megcímzett szenzort, hogy mérjen hőmérsékletet, majd meghatározott ideig (10 ms) a kommunikációra szolgáló lábat „1” állapotban kell hagyni, hogy az érzékelő még kapjon tápfeszültséget, amíg eltárolja a mért értéket. Ez után szintén utasítani kell az érzékelőt, hogy a tárolójában lévő hőmérséklet értékét olvassa ki és küldje el a buszon.
A firmware-t jelenleg két AVR-hez is lefordítottuk. A fejlesztéshez használt ATmega 1284P-hez http://www.hobbielektronika.hu/cikkek/files/1500/4_soros_m1284p_menuvel_nagypanel.hex és az itthon könnyebben beszerezhető ATmega644-hez is http://www.hobbielektronika.hu/cikkek/files/1500/4_soros_m644_menuvel_nagypanel.hex A cikk még nem ért véget, lapozz! Értékeléshez bejelentkezés szükséges! |
Bejelentkezés
Hirdetés |