Real Time Counter prawie jak RTC

Real Time Counter prawie jak RTC
Oceń opis

Real Time Counter prawie jak RTC, nie należy mylić ze sobą tych dwóch pojęć choć skrót (RTC) wychodzi identyczny. Real Time Counter – licznik czasu rzeczywistego, Real Time Clock – zegar czasu rzeczywistego.

Real Time Counter prawie jak RTC bo to licznik przystosowany do pracy jako „miernik upływu czasu” a Real Time Clock to niezależne specjalizowane urządzenie (najczęściej układ scalony – IC) zoptymalizowane do bardzo precyzyjnego i energooszczędnego funkcjonowania przy zliczaniu czasu. Upływający czas to pojecie bardzo przytłaczające – przynajmniej dla mnie …. Swego czasu wywaliłem osobisty zegarek i jestem zdrowszym, szczęśliwszym człowiekiem. Jakby nie było jest to wymysł bardziej lub mniej niezbędny. Kiedyś było tak: nadchodził świt ludzie wstawali, … robił się zmierzch szli spać lub i nie  🙂 i to był wyznacznik czasu. Ewentualnie wspomagano się pozycją słonka na horyzoncie, widocznie było wystarczające. Na dziś dzień pęd cywilizacji spowodował powstanie atomowych wzorców czasu …

Precyzyjne pomiary czasu mają kluczowe znaczenie dla efektywnego funkcjonowania naszej cywilizacji. Bez nich przestałyby działać współczesne systemy telekomunikacyjne i nawigacyjne, zwłaszcza satelitarne. Super dokładne zegary są również niezbędne naukowcom podczas badań nad fundamentalnymi cechami rzeczywistości, m.in. przy sprawdzaniu, czy stałe fizyczne rzeczywiście nie zmieniają swych wartości, oraz do testowania, w jakim zakresie ogólna teoria względności poprawnie opisuje Wszechświat.

 huehuehueee bardzo potrzebne do życia.

Ponieważ już każdy korzysta z komputera osobistego lub mikrokomputera zoptymalizowanego do funkcji smartfona tabletu itp… warto wspomnieć, iż te urządzenia aktualizują swoje wskazania czasu z bardzo bardzo, a nawet jeszcze bardziej precyzyjnych zegarów. A to między innymi dzięki usłudze działającej na podstawie protokołu NTP.

Przykładowe serwery wzorca czasu w Polsce

Stratum 1 Time Server

ntp.certum.pl
ntp1.tp.pl
ntp2.tp.pl
tempus1.gum.gov.pl
tempus2.gum.gov.pl


Stratum 2 Time Server

info.cyf-kr.edu.pl
ntp.icm.edu.pl
ntp.nask.pl
ntp.us.edu.pl
time.atman.pl
vega.cbk.poznan.pl


Stratum 3 Time Server

ntp.task.gda.pl
ucirtr.agh.edu.pl

Mój ulubiony to serwer klasy Stratum 2  vega.cbk.poznan.pl w Centrum Badań Kosmicznych w Poznaniu.

Koniec tych wywodów nie mających większego znaczenia/celu dla tego tematu, teraz omówię jak w stosownym µC skonfigurować Timer do pracy jako zegarek. W tym celu trzeba upatrzyć sobie µC, którego jeden z timerów będzie potrafił pracować w trybie asynchronicznym. Dla przykładu może to być ATmega48 ATmega8 … i „większe”. Funkcjonalność ta powoduje, że stosowny timer niezależnie zlicza sobie impulsy wzorcowe i zajmuje się odmierzaniem czasu. Wynika z tego, że timer ten może być taktowany dodatkowym zewnętrznym rezonatorem kwarcowym. Natomiast cały „system” µC taktowany jest drugim sygnałem wzorcowym, najczęściej wewnętrznym generatorem RC (istnieją µC, do których można podłączyć dwa rezonatory kwarcowe). Na takie potrzeby należy zastosować kwarcowy rezonator „zegarkowy” o częstotliwości 32,768kHz, podłączając go do standardowych dla rezonatora kwarcowego wyprowadzeń µC.

fotka z może mało eleganckim ale działającym sposobem podłączenia rezonatora kwarcowego do µC działającego z timerem w trybie asynchronicznym

fotka z może mało eleganckim ale działającym sposobem podłączenia rezonatora kwarcowego do µC działającego z timerem w trybie asynchronicznym

Na obrazku widzimy wersję „budżetową”, jak projektant sposobem „zoptymalizował” ilość miejsca i długość ścieżek na PCB, dla niezbędnych podzespołów, do działania trybu asynchronicznego. Dla mnie na uwagę zasługuje dodatkowy trymer do korekty, aby uzyskać dużą precyzję zliczania czasu.
Konfiguracja Fuse Bits nie wymaga żadnych szczególnych poczynań. Pamiętać jedynie należy o ustawieniu wymaganej szybkości taktowania wewnętrznego oscylatora RC, gdy fabryczne 1MHz nie będzie optymalną nastawą.

Wiadomo już co nieco o sprzęcie, więc można przystąpić do spraw związanych z odpowiednią konfiguracją i programowaniem.

Aby móc korzystać z tego dobrodziejstwa jakim jest tryb asynchroniczny trzeba skonfigurować odpowiednio Timer2 i ustawić stosowny wektor przerwań/zezwolenie globalne. Można to uczynić co najmniej w dwojaki sposób, dzięki możliwościom środowiska Bascom AVR. Pomijam tu tryb „ręczny” z samodzielnym ustawieniem i konfiguracją krok po kroku wszystkich stosownych rejestrów µC, bo tak też można.

Po prostu konfiguracja odpowiedniego Timera załączenie przerwań i obsługa przerwania. dla wygody można by „uruchomić” bibliotekę datetime.lbx np tak:

i można wtedy używać tych wszystkich cudownych zmiennych „dato-czasowych” 😉 . (opiszę poniżej)
Przykład kolejny:

Taaaak ;-D przykład dla „wygodnych”  😉 ale nie ma nic za nic, kod puchnie ;-p taki przymus.

Jeżeli użyje się dyrektywy Config clock (dotyczy trybu SOFT lub USER), kompilator automatycznie deklaruje zmienne licznikowe -> _sec, _min, _hour, _day, _month, _year. Zmienne Time$ i Date$ będą także zadeklarowane. Są to specjalne zmienne (typu string), są one traktowane inaczej. Patrz TIME$ i DATE$. Jedne i drugie są ze sobą powiązane i można je modyfikować. Rzeczony tryb Config Clock = Soft robi (przygotuje) wszystko za nas, należy tylko korzystać z tych dobrodziejstw … znaczy kompilator poszykuje i ponastawia wszystko 😉 Tak, że jak widać na przykładzie wystarczy wyświetlać sobie wskazania ze zmiennych. W tym trybie mamy jeszcze dostępny parametr konfiguracyjny, dzięki któremu dostępna jest funkcjonalność przerwania wywoływanego co 1s. Po dyrektywie Config Clock = Soft należy dodać opcjonalny parametr [, GOSUB = SECTIC]. Oczywiście w kodzie dodajemy obsługę procedury SECTIC (nazwy etykiety nie wolno modyfikować), łącznie z instrukcją powrotu RETURN. Załączenie tej funkcjonalności pochłonie dodatkowo 30 bajtów hardware stack. Dlatego warto pamiętać o zadeklarowaniu większej ilości pamięci stosu sprzętowego na te właśnie potrzeby.
Natomiast tryb Config Clock = User już wymaga samodzielnego oprogramowania  obsługi zewnętrznego układu RTC, (nie podłączamy rezonatora zegarkowego).  W tym celu należy utworzyć procedury jak w przykładzie:

 W przypadku pominięcia którejś kompilator będzie zgłaszać błąd.
Modyfikacja lub odczyt jednej ze zmiennych Time$ lub Datema powodować wywołanie powyższych procedur. Aby wymusić płynną/cykliczną aktualizację zmiennych licznikowych, można skorzystać z przerwania zewnętrznego, o ile dołączony IC w postaci RTC posiada taką funkcjonalność, lub generować sobie przerwanie wewnętrzne.

Uff dużo tego …

Na pocieszenie mogę pochwalić się swoim błędem podczas poznawania tej konfiguracji. W kodzie samodzielnie konfigurowałem Timer2 dyrektywą CONFIG TIMER2 = TIMER, ASYNC=ON, PRESCALE = 128, a potem dodatkowo chciałem użyć Config Clock = Soft, kompilator nie mógł tego przetrawić generując błąd. Hymmm chyba jakoś inaczej to było …. nie pamiętam już, a ówczesne notatki znikły. ;-/
Tutaj jedno wykluczało drugie. Jeśli zdecydujemy się na jeden zapis, drugiego już nie należy stosować.

Jest jeszcze kilka spraw wartych wytłumaczenia sobie. 😉

Bascom-owe funkcje czasu z biblioteki

Bascom-owe funkcje czasu z biblioteki datetime.lbx

Zabieram się za zbudowanie modelu o tej funkcjonalności od dłuższego czasu i jakoś nie umiem wystartować …

Przykładowe użycie Config Clock = User w moim artukule DS1307 na “warsztacie”

źródło cytatu -> http://www.racjonalista.pl/

Share Button
Tagi , , , , , .Dodaj do zakładek Link.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

16 + seven =

This site uses Akismet to reduce spam. Learn how your comment data is processed.