-
1. Data: 2015-06-18 10:27:41
Temat: ESP8266 i RTC
Od: Atlantis <m...@w...pl>
Ktoś z was ma jakiś pomysł na zaimplementowanie w miarę dokładnego
zegara czasu rzeczywistego na ESP8266? Przez "w miarę dokładny" mam na
myśli taki, którzy nie "odpływałby" więcej jak kilka sekund na dobę,
pozwalając by synchronizacja z NTP co kilka godzina załatwiała sprawę.
W najnowszym SDK mamy gotowe funkcje do pobierania czasu z serwera NTP.
Problemem jest późniejsza inkrementacja zmiennej, w której trzymamy
czas. Najprościej byłoby użyć mechanizmu timera programowego
(os_timer_t), ale on nie gwarantuje wykonania przypisanej funkcji
dokładnie po upływie zadanego odcinka czasu. Czas będzie więc sobie
pływał...
Dokumentacja najnowszego SDK (wersja 1.1.1) opisuje co prawda funkcje
hw_timer, jednak nie widzę nigdzie odpowiadającego im pliku
nagłówkowego, ani przykładów. Sam opis jest bardzo oględny i lakoniczny.
Czyżby do dokumentacji trafiła jeszcze nie zaimplementowana funkcjonalność?
W końcu mamy też dwie takie funkcje:
system_get_time() - zwraca ilość us od startu systemu (z grubsza coś jak
millis() w Arduino)
system_get_rtc_time() - zwraca ilość taktów zegara RTC
system_get_rtc_calib() - zwraca długość trwania taktu zegara RTC z
dokładnością do 0,1us.
Na podstawie tego można wyliczyć jak długo pracuje zegar. Dałoby się
jakoś wykorzystać ten mechanizm do dokładnego "taktowania" zmiennej, w
której trzymam czas w formacie uniksowym, synchronizowany z ntp?
Na razie wolałbym uniknąć stosowania zewnętrznego układu RTC na I2C.
-
2. Data: 2015-06-18 23:52:55
Temat: Re: ESP8266 i RTC
Od: "Grzegorz Niemirowski" <g...@p...onet.pl>
Atlantis <m...@w...pl> napisał(a):
> Ktoś z was ma jakiś pomysł na zaimplementowanie w miarę dokładnego
> zegara czasu rzeczywistego na ESP8266? Przez "w miarę dokładny" mam na
> myśli taki, którzy nie "odpływałby" więcej jak kilka sekund na dobę,
> pozwalając by synchronizacja z NTP co kilka godzina załatwiała sprawę.
Możesz synchronizować co kilka minut. Zwykle synchronizację z NTP wykonuje
się rzadziej, ale co Ci szkodzi?
PS. Nie obraź się, ale myślę, że niedawna wypowiedź jednego z grupowiczów na
temat Twojego podejścia, jako rozwiązywania problemów nieistniejących gdzie
indziej, była całkiem trafna. ESP8266 to chińszczyzna za 5 dolarów. Całkiem
fajna chińszczyzna, ale próbujesz traktować ją jako pełnoprawny komputer.
Może lepiej rozejrzeć się za modułem, dla którego dokładny timer jest
oczywistością? Albo doczepić zewnętrznego RTC?
To takie luźne przemyślenia. Nie traktuj tego jako krytyki Twoich postów,
które uważam za wartościowe.
--
Grzegorz Niemirowski
http://www.grzegorz.net/
OE PowerTool i Outlook Express: http://www.grzegorz.net/oe/
Uptime: 12 days, 4 hours, 25 minutes and 33 seconds
-
3. Data: 2015-06-19 00:11:26
Temat: Re: ESP8266 i RTC
Od: Jarosław Sokołowski <j...@l...waw.pl>
Pan Grzegorz Niemirowski napisał:
>> Ktoś z was ma jakiś pomysł na zaimplementowanie w miarę dokładnego
>> zegara czasu rzeczywistego na ESP8266? Przez "w miarę dokładny" mam na
>> myśli taki, którzy nie "odpływałby" więcej jak kilka sekund na dobę,
>> pozwalając by synchronizacja z NTP co kilka godzina załatwiała sprawę.
>
> Możesz synchronizować co kilka minut. Zwykle synchronizację z NTP
> wykonuje się rzadziej, ale co Ci szkodzi?
Nie wiem nawet co za jeden, ten ESP8266 (no, wiem już, że chińszczyzna
za pięc dolców) ani nie wiem jak tam NTP zaimplementowano. Ale zaletą
tego wynalazku (NTP) jest to, że nie trzeba synchronizować prawie wcale.
Bo jak już czas z sieci zostanie dany mu raz i drugi, to komputer
sobie z tego wylicza poprawkę (dryft) i spowalnia lub przyśpiesza bieg
wewnętrznego zegara. Tak więc porządny komputer o rozstrojonej
częstotliwości zegara taktującego, gdy ma odpalone NTP, to nawet po
odpięciu od sieci powinien chodzić dobrze. Byle tylko kwarc był sam
w sobie stabilny.
Jarek
--
Raz tylko dany ci czas
Ani on twój ani czyj
Z czasem się wszystko ustoi
Żyj na huśtawce żyj
-
4. Data: 2015-06-19 09:42:32
Temat: Re: ESP8266 i RTC
Od: Atlantis <m...@w...pl>
W dniu 2015-06-19 o 00:11, Jarosław Sokołowski pisze:
> wewnętrznego zegara. Tak więc porządny komputer o rozstrojonej
> częstotliwości zegara taktującego, gdy ma odpalone NTP, to nawet po
> odpięciu od sieci powinien chodzić dobrze. Byle tylko kwarc był sam
> w sobie stabilny.
Wiesz, ESP8266 nie jest żadnym "porządnym komputerem". To prosta płytka
na małym, 32bitowym mikrokontrolerze z wbudowanym sterownikiem WiFi.
Twórcy po prostu udostępnili w SDK filka funkcji do obsługi SNTP. Może
zdefiniować do trzech serwerów. Potem każde wywołanie pewnej funkcji
zwróci pobrany czas w formacie uniksowym. Resztą trzeba się już zająć
samodzielnie.
W SDK jest też zestaw narządzi do periodycznego wykonywania określonej
funkcji, liczenia us od startu systemu (coś jak millis() w Arduino),
zliczania cykli zegara RTC i pomiaru długości cyklu.
Pewnie dałoby się na tej podstawie zrobić dość dokładny zegar. Po prostu
pytam o najlepszy sposób.
Niewykluczone zresztą, że Espressif doda odpowiednie funkcje w którejś z
kolejnych wersji SDK.
-
5. Data: 2015-06-19 11:16:51
Temat: Re: ESP8266 i RTC
Od: Jarosław Sokołowski <j...@l...waw.pl>
Atlantis pisze:
>> wewnętrznego zegara. Tak więc porządny komputer o rozstrojonej
>> częstotliwości zegara taktującego, gdy ma odpalone NTP, to nawet po
>> odpięciu od sieci powinien chodzić dobrze. Byle tylko kwarc był sam
>> w sobie stabilny.
>
> Wiesz, ESP8266 nie jest żadnym "porządnym komputerem". To prosta płytka
> na małym, 32bitowym mikrokontrolerze z wbudowanym sterownikiem WiFi.
Tego już się dowiedziałem.
> Twórcy po prostu udostępnili w SDK filka funkcji do obsługi SNTP. Może
> zdefiniować do trzech serwerów. Potem każde wywołanie pewnej funkcji
> zwróci pobrany czas w formacie uniksowym. Resztą trzeba się już zająć
> samodzielnie.
>
> W SDK jest też zestaw narządzi do periodycznego wykonywania określonej
> funkcji, liczenia us od startu systemu (coś jak millis() w Arduino),
> zliczania cykli zegara RTC i pomiaru długości cyklu.
> Pewnie dałoby się na tej podstawie zrobić dość dokładny zegar. Po prostu
> pytam o najlepszy sposób.
> Niewykluczone zresztą, że Espressif doda odpowiednie funkcje w którejś z
> kolejnych wersji SDK.
Skoro nie udostępnili funkcji do wprowadzania poprawek dla tempa pracy
wewnętrznego zegara, to nic się nie da zrobić, poza okresowym ustawianiem
godziny z zewnętrznego źródła. Jeśli jest dostęp do sieci i serwera czasu
w niej, to czemu tego nie robić zawsze w ten sposób? Niby można przy
każdej poprawce (co 1000 sekund powiedzmy) zwracać uwagę na to, jak duża
była różnica czasu. I aplikować ją później na raty, co 100, 10 czy jedną
sekundę. Ale takie rzeczy powinny być zrobione na niższym poziomie. Wyżej
chyba nie warto.
--
Jarek