Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 5 lut 2025, o 19:02


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 3 ] 
Autor Wiadomość
PostNapisane: 23 cze 2015, o 11:26 
Offline
Nowy

Dołączył(a): 26 sie 2014
Posty: 24
Pomógł: 0

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.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 cze 2015, o 11:38 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 sie 2013
Posty: 3797
Lokalizacja: Grudziądz
Pomógł: 143

Zegar ds urzywalbym do aktualnej daty i godziny.

Godzine startu i stopu pobieralbym z ds i zapisywal w eeprom / flash

Natomiast czas pracy liczylbym tylko iwylacznie w sekundach a konwertowal bym ja do podania ilosci dni, miesiecy, lat, godzin, minut, sekund taj jak konwertowany jest czas unix wlasnie z tej zmiennej sekundowej ktora to bylaby inkrementowana +1 gdy nadejdzie przerwanie z DS.

Namazane ze smarta.

_________________
Usługi druku przestrzennego - www.drumik.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 cze 2015, o 12:12 
Offline
Nowy

Dołączył(a): 26 sie 2014
Posty: 24
Pomógł: 0

O widzisz... A o unix'ie jakoś w ogóle nie pomyślałem...
Pomysł wart przemyślenia :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 3 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 3 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO