AVR-ko a RTC

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Odpovědět
Zpráva
Autor
Uživatelský avatar
jirka89
Příspěvky: 271
Registrován: 24 úno 2006, 00:00
Bydliště: Zlín

AVR-ko a RTC

#1 Příspěvek 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.
Uživatelský avatar
divous
Příspěvky: 164
Registrován: 08 říj 2010, 00:00
Bydliště: ValMez

#2 Příspěvek od divous »

Zdar.

Myslím, že tvé řešení je víc než dostatečné.
Uživatelský avatar
Atlan
Příspěvky: 4514
Registrován: 10 kvě 2004, 00:00
Bydliště: Košice

#3 Příspěvek 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.
Uživatelský avatar
rnbw
Příspěvky: 37419
Registrován: 21 bře 2006, 00:00
Bydliště: Bratislava

#4 Příspěvek 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.
Uživatelský avatar
rob_brno
Příspěvky: 209
Registrován: 12 říj 2012, 00:00

#5 Příspěvek 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.
Uživatelský avatar
jirka89
Příspěvky: 271
Registrován: 24 úno 2006, 00:00
Bydliště: Zlín

#6 Příspěvek 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.
Uživatelský avatar
rob_brno
Příspěvky: 209
Registrován: 12 říj 2012, 00:00

#7 Příspěvek 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.
Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“