Rtc és eltelt idő számítása.

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
karolyia
DrótVégénSzéndarab
Hozzászólások: 18
Csatlakozott: 2017. április 14. péntek, 7:47

Re: Rtc és eltelt idő számítása.

HozzászólásSzerző: karolyia » 2018. március 19. hétfő, 13:55

És a hibát is benne fejeltettem, ami nem programozási hiba, hanem egy egyszerű matematikai hiba... :D

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

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9908
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

Re: Rtc és eltelt idő számítása.

HozzászólásSzerző: Robert » 2018. március 19. hétfő, 15:25

A LAN lehalhat. Helyi LCD nem árt....
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)


Illetve RTC alarm Library:
https://www.pjrc.com/teensy/td_libs_TimeAlarms.html
http://www.tavir.hu - a gazda :)

karolyia
DrótVégénSzéndarab
Hozzászólások: 18
Csatlakozott: 2017. április 14. péntek, 7:47

Re: Rtc és eltelt idő számítása.

HozzászólásSzerző: karolyia » 2018. március 19. hétfő, 17:46

Köszi! Ezen a systime-on elindulok... :)
_______________________________________________________

Avatar
csegebiga
Chipgyilok
Hozzászólások: 284
Csatlakozott: 2015. március 27. péntek, 21:27

Re: Rtc és eltelt idő számítása.

HozzászólásSzerző: csegebiga » 2018. március 19. hétfő, 17:48

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.

karolyia
DrótVégénSzéndarab
Hozzászólások: 18
Csatlakozott: 2017. április 14. péntek, 7:47

Re: Rtc és eltelt idő számítása.

HozzászólásSzerző: karolyia » 2018. március 20. kedd, 19:53

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

Avatar
csegebiga
Chipgyilok
Hozzászólások: 284
Csatlakozott: 2015. március 27. péntek, 21:27

Re: Rtc és eltelt idő számítása.

HozzászólásSzerző: csegebiga » 2018. március 20. kedd, 22:07

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

young boys
Újonc
Újonc
Hozzászólások: 2
Csatlakozott: 2018. július 30. hétfő, 12:45

Re: Rtc és eltelt idő számítása.

HozzászólásSzerző: young boys » 2018. július 30. hétfő, 13:44

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

young boys
Újonc
Újonc
Hozzászólások: 2
Csatlakozott: 2018. július 30. hétfő, 12:45

Re: Rtc és eltelt idő számítása.

HozzászólásSzerző: young boys » 2018. július 31. kedd, 8:15

És még valami...A forgatást hogy oldjátok meg?Mert azt nem találtam a programban...


Vissza: “Arduino / C-nyelvű programozás (AVR-Duino, EthDuino, Arduino, Diecimila)”

Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 1 vendég