Obvod reálného času DS1307

Pokud chcete ve svých aplikacích pracovat s aktuálním datem a časem, můžete využít tento zajímavý obvod, který umí více než jen udržovat aktuální datum a čas.

Základní popis

DS1307 je obvod reálného času (RTC, Real-Time Clock), který obsahuje 63 bajtů volatilní paměti (tedy po odpojení napájení se obsah paměti smaže) a je možné s ním komunikovat pomocí sběrnice I²C. Pokud je připojen k napájení, počítá impulzy z externího oscilátoru a ukládá aktuální hodnoty data a času. V tomto režimu, pokud je připojen pouze k baterii má spotřebu méně jak 500nA.

Napájení tohoto obvodu je dvojí — buď 5V z aplikace, nebo 3V ze záložní baterie. Obvod si sám přepíná tyto dva zdroje podle potřeby. Pokud je napětí z aplikace odpojeno, nebo je menší jak napětí baterie plus 0,2V (tedy 3,2V), obvod napájí baterie a je v režimu se sníženou spotřebou a nelze s ním komunikovat. Jakmile externí napětí stoupně nad tuto hranici, obvod odpojuje napětí baterie. Jakmile napětí stoupne nad 1,25 násobek baterie (tedy 3,75V), lze s obvodem začít komunikovat pomocí I²C sběrnice.

Vnitřní paměť

Jak již bylo řečeno, obvod obsahuje 63 bajtů vnitřní volatilní paměti, do které se ukládá aktuální datum a čas a další uživatelské informace. Na prvních 8 bajtech jsou uloženy vteřiny, minuty, hodiny, dny, datum, měsíc, rok, control registr a nakonec 56 bajtů paměti RAM pro uživatelská data. Pokud je k DS1307 připojena baterie, je obsah paměti udržován.

OOh Vteřiny Spodních 7 bitů, 8. bit aktivuje/deaktivuje celý obvod.
O1h Minuty Spodních 7 bitů, zbytek není použit.
O2h Hodiny 7. bit určuje jestli se použije 12 nebo 24 hodinový formát, 6. bit určuje jestli je AM nebo PM (při 12 hodinovém formátu), 6. až 1. bit obsahuje hodiny.
O3h Dny Spodní 3 bity, zbytek není použit.
O4h Datum Spodních 6 bitů, zbytek není použit.
O5h Měsíc Spodních 5 bitů, zbytek není použit.
O6h Rok
O7h Control Viz dále.
O8h Volná RAM

Další podrobnosti viz datasheet.

Struktura vnitřní paměti (zdroj datasheet).
Struktura vnitřní paměti (zdroj datasheet).

Control registr

Na adrese 07h vnitřní paměti je registr, kterým se ovládají některé další funkce tohoto obvodu. Pátý bit (počítáno od LSB) je SQWE. Pokud je nastaven, je na pinu SQW/OUT hodinový signál (jeho frekvence se dá nastavit 1. a 2. bitem tohoto registru), pokud je vynulován, je na tomto pinu hodnota z MSB (tedy 8. bitu).

Frekvence hodinového signálu na pinu SQW/OUT se nastavuje pomocí dvou spodních bitů Control regitru označených jako RS1 a RS0:

RS1,RS0 Frekvence SQW/OUT
00 1Hz
01 4,096kHz
10 8,192kHz
11 32,768kHz

Komunikace pomocí I²C

Čtení a zápis dat z/do obvodu probíhá pomocí sběrnice I²C s hodinovým kmitočtem 100kHz. DS1307 se chová jako slave s adresou 1101000 (+ LSB, který určuje směr komunikace — R/W, viz specifikace I²C).

Zápis dat do paměti začíná adresou zařízení, počáteční adresou paměťové buňky a nakonec následují samotná data. Čtení dat začíná adresou zařízení a za ním následují příchozí data.

Každý odeslaný bajt musí příjemce potvrdit bitem ACK. Celá komunikace přesně odpovídá standardu I²C. Pro další podrobnosti viz datasheet.

Základní zapojení

Obvod DS1307 ke své činnosti potřebuje krystal o frekvenci 32,768kHz. Lze také použít externí oscilátor s touto frekvencí připojený na pin X1 a pin X2 zůstane nezapojený.

Dále je potřeba připojit baterii s napětím 3V. Datasheet uvádí, že s baterií 48mAh je obvod schopen udržovat svoji činnost po 10 let (při okolní teplotě 25 C).

Nejjednodušší zapojení obvodu DS1307.
Nejjednodušší zapojení obvodu DS1307.

Pokud chcete obvod vyzkoušet a nechce se vám konstruovat DPS, nebo obvod oživovat a konfigurovat, můžete použít již hotový přípravek. Nabízí jej například zahraniční server Sparkfun.com za necelých $15. Tento obvod je již oživen, dodáván se zapojenou baterií a tím pádem má aktuální datum a čas (přesněji řečeno je nastaven na MST, to je GMT-7, není ale problém si jej přenastavit na GTM+1).

Hotové zapojení od Sparkfun.com.
Hotové zapojení od Sparkfun.com.

Arduino a time.h

Na závěr uvedu, že tento obvod lze jednoduše použít společně s Arduinem. Knihovna pro práci s časem Timeobsahuje i kód pro synchronizaci s RTC obvodem DS1307. Více informací v článku Arduino a obvod reálného času.