sobota, 7 czerwca 2014

Obsługa zegara DS1307 w Bascom

Obsługa DS1307 w Bascom


RTC z ang. Real Time Clock czyli zegar czasu rzeczywistego jest elementem służącym do odliczania czasu niezależnie od stanu urządzenia (pracuje, jest w stanie uśpienia czy też wyłączone)
Kostki RTC można także spotkać w wielu systemach mikroprocesorowych projektowanych zarówno przez amatorów jak i profesjonalistów. Mimo iż współczesne procesory posiadają układy czasowe czy też czasowo – licznikowe wbudowane w swoje wnętrze to często stosuje się osobne źródło do odliczania czasu. W tej podpowiedzi chcę przedstawić sposób obsługi jednego z wielu na rynku zegarów RTC, a jest nim kostka DS1307 firmy Dallas.

Układ DS1307 "rozmawia" się z mikrokontrolerem za pomocą magistrali tak zwanej magistrali I2C. Sama magistrala zostanie kiedyś omówiona w osobnym artykule. Kostka posiada wyprowadzenia do których należy podłączyć kwarc o częstotliwości 32.768 kHz, popularnie zwanym zegarowym. Do jednego z pinów podłączyć należy baterię o napięciu 3,2 V, która to bateria ma za zadanie podtrzymać pracę zegara kiedy reszta urządzenia nie jest aktualnie zasilana.


Wewnątrz układ posiada takie bloki funkcyjne jak:
- zegar
- kalendarz
- wewnętrzną pamięć RAM do dowolnego wykorzystania.

Podczas projektowania płytki pod ów zegar warto zachować ogólnie przyjęte warunki odnośnie umieszczania kwarcy w układach odliczających czas. W tym przypadku należało by zajrzeć do noty układu zegara by spojrzeć co proponuje producent.
Połączenie kwarcu z układem DS powinno być jak najbliżej wyprowadzeń samego scalaka. Zegar jest też wrażliwy na zakłócenia przychodzące z szyny zasilania. Dlatego obligatoryjnie należy zastosować kondensator o pojemności 100nF również jak najbliżej wyprowadzeń samego zegara.

Po wstępnym ustaleniu wymagań tego RTC możemy przejść do obsługi zegara od strony programowej. W nocie katalogowej zamieszczona jest tabela z adresami komórek pamięci zegara.

Podczas uruchamiania zegara najpierw należy skonfigurować sprzętowy interfejs I2C w procesorze z którym będzie sprzęgnięty nasz RTC. Wykonujemy to za pomocą następującego polecenia:

Config Sda = PORTx.y 
Config Scl = PORTx.z

Warto w tym miejscu nadmienić, że układy pracujące na szynie I2C posiadają własne adresy do zapisu i odczytu tak więc na jednej magistrali może pracować kilka układów Slave (z angielskiego niewolnik) z jednym układem typu Master (z angielskiego mistrz, władca).

Wszystkie układy mogące pracować na szynie I2C mają po dwa adresy. Jeden z nich służy do zapisu a drugi do odczytu. Nasz dzisiejszy bohater czyli kostka DS1307 ma adres przypisany na stałe, tak więc dla zapisu informacji do układu używamy adresu 208 natomiast do odczytu adresu 209.

Aby móc odczytywać dane z tegoż RTC i do niego dane zapisywać stworzymy sobie dwie stałe o nazwach ds_odczyt oraz ds_zapis

Const ds_odczyt = 209
Const ds_zapis = 208

Stworzymy sobie także zmienne które są wymagane do przechowywania informacji o aktualnym czasie, dacie czy dniu.



Po tym jak zadeklarowaliśmy sobie niezbędne zmienne można zacząć pisać program.
Dwie proste procedury. Jedna do zapisu a druga do odczytu:



'----- Zapis do DS1307 RTC -----
I2cstart
I2cwbyte 208
I2cwbyte 0
I2cwbyte 0
I2cwbyte Minuty
I2cwbyte Godziny
I2cwbyte Dzientygodnia
I2cwbyte Dzien
I2cwbyte Miesiac
I2cwbyte Rok
I2cstop


Nim będziemy mogli cokolwiek zapisać do zegara czy też cokolwiek z niego odczytać najpierw należy zainicjować magistralę I2C, a robi się to w następujący sposób:

I2cstart

Czasem może się zdarzyć że nasz układ będzie wyrzucał różne nieprawidłowości i krzaczki na wyświetlacz. W takim przypadku należy zaraz po konfiguracji procesora dołączyć dwie biblioteki, a są to biblioteki o nazwach $lib "mcsbyte.lbx" oraz $lib "ds1307clock.lib". Po takim zabiegu zegar powinien pracować już prawidłowo.

Brak komentarzy:

Prześlij komentarz