Jado napisał(a):
Może problem nie jest z czasem odczytanym z serwera, a z emulacją zegara w urządzeniu?
Jak przestaniesz synchronizować czas z serwera (tymczasowe wyłączenie), to czas systemowy zachowuje się normalnie czy nadal dryfuje?
Chyba masz rację. Wyłączyłem synchronizację z NTP i kazałem programowi po starcie zwiększać co sekundę wartość zmiennej rtc, zaczynając od 1. Po trochę ponad godzinie pracy narobiło się 81 sekund opóźnienia, chociaż serwer NTP nie był wcale używany.
Ustawienia timera wyglądają następująco:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Konfigurację przygotowałem przy pomocy mk AVR Calculatora, sprawdziłem także za pomocą jakiegoś webowego przelicznika.
Częstotliwość taktowania (linia CLKOUT układu ENC28J60) została sprawdzona częstotliwościomierzem, który pokazał 12.500xx MHz. Ostatnie dwie cyfry lekko "pływały" w trakcie pomiaru, ale chyba nie tyle wina samego sygnału, co niedokładności miernika.
Z tego samego powodu nie byłem w stanie ustalić dokładnej częstotliwości przerwania. Z procedurze jego obsługi dodałem machanie pinem, ale częstotliwościomierz pokazuje wartość zmieniającą się pomiędzy 25-30Hz. To raczej znów wpływ miernika, więc trudno powiedzieć coś konkretnego... :/
Cytuj:
Kolega - jak mi się wydaje, za każdym razem przelicza czas ze zmiennej zawierającej liczbę sekund od 1.1.1900?
Nie. W tym przypadku nie potrzebuję czasu w formacie "human readable". Interesuje mnie tylko timestamp (Unix epoch) do oznaczania czasu pomiarów i paru innych zdarzeń. Dlatego tylko raz, przy synchronizacji przeliczam go na liczbę sekund od 1.1.1970. Potem w przerwaniu wartość ta już tylko musi się zwiększać o 1 co sekundę.