DS1307 na „warsztacie”

4.5/5 - (2 votes)

DS1307 zegar czasu rzeczywistego (RTC)

… o niskim poborze mocy, pełne dziesiętne kodowane binarne (BCD) zegar / kalendarz oraz 56 bajtów NV SRAM. Adres i dane przesyłane są szeregowo przez dwukierunkową magistralę I²C. Zegar / kalendarz zapewnia obsługę sekund, minut, godzin, dnia tygodnia, dnia miesiąca, miesięcy i informacje o latach, zaprojektowany do 2100. Ostatni dzień, miesiąca jest automatycznie dostosowywany do miesięcy krótszych niż 31 dni, łącznie z korektami dla lat przestępnych. Zegar działa zarówno w trybie 24-godzinnym lub 12-godzinnym ze wskaźnikiem AM / PM. DS1307 posiada wbudowany układ power-sense, który wykrywa przerwy zasilania głównego i automatycznie przełącza się na zasilanie zapasowe. Obsługa pomiaru czasu w dalszym ciągu funkcjonuje z zasilania zapasowego. Działając z podtrzymania bateryjnego, programowalny prostokątny sygnał wyjściowy, zużywa mniej niż 500nA w trybie rezerwowym przy uruchomionym oscylatorze. Zakres temperatur: -40°C do +85°C. SCL Clock Frequency 100  kHz.

Supply Voltage  VCC min 4.5  typowo 5.0  max 5.5V
Battery Voltage  VBAT min 2.0 typowo 3 max 3.5 V

Bardzo istotny jest dobry kondensator blokujący blisko pinów zasilania głównego USC,  oraz odpowiednia mozaika PCB koło pinów rezonatora.zalecane prowadzenie ścieżek i układ elementówRTC1307

Układ posiada jedno wyjście programowalne SQW/OUT, na którym może generować jedną z czterech częstotliwości przebiegu prostokątnego 1Hz, 4kHz, 8kHz, 32kHz. Aby uaktywnić tą funkcjonalność bit SQWE ustawiamy na 1. Wyjście jest typu otwarty dren i wymaga zewnętrznego rezystora pullup.  Napięcie pullup może wynosić do 5,5 V, niezależnie od napięcia na VCC. Jeśli nie używany tej funkcjonalności, to można pozostawić ten pin jako „pływający”. SQW / OUT działa zarówno z VCC jak i VBAT.
Dla przypomnienia:
gdy VCC spadnie poniżej 1,25 x VBAT, układ w trakcie pracy przerywa dostęp i resetuje licznik adresowy. Operacje wejściowe do urządzenia w tym momencie nie są rozpoznawane, aby uniknąć błędnych danych zapisywanych na urządzeniu z nieprawidłowymi poziomami logicznymi. Gdy VCC spadnie poniżej VBAT, układ przełącza się w tryb niskiego poboru mocy z zasilaniem rezerwowym z baterii . W momencie włączenia zasilania, gdy napięcie VCC +0,2V jest większe niż VBAT urządzenie przełącza się z akumulatora do VCC, oraz załącza obsługę wejść kiedy VCC jest większa niż 1,25 x VBAT.

Precyzja zegara jest zależna od dokładności kryształu i kompatybilności pomiędzy obciążeniem pojemnościowym układu oscylatora i pojemnościowego obciążenia dla którego kwarc został zaprojektowany.
Dodatkowy błąd będzie generowany pływaniem częstotliwości, spowodowanym zmianami temperatury kwarcu. Szum zewnętrznego obwodu w połączeniu z obwodem oscylatora może powodować spieszenie zegara.
Czyli warto wyizolować układ zegara, jeśli to możliwe albo go ekranować.

Opiszę króciutko mapę adresową RTC DS1307  i rejestrów RAM. Rejestry RTC są pod adresami: 00h do 07h, a rejestry RAM 08h do 3FH. Podczas wielobajtowego dostępu, gdy wskaźnik osiągnie adres 3FH (koniec przestrzeni RAM), zostanie przekierowany na początek przestrzeni adresowej do 00h (zegar).
Czas i kalendarz są ustawiane lub inicjowane przez zapis odpowiednich bajtów rejestru. Czas i kalendarz w rejestrach  są zapisywane w formacie BCD. Przyrosty dzień  tydzień rejestrowane są o północy. Wartości, które odpowiadają poszczególnym dniom tygodnia są definiowane przez użytkownika, ale muszą to być wartości następujące po sobie (tj. jeżeli 1 jest równe Niedziela, następnie 2 równe Poniedziałek, i tak dalej). Bit 7 rejestru 0 służy do zatrzymania zegara (CH bit). Kiedy ten bit jest ustawiony na 1, oscylator jest wyłączony. Po skasowaniu (wpisaniu 0), oscylator jest włączony. Przy pierwszym włączeniu zasilania urządzenie rejestruje godziny i daty są zwykle ustawiane na 01/01/00 01 00:00:00 (MM / DD / RR DOW HH: MM: SS). Bit CH w rejestrze sekund zostanie ustawiony na 1. Zegar może zostać zatrzymany, gdy nie jest wymagane rejestrowanie czasu, spowoduje to mniejsze zużycie prądu (IBATDR).
DS1307 może pracować w trybie 12-godzinnym lub w trybie 24-godzinnym. Bit 6 rejestru godzin definiuje ten tryb pracy (mode-select-bit). Gdy ma stan wysoki, wybrany jest tryb 12-godzinny. W trybie 12-godzinnym, bit 5 jest znacznikiem AM / PM z logicznym przełącznikiem PM. W trybie 24-godzinnym, bit 5 jest bitem „dwudziestek” godzin (20 do 23 godzina). Gdy bit trybu 12/24-hour ulega zmianie, wartość godziny musi być wprowadzona ponownie. W trakcie powtórnych odczytów lub zapisów rejestrów czasu i daty przez użytkownika, są wykorzystywane bufory celem uniknięcia błędów podczas automatycznej aktualizacji rejestrów wewnętrznych. Podczas operacji odczytu, bufory użytkownika są zsynchronizowane do wewnętrznych rejestrów przy każdej operacji START I2C. Informacja o czasie jest czytana z tych właśnie rejestrów wtórnych podczas kiedy zegar kontynuuje pracę.
Każdy transfer zapisu występujący na I2C jest potwierdzany przez DS1307. Ilekroć rejestr sekund jest zapisywany dzielnik łańcucha licznika czasu zostanie zresetowany. Kiedy dzielnik łańcucha zostanie zresetowany aby uniknąć problemów z rollover, pozostałe rejestry czasu i daty muszą być zapisane w ciągu jednej sekundy.

Rejestry zegara:

register timekeeper RTC1307

control register RTC1307- Rejestr sterujący DS1307 służy do konfiguracji wyjścia SQW OUT.
Bit 7: Output Control (OUT).
Za jego pośrednictwem mamy możliwość ustawienia poziomu logicznego stanu spoczynkowego pinu gdy nie korzystamy z funkcjonalności generatora przebiegu prostokątnego. I tak jeśli bit konfiguracyjny OUT = 1 pin SQW/OUT jest w stanie wysokim  i jeżeli bit OUT = 0 wyjście jest w tanie niskim.
Bit 4: Square-Wave Enable (SQWE).
Gdy bit ten = 1, załącza wyjście oscylatora. Częstotliwość wyjściowego sygnału prostokątnego zależy od wartości bitów RS0 i RS1. Kiedy częstotliwość na wyjściu jest ustawiona na 1 Hz, rejestr zegara aktualizuje przebieg prostokątny na opadającym zboczu. Konfiguracja bitu po załączeniu zasilania = 0.
Bits 1 and 0: Rate Select (RS[1:0]).
Bity kontrolują częstotliwość przebiegu prostokątnego na wyjściu, gdy wyjście zostało aktywowane. Przy początkowym włączeniu zasilania, bity te są zazwyczaj ustawione na 1.

 Adres sprzętowy układu RTC

Układ nie jest skomplikowany w obsłudze a dodatkowo całą sprawę upraszczają możliwości BASCOM AVR.  Poniżej kawałek programu gdzie zapoznawałem się z obsługą zegara RTC. Widoczne są również funkcje zbędne dla działania obsługi zegara.

Trochę się „bawiłem”, efekt jest wyśmienity. Na samym początku testów dołączyłem bibliotekę

nie potrafiłem znaleźć o niej żadnych informacji. Nie działała mi również konfiguracja

Dopiero po odłączeniu tej biblioteki wspomniana funkcjonalność działa jak należy. Użycie dyrektywy Config Clock = User odwala cała robotę z obsługą zmiennych powiązanych z domierzaniem czasu (zarówno zegar jak i kalendarz). Należy jedynie zadbać o dopisanie procedur odpowiedzialnych za zapis i odczyt danych z układu scalonego RTC. Reszta dzieje się samodzielnie, podczas używania funkcji Date$ Time$. Dane są wtedy „automatycznie” zapisywane lub odczytywanie z IC. Wszystkie lata przestępne i długości miesięcy pilnowane są przez układ – o czym pisałem już wcześniej. Możliwości te czynią tą konstrukcję bardzo wygodną w użyciu. Niestety automatyzacja obsługi generuje „trochę” kodu. Nie napotkałem problemów podczas uruchamiania układu. Będę chciał uruchomić funkcjonalność generatora przebiegu prostokątnego aby korzystać z takiej możliwości w układzie bez zajmowania timerów odmierzaniem czasu.

widok co układ modelowy wypluwa na konsolę terminala, prezentowana szersza funkcjonalność kodu niz prezentowana

widok co układ modelowy wypluwa na konsolę terminala, prezentowana szersza funkcjonalność kodu niz prezentowana

Dodatkowe informacje o funkcjonalności Config Clock = User można zdobyć przeglądając mój artykuł Real Time Counter prawie jak RTC

Otagowano , , , .Dodaj do zakładek Link.

4 odpowiedzi na „DS1307 na „warsztacie”

  1. guma1975 komentarz:

    Witam odpalałem DS1337 to prawie to samo.
    Niestety akurat na ATmega328p taktowaną 16MHz – i tu pomogło „Config Twi = 100000” (przy hardwarowym twi $lib „I2C_TWI.LBX”) czyli 100kHz sprawdzałem oscylkiem bez tego clk był okolo 900 paru kHz hihi… Jeszcze nie bawiłem się na 400kHz. Software czyli $forcesofti2c   :  $lib „i2c.lbx” działało od razu (clock oscylkiem było około 45kHz to co tu się dziwić)

    to mnie dopiero nakierowało, że tu coś za szybko leci zamiast od razu oscyloskopem sprawdzić no trudno ech (hihi oczywistych rzeczy się nie sprawdza) pozdrowienia serdeczne!

    • kaktus komentarz:

      Witam uprzejmie.

      Wiem jedno, z Twojego opisu emanuje mnustwo szczęścia (euforii). Ale chyba … chyba zapomniałeś o przekazie jaki miał nieść – czym się chciałeś podzielić. Treść jest na tyle skrótowa, że nie do końca rozumiem w czym rzecz.
      Na ewentualne perypetie z obsługą magistrali TWI mogę polecić abyś zapoznał się z opisem moich doświadczeń:
      I²C TWI – jak kaktus „dawał po garach” ;-D

      Pozdrawiam serdecznie i życzę wielu udanych projektów.
      ps.
      Co do $forcesofti2c polecę Ci zapoznanie się z opisem tej dyrektywy na witrynie MCS.
      jest tam między innymi taka wzmianka:
      The $forcesofti2c directive force the ATXMEGA to use software I2C/TWI Library instead of the hardware I2C registers of ATXMEGA.

  2. guma1975 komentarz:

    Masz rację zapomniałem o przekazie… dzięki Tobie odgrzałem stare zabawki, za co dzięki wielkie!
    Mam nadzieję, że ta super stronka będzie z nami zawsze Pozdrawiam serdecznie.

    • kaktus komentarz:

      A teraz ja podziękuję za ciepłe słowo.

      Ostatnimi czasy pochłonął mnie jeden projekt, no i nie ukrywam kondycja „psychofizyczna” poleciała na ryjek …
      O projekcie pewno niebawem będzie „głośno” na zielonej 😉

      A witrynki nie odpuszczę, choć by się waliło, paliło itp.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

19 − 3 =

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.