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: 24358, Oldal olvasási idő: kb. 4 perc
Lapozás: OK   4 / 6

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.png

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.png 

2. ábra 1-wire hőmérő

-          Ha ez sikeresen lezajlott, egy üdvözlő képernyő jelenik meg:

 3.png

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.png 

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.png 

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.png

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.png

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.png

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:

  • Kijelző kontraszt
  • Nagyszám kijelzés ideje
  • Master kimenet funkciója: master szelep vagy normál zóna
  • Esőérzékelő figyelembe vétele
  • Bővítő port funkciója: nincs, zóna bővítő, Ethernet port

9.png

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!
Következő: »»   4 / 6
Értékeléshez bejelentkezés szükséges!
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem