Rtc és eltelt idő számítása.
Re: Rtc és eltelt idő számítása.
És a hibát is benne fejeltettem, ami nem programozási hiba, hanem egy egyszerű matematikai hiba...
Ez nem az eletelt időt számolja, hanem az eltelt ciklusokat! Pont azt szeretném, hogy az eltelt idő legyen a pontos számítási alap. A ciklusban 3 delay is van és ha összeadjátok akkor nem kön ki 6mp. Márpedig egy ciklus 6mp alatt fut le! Ez a szám nőhet és csökkenhet a lefutott parancsok és a hűmérséklet függvényében. Ráadásul nem is kicsi mértékben...
Ez nem az eletelt időt számolja, hanem az eltelt ciklusokat! Pont azt szeretném, hogy az eltelt idő legyen a pontos számítási alap. A ciklusban 3 delay is van és ha összeadjátok akkor nem kön ki 6mp. Márpedig egy ciklus 6mp alatt fut le! Ez a szám nőhet és csökkenhet a lefutott parancsok és a hűmérséklet függvényében. Ráadásul nem is kicsi mértékben...
_______________________________________________________
Re: Rtc és eltelt idő számítása.
A LAN lehalhat. Helyi LCD nem árt....
A datetime libraryba belelesve:
https://github.com/PaulStoffregen/Time/ ... r/Time.cpp
Itt a systime
Illetve RTC alarm Library:
https://www.pjrc.com/teensy/td_libs_TimeAlarms.html
A datetime libraryba belelesve:
https://github.com/PaulStoffregen/Time/ ... r/Time.cpp
Itt a systime
Kód: Egész kijelölése
time_t makeTime(const tmElements_t &tm)
https://www.pjrc.com/teensy/td_libs_TimeAlarms.html
http://www.tavir.hu - a gazda
Re: Rtc és eltelt idő számítása.
Köszi! Ezen a systime-on elindulok...
_______________________________________________________
Re: Rtc és eltelt idő számítása.
Túlbonyolítod az életed.
Nézd meg a rtc adatlapját.
https://datasheets.maximintegrated.com/en/ds/DS3231.pdf
Láthatod benne, hogy az rtc egy irható-olvasható i2c memoriaként is felfogható, ahol a téged érdeklő adaok ott vannak bcd kódolt dupla digitekben (2x4biten) ezeket akár byte tipusba is tudod konvertálni, és sima összeadással megkapod a cél értéket.
Mivel a keltetési ciklusod nem hosszabb 30 napnál, ha a startnál nulláztad az rtc áramkörét, még a speciális átviteli szabályokat sem kell ismerned.(30,v31napos hónap, szökőév)
Mivel az rtcnek saját táplálása van, áramszünet esetén sem nullázódik az értéke,így hibatűrőbb a rendszer.
Én valahogy így csinálnám meg:
Loop Start
Beolvasok egy rtc adathalmazt( rtcnap, rtcóra, rtcperc: byte)
. Nap=Bcd2dec(rtcnap)
. Óra=bcd2dec(rtcóra)
. Perc=bcd2dec(rtcperc)
Ha Nap==CélNap akkor
. Ha Óra==Célóra akkor
. . Ha Perc==Célperc akkor
. . . Teszem, amit tenni kell
Ha pergésmentesen le van nyomva két gomb //=indítás
. Leresetelem a rtc regisztereit (rtcÉv=00, rtcHo=01, rtcNap=01, rtcÓra=00, rtcPerc=00, rtcMp=00) //itt nem kell a dec2bcd konverzió
Várok egy-két percet
Loop Stop
Mindehez nem kell az rtc lib, egyedül az i2c memoria írás/olvasás helyes alkalmazása.
Nem kell dátumhoz hozzáadnod, kivonnod mert mindig az indulás óta eltelt időt mutatja az rtc
De ha már írsz időt az rtcbe, be is állíthatod az alarmot is:
Akkor így nézne ki a rendszer:
Megszakítàskezelő rutin
. Teszem, amit először tenni kell
Megszakítást valamelyik i/o lábra kötni lefutó élre (falling)
Ha pergésmentesen le van nyomva két gomb //=indítás
. Leresetelem a rtc regisztereit (rtcÉv=00, rtcHo=01, rtcNap=01, rtcÓra=00, rtcPerc=00, rtcMp=00) //itt nem kell a dec2bcd konverzió
Beállítom az ébresztést (rtcAlarmÉv=00, rtccAlarmHo=01, rtccAlarmNap=dec2bcd(21), rtccAlarmÓra=00, rtccAlarmPerc=00, rtccAlarmMp=00)
Elküldjük a chipet aludni
Mondjuk ez utóbbi példa faék egyszerűre lett lecsupaszítva, de ha már érted a példát, akkot menet közben, mindig a következő teendőre időzítve, akár a naponként egy percre a tojásforgatást is megoldhatod vele.
Nézd meg a rtc adatlapját.
https://datasheets.maximintegrated.com/en/ds/DS3231.pdf
Láthatod benne, hogy az rtc egy irható-olvasható i2c memoriaként is felfogható, ahol a téged érdeklő adaok ott vannak bcd kódolt dupla digitekben (2x4biten) ezeket akár byte tipusba is tudod konvertálni, és sima összeadással megkapod a cél értéket.
Mivel a keltetési ciklusod nem hosszabb 30 napnál, ha a startnál nulláztad az rtc áramkörét, még a speciális átviteli szabályokat sem kell ismerned.(30,v31napos hónap, szökőév)
Mivel az rtcnek saját táplálása van, áramszünet esetén sem nullázódik az értéke,így hibatűrőbb a rendszer.
Én valahogy így csinálnám meg:
Loop Start
Beolvasok egy rtc adathalmazt( rtcnap, rtcóra, rtcperc: byte)
. Nap=Bcd2dec(rtcnap)
. Óra=bcd2dec(rtcóra)
. Perc=bcd2dec(rtcperc)
Ha Nap==CélNap akkor
. Ha Óra==Célóra akkor
. . Ha Perc==Célperc akkor
. . . Teszem, amit tenni kell
Ha pergésmentesen le van nyomva két gomb //=indítás
. Leresetelem a rtc regisztereit (rtcÉv=00, rtcHo=01, rtcNap=01, rtcÓra=00, rtcPerc=00, rtcMp=00) //itt nem kell a dec2bcd konverzió
Várok egy-két percet
Loop Stop
Mindehez nem kell az rtc lib, egyedül az i2c memoria írás/olvasás helyes alkalmazása.
Nem kell dátumhoz hozzáadnod, kivonnod mert mindig az indulás óta eltelt időt mutatja az rtc
De ha már írsz időt az rtcbe, be is állíthatod az alarmot is:
Akkor így nézne ki a rendszer:
Megszakítàskezelő rutin
. Teszem, amit először tenni kell
Megszakítást valamelyik i/o lábra kötni lefutó élre (falling)
Ha pergésmentesen le van nyomva két gomb //=indítás
. Leresetelem a rtc regisztereit (rtcÉv=00, rtcHo=01, rtcNap=01, rtcÓra=00, rtcPerc=00, rtcMp=00) //itt nem kell a dec2bcd konverzió
Beállítom az ébresztést (rtcAlarmÉv=00, rtccAlarmHo=01, rtccAlarmNap=dec2bcd(21), rtccAlarmÓra=00, rtccAlarmPerc=00, rtccAlarmMp=00)
Elküldjük a chipet aludni
Mondjuk ez utóbbi példa faék egyszerűre lett lecsupaszítva, de ha már érted a példát, akkot menet közben, mindig a következő teendőre időzítve, akár a naponként egy percre a tojásforgatást is megoldhatod vele.
Re: Rtc és eltelt idő számítása.
megoldva!
a setupban elmentem az rtc aktuális idejét az egyik alarmba és a loopban bármikor elő tudom hívni.
lényegében az amit csegebiga írt, csak parasztosan írva
annyira kézenfekvő volt, hogy nem is tudom, hogy miért nem gondoltom első körben erre....
a setupban elmentem az rtc aktuális idejét az egyik alarmba és a loopban bármikor elő tudom hívni.
lényegében az amit csegebiga írt, csak parasztosan írva
annyira kézenfekvő volt, hogy nem is tudom, hogy miért nem gondoltom első körben erre....
_______________________________________________________
Re: Rtc és eltelt idő számítása.
arra azért vigyázz, hogy a setup() minden chip induláskor lefut.
azért írtam volt úgy, hogy a start gomb(ok) külön voltak vizsgálva a setuptól, és ott volt az rtc írás berakva.
így a setup nem állítja el a már futó folyamat időzítéseit egy esetleges újraindulás esetén.
és a véletlen megnyomás ellen védhet a két gombos indulás: az egyik pl egy kulcsos kapcsoló, a másik egy nyomógomb. ha mindkettő zár, (bemenet low) akkor indul a szekvencia, írod az rtc-ben az értékeket
azért írtam volt úgy, hogy a start gomb(ok) külön voltak vizsgálva a setuptól, és ott volt az rtc írás berakva.
így a setup nem állítja el a már futó folyamat időzítéseit egy esetleges újraindulás esetén.
és a véletlen megnyomás ellen védhet a két gombos indulás: az egyik pl egy kulcsos kapcsoló, a másik egy nyomógomb. ha mindkettő zár, (bemenet low) akkor indul a szekvencia, írod az rtc-ben az értékeket
-
- Újonc
- Hozzászólások: 2
- Csatlakozott: 2018. július 30. hétfő, 12:45
Re: Rtc és eltelt idő számítása.
Sziasztok!
A DHT22 nem pontatlan a keltetőhöz?Ha jól emlékszem 0,5 °C a hiba határa.
A keltetőnél tized fokra állítunk vagyis 0,5 tized az már sok hibának így én az AM2315-öt javasolnám használni.
Ja és kihagytátok a hűtést a programból.
Üdv YB
A DHT22 nem pontatlan a keltetőhöz?Ha jól emlékszem 0,5 °C a hiba határa.
A keltetőnél tized fokra állítunk vagyis 0,5 tized az már sok hibának így én az AM2315-öt javasolnám használni.
Ja és kihagytátok a hűtést a programból.
Üdv YB
-
- Újonc
- Hozzászólások: 2
- Csatlakozott: 2018. július 30. hétfő, 12:45
Re: Rtc és eltelt idő számítása.
És még valami...A forgatást hogy oldjátok meg?Mert azt nem találtam a programban...