Uwaga! rozpoczynamy cykl poradników pod tytułem RTC. Chciałbym wam przedstawić IDEALNY układ RTC (jaki symbol ? o tym za chwilę) .... Czy istnieje w ogóle taki układ scalony na świecie ? Pomyśl, jak często słyszysz wokoło, czy też na różnych forach, że ktoś chce zbudować idealny (swój własny zegarek), ale boryka się najczęściej z jego dokładnością. Podejmowane są więc próby zaradzenia tej sytuacji, próby kalibracji jego oscylatora, próby programowej korekcji czasu itp itd ... a pomimo to zwykle w dłuższej skali czasu problem i tak doskwiera. Dlatego niejednokrotnie sięgamy po coraz to doskonalsze układy. Jednym z nich (jak dotąd) na pewno był i jest niekwestionowany zwycięzca czyli układ DS3231, którego przedstawiłem już jakiś czas temu w poradniku - LINK. Ale i ten układ w skali całego roku może mieć kilkadziesiąt sekund opóźnienia albo się śpieszyć. Dla jednych jest to już ideał ale dla innych niestety nadal wada. W takim razie ponawiam pytanie, czy istnieje na świecie idealny układ RTC ? Taki RTC, który posiada zalety jak niżej :
UWAGA!!! w odcinku nr 8 podałem funkcję zawierającą kod (wiecznego kalendarza) która oblicza dni tygodnia po podaniu daty. Zawiera ona jednak paskudny błąd który objawi się już od 1 marca 2016 i będzie źle obliczać dzień do końca 2016 roku ! W związku z tym trzeba kod tej funkcji poprawić na taki jak podaję niżej:
- wieczny kalendarz
- przechowuje pełną datę
- obsługuje automatycznie czas letni i zimowy
- nigdy nie śpieszy się ani nie późni (nawet o kilka sekund na rok)
Dosyć tego, przedstawiam wam nie jeden a całą listę tego typu układów, spójrzcie ;)
PCF8583 | DS12885Q+ |
PCF8563 | DS1302+ |
ISL12026IBZ | DS1307+ |
MCP795W | DS1337+ |
RTC-4543SA | RX4045SAA |
co wy na tę informację? Każdy z was, spojrzy się na mnie dziwnie i powie, że plotę bzdury ? Że przecież to różne zwykłe popularne lepsze i gorsze układy RTC ale przecież nie idealne! Przecież na pierwszym miejscu w tabeli jest staruszek PCF8583, który wg wielu ma same wady, gdyż jest niedokładny, zależny od temperatury, nie może przechowywać nawet pełnego roku (niby) itp itd...
Teraz na chwilkę oderwijcie się od tego tekstu, przymknijcie oczy i spróbujcie sobie coś wyobrazić. Załóżmy, że mamy biedny niby RTC PCF8583, posiada on podtrzymanie bateryjne na co najmniej kilka dni, Pełny rok przechowujemy w jego pamięci RAM a nie w procesorze. I TERAZ! ... w sylwestra czyli np 31 grudnia o godzine 20:00 trach! zabrakło prądu, nasz zegarek się wyłączył a układ RTC działa tylko na baterii. Niestety elektrownia włącza prąd DOPIERO 1-go stycznia o godzinie 17:00 ! .... Teoretycznie rok w pamięci RAM układu RTC nie mógł się zmienić bo procek nie działał przecież :( .... więc hmmm rok pozostanie ten sam 1-go stycznia ? nie zaktualizuje się ? (piszę o tym bo padło na dole takie ciekawe pytanie) ..... i obawa o taki słaby punkt.
Odpowiadam ;) .... z radością - UWAGA! po tym co opowiem w tym cyklu zrozumiecie i zobaczycie, że 1-go stycznia po włączeniu zegarka - BĘDZIE PRAWIDŁOWO WYŚWIETLONY KOLEJNY ROK ..... Co ciekawe - ten rok znajdzie się od razu w pamięci RAM układu RTC !!! Jak to możliwe ? ..... zapraszam do oglądania - WSZYSTKIEGO się dowiecie, zapewniam was.
A ja się uprę i udowodnię wam w tym cyklu poradników, że my (to znaczy ja albo i ty) jeśli tylko chcemy, a przecież jesteśmy programistami, możemy z KAŻDEGO z nich (wyżej wymienionych) a tak na prawdę ze wszystkich innych również, zrobić taki IDEALNY RTC. Owszem będzie to wymagało od nas kilku dodatkowych zabiegów ;) Głównie zabiegu programistycznego ale także małego zabiegu hmmmm ew dodatku elektronicznego ;). Mówię to wszystko pół żartem pół serio, i mam nadzieję, że docenicie to moje poczucie humoru a także ilość wysiłku jaki włożyłem w przedstawienie tego dowodu na możliwość wyidealizowania każdego układu RTC.
Pobawimy się bowiem rubasznie językiem C i jego niesamowitymi możliwościami. Postaram się pokazać tobie w tym cyklu różne techniki programowania, zobaczymy woltyżerkę oraz salto mortale z udziałem wskaźników, zastosujemy w praktyce w przeróżnych okolicznościach ciekawe operatory języka C, żonglerkę maskowaniem, ... myślę, że już chociażby z tego względu warto zaprosić ciebie do oglądania tych poradników ;)
Innym zabiegiem który można zastosować w celu idealizacji dowolnego układu RTC to dodanie do układu "Dawcy czasu" czyli modułu ATNEL-WIFI232-T, który pozwala na bezproblemowe pobieranie dokładnego czasu z serwerów czasu w internecie, a jednocześnie możemy tym pobranym czasem wciąż "nastawiać automatycznie" nasz zegarek, nasz RTC ;) !
Wiem wiem, powiecie, że to za duży koszt ? hmm gdyby tak było że moduł ATNEL-WIFI miałby zostać użyty TYLKO i wyłącznie jako dawca czasu, to być może i w niektórych przypadkach można byłoby się zgodzić z taką tezą o tej "drogości". Tymczasem moduł wifi można wykorzystać niejako przy okazji do wielu innych celów w naszym układzie zegarka i nie tylko. Pierwsze z brzegu przykłady wynikające z moich poprzednich poradników to:
Spójrz - zebrało się tego trochę ? prawda ? ... ok nie zabieram już cennego czasu na tekst i zapraszam na serial w odcinkach ;)
;)
Teraz na chwilkę oderwijcie się od tego tekstu, przymknijcie oczy i spróbujcie sobie coś wyobrazić. Załóżmy, że mamy biedny niby RTC PCF8583, posiada on podtrzymanie bateryjne na co najmniej kilka dni, Pełny rok przechowujemy w jego pamięci RAM a nie w procesorze. I TERAZ! ... w sylwestra czyli np 31 grudnia o godzine 20:00 trach! zabrakło prądu, nasz zegarek się wyłączył a układ RTC działa tylko na baterii. Niestety elektrownia włącza prąd DOPIERO 1-go stycznia o godzinie 17:00 ! .... Teoretycznie rok w pamięci RAM układu RTC nie mógł się zmienić bo procek nie działał przecież :( .... więc hmmm rok pozostanie ten sam 1-go stycznia ? nie zaktualizuje się ? (piszę o tym bo padło na dole takie ciekawe pytanie) ..... i obawa o taki słaby punkt.
Odpowiadam ;) .... z radością - UWAGA! po tym co opowiem w tym cyklu zrozumiecie i zobaczycie, że 1-go stycznia po włączeniu zegarka - BĘDZIE PRAWIDŁOWO WYŚWIETLONY KOLEJNY ROK ..... Co ciekawe - ten rok znajdzie się od razu w pamięci RAM układu RTC !!! Jak to możliwe ? ..... zapraszam do oglądania - WSZYSTKIEGO się dowiecie, zapewniam was.
A ja się uprę i udowodnię wam w tym cyklu poradników, że my (to znaczy ja albo i ty) jeśli tylko chcemy, a przecież jesteśmy programistami, możemy z KAŻDEGO z nich (wyżej wymienionych) a tak na prawdę ze wszystkich innych również, zrobić taki IDEALNY RTC. Owszem będzie to wymagało od nas kilku dodatkowych zabiegów ;) Głównie zabiegu programistycznego ale także małego zabiegu hmmmm ew dodatku elektronicznego ;). Mówię to wszystko pół żartem pół serio, i mam nadzieję, że docenicie to moje poczucie humoru a także ilość wysiłku jaki włożyłem w przedstawienie tego dowodu na możliwość wyidealizowania każdego układu RTC.
Przy tej okazji zapraszam was na wspaniałą GIMNASTYKĘ MÓZGU !
Pobawimy się bowiem rubasznie językiem C i jego niesamowitymi możliwościami. Postaram się pokazać tobie w tym cyklu różne techniki programowania, zobaczymy woltyżerkę oraz salto mortale z udziałem wskaźników, zastosujemy w praktyce w przeróżnych okolicznościach ciekawe operatory języka C, żonglerkę maskowaniem, ... myślę, że już chociażby z tego względu warto zaprosić ciebie do oglądania tych poradników ;)
Innym zabiegiem który można zastosować w celu idealizacji dowolnego układu RTC to dodanie do układu "Dawcy czasu" czyli modułu ATNEL-WIFI232-T, który pozwala na bezproblemowe pobieranie dokładnego czasu z serwerów czasu w internecie, a jednocześnie możemy tym pobranym czasem wciąż "nastawiać automatycznie" nasz zegarek, nasz RTC ;) !
Wiem wiem, powiecie, że to za duży koszt ? hmm gdyby tak było że moduł ATNEL-WIFI miałby zostać użyty TYLKO i wyłącznie jako dawca czasu, to być może i w niektórych przypadkach można byłoby się zgodzić z taką tezą o tej "drogości". Tymczasem moduł wifi można wykorzystać niejako przy okazji do wielu innych celów w naszym układzie zegarka i nie tylko. Pierwsze z brzegu przykłady wynikające z moich poprzednich poradników to:
- możliwość bezprzewodowej podmiany/aktualizacji firmware
- funkcjonalność zdalnego programatora
- odpytywanie witryn www o rozmaite dane
- uruchomienie prostego serwera http (własna strona np do konfiguracji)
- i wiele innych
Spójrz - zebrało się tego trochę ? prawda ? ... ok nie zabieram już cennego czasu na tekst i zapraszam na serial w odcinkach ;)
part 01
part 02
part 03
odcinek specjalny part 04 fitness dla naszego mózgu |
part 05
part 06
part 07
part 08
part 09
part 06
part 07
part 08
part 09
part 10
KONIEC
;)
Mirku, prosiłeś o komentarze po obejrzeniu 1 odcinka - może mój nic nie wniesie konstruktywnego, ale uważam, że nawet jak przez cały odcinek nie powstaje ani jedna linia kodu, to bardzo przyjemnie się ogląda :):)
OdpowiedzUsuńNiemniej nurtuje mnie taki problem teoretyczny z PCF8583 - gdyby zasilać go z baterii podtrzymującej, zapisywać rok w pamięci RAM, ale dajmy na to wyłączamy urządzenie 31 grudnia i ponownie włączamy 1 stycznia - zmieni nam się rok, ale procesor nic o tym nie będzie wiedział (zakładam, że synchronizacji czasu z NTP dokonujemy dość rzadko, albo jest chwilowo niedostępna) - na ten moment wymyśliłem, że można by do RAM zapisywać oprócz roku też miesiąc i jeśli po restarcie procka miesiąc w rejestrze RTC będzie mniejszy niż w RAM, to zmienił nam się rok.
Założę się jednak, że masz to już nagrane w materiale na 3 czy 4 odcinek i nic szczególnego nie wymyśliłem :):)
Pozdrawiam serdecznie !:)
W odpowiedzi na to pytanie powyżej - UWAGA! Zapewniam ciebie - pokażę to w tym cyklu poradników (co będzie pewnie zaskoczeniem i wisienką na torcie dla wielu widzów) .... że w tym przypadku gdy 31 grudnia wyłączysz RTC PCF8583, będzie on działać tylko na baterii .... to gdy go włączysz 1 stycznia - to zagości szeroki uśmiech na twojej twarzy - ponieważ zegarek zbudowany wg moich porad (chodzi o kod programu w procku) pokaże ci ładnie kolejny ROK !!!
Usuńi to UWAGA! bez ŻADNEGO zapisywania tego roku w pamięci procka !!! ;) UWAGA! bez ŻADNEGO wifi i pobierania czasu z NTP. Przysięgam ci ;) Wszystko załatwimy programowo - no bo w końcu jesteśmy programistami !
Oczywiście jeśli będzie wifi i NTP to wiadomo że będzie łatwizna - ale my nie idziemy na łatwiznę ;)
no ale nie uprzedzam faktów poczekajmy na dalsze odcinki - będzie się działo
No to mi nabiłeś teraz klina - będę siedział i kombinował jak to "rozkminić" samemu, zanim pojawi się w poradniku! - ale o to przecież chodzi, czyż nie ?:)
UsuńAleż oczywiście, że o to chodzi - w końcu jak widać - mówiłem że tym razem robimy ostry fittness dla naszych szarych komórek. Więc kombinuj - ja zapewniam, że można to uzyskać i to jak mówię - bez przetrzymywania informacji o roku w jakiejkolwiek postaci w procku :D
UsuńJuż chyba wiem !!, wysłałem Ci na @ żeby nie psuć zabawy innym - temat maila "Update roku w PCF8583" :)
UsuńMoże więcej takich konkursów programistycznych - myślałeś o tym ?:)
No dokładnie - w sumie to fajny jakby mini konkurs z tego wyszedł a pewnie i rozwiązań będzie kilka różnych a równorzędnych ;)
UsuńWysłałem ci odpowiedź na maila w/s propozycji rozwiązania ;)
UsuńTam też omówiliśmy szczegóły - dzięki !
Usuńreszta w poradniku :)
Witam.
OdpowiedzUsuńA ja się kurcze zastanawiałem gdzie się podziały cztery miesiące tegoż roku i teraz już wiem , 9 minuta 30 sekunda poradnika Mirek wyjaśnia iż posiadanie BB i GB przyspiesza czas :)
Jak zwykle rewelacyjny cykl poradników się zapowiada .
Pozdrawiam .
Dokładnie - masz dobry pomysł - BB i GB to są swego rodzaju czaso-przyśpieszacze :D
UsuńA YB będzie jak Hyper-threading - nie dość że będziemy uginać czas to jeszcze pracować w światach równoległych.
Usuńhahahahaha ;)
UsuńOsiołkowi w żłoby dano... Tyle tych poradników, że nie wiadomo co wybrać. Bloga znam od niedawna.
OdpowiedzUsuńNo właśnie, ledwo co wczoraj komentowałem pierwszą część, a tu już mi komórka pika, że wpadła czwarta - znów "nic" w robocie nie zrobię !! :)
UsuńWitam obserwuję panie Mirku pańskiego bloga i muszę powiedzieć, że to co na nim znalazłem bardzo mnie zainteresowało. Teraz jednak, kiedy został uruchomiony cykl przydatnych filmików z pewnością będę obserwował go jeszcze baczniej pozdrawiam.
OdpowiedzUsuńPani Mirku, dobra robota!
OdpowiedzUsuńCzy w 6 części może będzie:
(d+=m<3?y--:y-2,23*m/9+d+4+y/4-y/100+y/400)%7
Pozdrawiam.
no dokładnie coś w tym stylu zdaje się (chociaż już nie pamiętam szczegółów proszę mi wybaczyć, bo zaimplemetowałem go sobie już ładnych kilka lat temu, i nie wracałem już do tego skoro mam działającą funkcję. Zaletą mojej funkcji jest fakt, że nie musimy korzystać z liczb zmiennoprzecinkowych ;) co jak wiadomo oszczędza mnóstwo pamięci Flash, a jak widzisz w twoim wzorze jest sobie liczba 2,93 ;)
UsuńPan Mirek jak super komputer rozprawia się z takimi równaniami.
OdpowiedzUsuńTe obliczenia również wykorzystują tylko typ całkowity. Wszystkie zmienna są typu INT i wynik dzielenia również będzie INT. Jest to implementacja uniwersalnego wzoru Zellera do obliczania dnia tygodnia. Idealnie pasuje do tytułu 4 cz. tego poradnika „fitness dla mózgu” Pokazuje możliwości języka C. Cała funkcja obliczająca dzień tygodnia została zawarta w jednej linii kodu. Aby ta funkcja zadziałała prawidłowo zmienna d musi być typu int16_t.
OdpowiedzUsuńPozdrawiam
Możliwe , pewnie masz rację - ale w tym wzorze widzę stałą 2,23 ? dobrze widzę ? to jest jednak stała zmiennoprzecinkowa
UsuńNie, to nie jest stała zmiennoprzecinkowa. To jest przykład na zastosowanie rzadko wykorzystywanego operatora , (przecinek).
Usuńaaaa ;) ok ... no fajny sposób
UsuńNiesamowity tekst :o Naprawde jestem w szoku, oczywiscie w tym pozytywnym sensie, jestem pod wielkim wrazeniem, nie wiedziałem, ze ktos może tak swietnie pisac :) Powiedz mi no, uczysz się gdzies pisac? Studiujesz jakas polonistykę? 1. Naprawde, gromkie brawa, chyle czola przed mistrzem pióra, hehe :) Mam nadzieje, ze jeszcze dlugo będziesz nas raczyć swoimi pieknymi wpisami :)
OdpowiedzUsuńDzięki ale ja nie uważam siebie za jakiegoś oratora/mówcę itp ;) Tym bardziej, że nigdzie nie uczyłem się jakoś specjalnie pisać, i na pewno nie studiowałem nigdy polonistyki ;) ... Stąd też zdarzają mi się (błędy za które oczywiście przepraszam bo sam ich niecierpię) .... ale no czasem lubię sobie coś tak od siebie po prostu powiedzieć ...
UsuńW każdej wolnej chwili "pochłaniam" kolejną część poradnika. Jak na razie 3 części za mną. No i jako rasowy maruda czy jak kto woli malkontent:)) muszę stwierdzić, że to całe "ględzenie" Mirku jest wręcz wskazane, bo nie wiem jak do innych, ale do mnie najbardziej trafia właśnie takie drążenie tematu (włączając w to te różne dygresje) i najwięcej dzięki temu "łykam" C.
OdpowiedzUsuńJak sobie przypomnę programowanie na studiach (a szczególnie formę przekazywania wiedzy) to nie ma porównania - z resztą nic już nie pamiętam z tego Pascala... a tutaj proszę bardzo - pod przykrywką niby ględzenia Maestro Mirek przekazuje samą esencję i praktyczne rozwiązania:)) Tak trzymać!:)
Kolejny super cykl poradników. Co mnie troszkę zasmuciło na koniec, to że koniec już takich poradników o module WiFi, a ja z niecierpliwością czekałem na choć jeden o UDP i coś o dwóch socketach. Wiem, że może mało osób to zainteresuje, ale myślę, że i sporo nowych przyciągnie.
OdpowiedzUsuńWidzę, że nie tylko ja czekałem na UDP. Może jednak coś jeszcze powstanie. Dwa sockety to ciekawa sprawa i polecam w tym module - śmigają mega.
UsuńNiedługo wyjdzie na jaw nowa mała hmm niemała (zależy jak dla kogo) niespodzianka ;) ... ale na razie ani mru mru ;)
UsuńTymczasem - Panowie - chyba się zagalopowałem - tzn źle wyraziłem w poradniku. To miała być ostatnia część odnośnie takich jakby hmmm najważniejszych możliwości sprzętowych naszych modułów, a na temat ich oprogramowania .... ło matko .... pewnie jeszcze będzie dużo - tylko że chyba w międzyczasie muszę przerwę zrobić małą po ostatnim jak dla mnie mega maratonie i nakręcić też kilka innych poradników.....
A tym bardziej - że jak mówię - wkrótce mała niespodzianka odnośnie ,.... ale ok o tym potem ;)
Czyżby mega zegar był ukończony? MMmmmmmmmm
UsuńNie nie - nie chodzi o zegar ... ;) chodzi o niespodziankę z modułem wifi
UsuńMirku, czy przewidujesz umieszczenie kodu z tego poradnika ??, bo przez te 10 odcinków, nie licząc tego pierwszego opisowego tak się kotłowało w trakcie tworzenia tego kodu, że ciężko się połapać, zwłaszcza takiemu początkującemu jak ja. :)
OdpowiedzUsuńPanie Mirosławie.
OdpowiedzUsuńMam pewną wątpliwość: czy podczas zmiany czasu letniego na zimowy program nie zapętli się? Chodzi o to, że w momencie gdy, nastąpi godzina 3 program cofnie zegar do drugiej, ale za godzinę nastąpi powtórka. Czy nie byłoby wskazane powołać zmienną LZ (lato-zima), i w momencie przejścia z czasu letniego na zimowy, jej wartość ulegałaby zmianie z 0 na 1 lub odwrotnie? Wówczas program sprawdziłby, czy już jest zima, czy jeszcze lato. W przypadku przejścia z zimy na lato problem się nie ujawni, ponieważ przesuwamy czas do przodu.
Z poważaniem M.
Ale ja nie mam żadnej, nawet NAJMNIEJSZEJ wątpliwości, program nie zapętli się ;) Wszystko zostało nie tylko wzięte pod uwagę w tych rozbudowanych wyrażeniach warunkowych (proszę sobie to dobrze przeanalizować) ale też zostało przetestowane. Nie zapętli się dlatego, że po przestawieniu czasu z letniego na zimowy, już ten ostatni warunek nie będzie sprawdzany ;) ... Jak mówię - proszę sobie dokładnie przeanalizować jeszcze raz ;)
UsuńHej :) Na początku mojego komentarza chcialem Ci podziekowac za to, ze piszesz, bo robisz to naprawdę swietnie, a dzieki Twoim wpisom, szczegolnie przy porannej kawie, można naprawdę się odstresowac i pieknie zaczac dzien :) Jestem pelen podziwu, ciesze się, ze w gąszczu tego za przeproszeniem, piszac kolokwialnie badziewia, udało mi się trafic na taka perełkę :)
OdpowiedzUsuńWitam. Mirku a możesz powiedzieć co to za tytuł piosenki która leci w podkładzie na końcu trzeciej części poradnika?
OdpowiedzUsuńNo nie mów, że nie poznajesz ? ;) ... toż to "kukurydza"
Usuń:)
OdpowiedzUsuńCzy dostępny jest na jakieś stronie soft z bibliotekami z powyższego poradnika?
OdpowiedzUsuńNie, nie jest udostępniony na żadnej stronie ale wkrótce pojawią się te poradniki w postaci OffLine na DVD, na której to będą też umieszczone wszystkie kody źródłowe itp ... Całość będzie dostępna na:
Usuńwww.sklep.atnel.pl
ale jeszcze trwają prace, więc trzeba będzie poczekać
Mirku w jaki sposob jednym kliknieciem zakomentowywujesz wiele linii?
OdpowiedzUsuńCTRL + \
UsuńDzieki
OdpowiedzUsuńJak ktos chce na szybko sprawdzic dzialanie funkcji ustawiania czasu. To mozna w terminalu wpisac czas w formacie atnel wi-fi i kliknac enter. Ja mam to tak zrobione ze podpinam atnel wi fi lub podlaczam sie pod uart i z programiku na kompie wysylam recznie string ustawiajacy rtc. Procek mysli ze przylecialo z wifi ,to bez znaczenia nalezy tylko zachowac kolejnosc zmiennych w sringu.
OdpowiedzUsuńWitam, chciałbym zapytać odnośnie struktury. W jakich przypadkach używać kropki , a kiedy strzałki -> ,bo podczas oglądania odcinków trochę się już w tym pogubiłem.
OdpowiedzUsuńW BB ,też nie mogę znaleźć jednoznacznej odpowiedzi.
Odnośnie przykładów wskaźników i struktur jest mnóstwo przykładów ale już w GreenBooku, Jeśli go nie masz to poczytaj sobie bloga częściej - masz tu trzy takie spore artykuły i poradniki do nadrobienia ;)
Usuńhttp://mirekk36.blogspot.com/2013/07/struktury-w-c-wyjasnijmy-sobie-dokadnie.html
http://mirekk36.blogspot.com/2012/11/avr-eeprom-struktury-poradnik-do-ksiazek.html
http://mirekk36.blogspot.com/2012/12/wskazniki-struktury-callbacki-jazda-bez.html
po nich będziesz wiedział dokładnie o co "kaman" ;)
a w ogromnym skrócie to kropki używamy gdy struktura jest zwykłą zmienną zaś strzałki gdy mamy wskaźnik na strukturę
Mirku czy pojawiły się już te biblioteki w sklepie [wspominałeś o takiej opcji powyżej]?
OdpowiedzUsuńNi diabła nie rusza mi to i trudno znaleźć błąd przy tak ogromnej ilości materiału.
Pozdrawiam!