Stránka 1 z 1
AVR-ko a RTC
Napsal: 23 čer 2014, 22:17
od jirka89
Ahoj přátelé.
Měl bych sic jednoduchou otázku, ale přesto ji položím. Stavím si jednoduché hodiny, do kterých jsem implementoval DS1307. Všechno mi zatím funguje a jde to docela dobře.
Ale teď se musím zeptat, je lepší data z RTC vyčítat pořád dokola třeba v 0,5s intervalech, nebo jednou za sekundu, nebo mám zapnout 1s pulzy z RTC a třeba jednou za hodinu jej oslovit a data opravit?? Co si o tom myslíte?
Nebo je to opravdu hloupá otázka a nemám se jí vůbec zabývat?
PS: Zatím to mám řešené tak, že vysílám 1s pulzy z RTC, tímto vyvolám přerušení a data si stáhnu do MCU. Tím mi zbyde dostatek času na jiné úkony.
Napsal: 24 čer 2014, 06:19
od divous
Zdar.
Myslím, že tvé řešení je víc než dostatečné.
Napsal: 24 čer 2014, 20:16
od Atlan
Problem tvojho riesenia je v tom, ze ked RTC zaziada o prerusenie, uP uz neurobi nic ine. napr obsluhu tlacidiel
Urob slucku, obsluha tlacidiel obsluha displeja a citanie dat z RTC, a to cele dokola, vsetko budes stihat a na nic necakas.
Napsal: 24 čer 2014, 22:47
od rnbw
A ked to bude v slucke, tak pocas citania dat z RTC tiez neurobi nic ine.
Akurat bude zbytocne citat nezmenene data z RTC viackrat za sekundu, pripadne zisti neskoro, ze dalsia sekunda uz zacala.
Napsal: 25 čer 2014, 15:11
od rob_brno
Já to dělal tak, že jsem při naběhnutí mcu vyčetl data a čas z RTC a s využitím time.h to nechal už na mcu, krystal mcu běží docela přesně. Time.h má výhodu, že interně počítá čas ve vteřinách v proměnné long tuším od data 1.1.1980. V knihovně jsou konverzní funkce, takže se člověk nemusí patlat s převody. Jinak S DS1307 nemám dobrou zkušenost - rozjížděl se mi za den snad o více než 10Sec. Lepší je použít DS3231.
EDIT: vyčítat to furt dokola je zbytečné plýtvání.
Možná úplně nejlíp - po naběhnutí mcu vyčíst z RTC, převézt pomocí time.h na long hodnotu a tu v interuptu 1Hz (z RTC) inkrementovat, v případě potřeby času ve stringu tuto hodnotu konvertovat do stringu pomocí time.h funkce a pak zobrazit.
Napsal: 25 čer 2014, 21:56
od jirka89
No tak jsem došel do fáze, že vyčítám co sekundu (hodiny, minuty, sekundy, dny, měsíce, teplotu) a k tomu multiplexuju displej.......
Celkem mám použito:
- přerušení pro multiplex - 6x digit (TIMER)
- přerušení pro kontrolu stisku tlačítka (dlouhý a krátký stisk) (TIMER)
- přerušení pro vyčítání hodnot (ext. Interrupt)
- přerušení pro rotační enkodér (ext. Interrupt)
Toto je vše. V nekonečné smyčce nemám nic.
Ta sekunda je podle mě ideální, ikdyž konverze teploty je zde hodně pomalá, takže bych mohl spomalit.
PS: s DS1307 se dá dosáhnout dobré přesnosti. Ale chce to krystal podle parametrů z datasheetu. To samé platí i o dobře navržené DPS.
Napsal: 26 čer 2014, 09:19
od rob_brno
jirka89:
Ano na krystalu, stojí přesnost RTC. S DS1307 lze dosáhnout dobré přesnosti s temperovaným krystalem - jako s DS3231. Jenže komplet přesné RTC s DS3231 koupím z číny za 50kč, bez dalších úprav. S temperovaným řešením bude spoustu práce , nebude to za 50kč, atd,...
Netemperovaným krystalem těžko kdy dosáhnu přesnosti jako DS3231.