Witam Tam takie pytanie: Mam urządzenie w którym mam licznik czasu pracy na zmiennych:
sek, min, godz, dni.
Czas pracy monitorowania to 2-4 tyg. Przycisk START i licznik zaczyna odliczać czas pracy.
Jako, że sterownik może mieć różne warunki pracy, nie polegał bym tak do końca na kwarcu atmegi, a że w szufladzie leży moduł z Arduino z układem DS3231, więc postanowiłem go wykorzystać do taktu sekundowego i raz dziennie do synchronizacji licznika.
W tej chwili jeszcze na sucho, ale wymyśliłem to tak, że w chwili uruchomienia, do zmiennych pobieram aktualną godzinę z układu RTC. Przyjmijmy, że to zmienne:
sek_start, min_start, godz_start, dni_start.
Gdy mam godzinę 23, 59 to pobieram aktualną godzinę z RTC:
sek_upd, min_upd, godz_upd, dni_upd
I teraz zastanawiam się jak efektywnie dokonywać synchronizacji czasu. Widzę to tak, że od zmiennych upd odjąć zmienne start. Ale to się w sprawdzi w obrębie tych samych jednostek. Gorzej jak przesunie się dzień, godzina itd. w tedy zaczną wychodzić wartości ujemne i zaczyna się bigos. Można sprawdzać poprzedzającą jednostkę i jeżeli zmienił się dzień do wyniku godzin dodawać 24h, podobnie z minutami itd.
Ale może jest na to jakiś łatwiejszy sposób, żeby nie piętrzyć kodu. Nie ukrywam, że zaczyna mi zmniejszać się ilość miejsca w pamięci procesora i chciał by jak najefektowniej to zrobić.
Najłatwiej było by po prostu w chwili startu odliczania, wyzerować DSa i mam czysty licznik sprzętowy od zera bez ani jednej linijki kodu i to było by piękne. Ale przydało by się mieć też aktualną datę rozpoczęcia i zakończenia pracy. Choć z tego jestem skłonny zrezygnować. Ewentualnie zrobię start urządzenia z synchronizacją daty przez RS'a.
Ale może ktoś naprowadzi na coś mądrego z moją wersją synchronizacji bez zerowania zegara.
|