Lekce 11 - Hodinový modul DS1307
15.03.2013 00:00V minulém díle jsme si ukázali jak připojit LCD pomocí rozhraní I2C a dnes si ukážeme jak toto rozhraní využít k připojení modulu času k Arduinu. Tento modul RTC (Real Time Clock) jak můžete vidět na obrázku je malý s několika připojovacími piny. Nás budou opět zajímat SLC a SLA. O rozhraní I2C jsme si již psali minule tak není již potřeba vysvětlovat. Napájení je modulu také jasné a zřetelně popsané.
Na obrázku vidíte modul jak z jedné strany tak i ze strany druhé.
Já jsem využil zapojení z předchozího dílu a k arduinu nechám připojen displej LCD přes I2C a k této sběrnici připojím i hodinový modul. Oproti minulému dílu ale použiju malé nepájivé kontaktní pole k vytvoření jakéhosi uzlu I2C a napájení. Dalších součástek není třeba.
Z Arduina je vyvedeno pouze napájení a dva kabílky sběrnice I2C.
Ještě uvádím, jak již jsem psal v předchozím návodu, že sběrnice I2C je u modelu Mega na 20 a 21 pinu. U Arduino UNO je to na pinech A4 a A5. Nunto si přečíst dokumentaci k jednotlivým modelům.
Nyní ke knihovně. Ani nevím, zda již knihovna DS1307 ke správné funkci již byla mezi ostatními nebo ne. Já jsem jí v ardesáři libraries našel, ale po trochu bádání jsem zjistil, že mi moc nevyhovovala. Hledal jsem proto na internetu a našel jsem myslím pro nás to pravé a jednoduché k naprogramování. Ke stažení je knihovna zde a potom z mého google disku zde (tu i s našim programen nebo jejich modifikacemi). Nakopírujte si jí do adresáře libraries - tu původní smažte pokud tam bude.
Program je jednoduchý , řádně okomentovaný. Tento je pokud nemáte diplej LCD pro sběrnici I2C - viz minulý díl a čas je odesílán na serivý port, kde si ho můžete shlédnout pomocí SerialMonitor:
Výstup času na seriový port
V druhém případě, kdy jsme si z minulého dílu připojili displej s LCD I2C, bude program vypadat takto:
29: }
Zobrazení času na LCD I2C
Jak jste si všimli, v programu je funkce sprintf(cas, "%02d:%02d:%02d", rtc[2],rtc[1],rtc[0]);. Tu hned vysvětlim. Mnozí kteří ovladají programování v C již ví, že to slouží k formátování textu. Něco o tom jak se to pomocí funkce dělá si můžete přečíst zde. Pro použití hodnot k zobrazení času je důležité aby čísla byly dvouciferné. Ono zobrazení času v půl třetí ráno a 4 vteřiny, které by vypadalo takto - 2:30:4 - nevypadá nějak dobře. Náš vystup po zformátování bude tedy 02:30:04. A to nám udělá právě funkce sprintf. První proměná je cilové pole znaků, které jsme si v programu již definovali. Druhá proměná v uvozovkách je vlastní výstupní formát a třetí proměná ve fci jsou data která se budou kopírovat.
Jenom krátký příklad jinak všechny formátovací řetezce najdete v dokumentaci jazyka c
int hodnota = 320;
sprintf(vystupni_data, "Aktuální hodnota je:%5d mA", hodnota);
// výstup je "Aktuální hodnota je: 320 mA"
sprintf(vystupni_data, "Aktuální hodnota je:%05d mA", hodnota);
// výstup je "Aktuální hodnota je:00320 mA"
Dále k hodnotám uložených v rtc:
- rtc[0] - vteřiny
- rtc[1] - minuty
- rtc[2] - hodiny
- rtc[3] - den v týdnu
- rtc[4] - den v měsíci
- rtc[5] - měsíc
- rtc[6] - rok
Pokud se Vám čas zobrazuje nesprávně a je potřeba ho nastavit použijte tento kód v setup(), program nahrajte do arduina, čas se přepíše a potom ho zase z programu vymažte (správná čísla si dosďte sami :-):
Pro nás je důležité, že vše funguje a doufám, že výsledek je stejný jako na mém videu.
Všechny obrázky zdrojové soubory a knihovny najdete na google disku zde.
———
ZpětDiskusní téma: Lekce 11 - Hodinový modul DS1307
Datum | 12.04.2015 |
---|---|
Vložil | Piter |
Titulek | DS1302 |
Zdravím všechny.Mám modul DS1302.A vůbec nevím jak to připojit S LCD.A jak to napsat?
———
Datum | 02.04.2015 |
---|---|
Vložil | tomajstr |
Titulek | k čemu je SQ a DS |
dobrý den, k čemu slouží piny SQ a DS?
———
Datum | 08.01.2015 |
---|---|
Vložil | Tomáš |
Titulek | Nefunguje RTC |
Dobrý den, pracuji na zaverecne praci , kde chci pouzit tento program , ale nefunguje mi , mam mega2560(cina),lcdkeypad 16x2 ,a Tiny RTC I2C AT24C32 DS1307 , dam program a zapojim (scl-scl , sda -sda , ++,-- klasicky :D ) ale na serial portu mi to ukazuje 00:00:00 misto casu ktery sem nastavil a tak porad dokola , nevi nekdo co stim ? dekuji za odpoved
———
Datum | 13.03.2015 |
---|---|
Vložil | xxx |
Titulek | Re: Nefunguje RTC |
Když poprvé zapneš ten modul,tak neni nastaven a ani zapnut. Musí se nejdřív nějakým prográmkem oživit
———
Datum | 21.03.2015 |
---|---|
Vložil | jano |
Titulek | Re: Re: Nefunguje RTC |
Prosim hodite sem program na ozivenie dik
———
Datum | 23.03.2015 |
---|---|
Vložil | Vladi |
Titulek | Re: Re: Re: Nefunguje RTC |
to ozivenie sa mi zda ze je na konci postupu, kde je RTC.start() .. inak pokial to aj napriek nastavenemu casu hadze 00:00:00, tak bude skor chyba v kabloch, ked som to mal len prestrcene cez dierky v module tak to neslo, treba to vsetko zapajkovat a pojde to
———
Datum | 23.03.2015 |
---|---|
Vložil | xxx |
Titulek | Re: Re: Re: Re: Nefunguje RTC |
Já měl právě stejný problém, psalo to pořád dokola 00:00:00, tak jsem zkusil program s knihovnou RTClib.h z https://uart.cz/383/arduino-a-obvod-realneho-casu/ a modul se rozeběhl.
———
Datum | 21.01.2016 |
---|---|
Vložil | hanka |
Titulek | Re: Re: Re: Re: Nefunguje RTC |
Skouknete ten zlaty plisek co se s nim pricvakava baterka shora a druha strana plisku jde na plosak! Ten spodek plisku musi byt pripajen k plosacku, nam se to prave odlouplo a takle blblo
———
Datum | 05.12.2014 |
---|---|
Vložil | schiki |
Titulek | zimní a letní čas |
Ahoj,moc chválím tyto stránky a děkuji autorovi.
Potřebuji naprogramovat arduino tak aby mi v určité dny v týdnu a určité hodiny spínalo výstupy,teď uvažuju jestli je vhodný modul DS1307,nezáleží na nějaké té sekundě ale zase bych nerad aby se to po čase rozcházelo třeba o 5 minut (zařízení bude namontované někde kde se moc nechodí.
Teď řeším jak na to se zimním a letním časem protože ten nevychází vždycky stejně(jestli to řešit nějakýma podmínkama),to samé přestupné roky a počet dnů v jednotlivých měsících-má tohle ten modul v sobě?
———
Datum | 16.12.2014 |
---|---|
Vložil | LuBoss |
Titulek | Re: zimní a letní čas |
DS1307 umí pouze přestupné roky až do 2100. Pro práci s letním čase by čip musel obsahovat i veškerá světová časová pásma a hlavně začátky a konce letního času pro pásma a země ve kterých se používá. To je pro různé oblasti jiné. Další velký problém je, že začátek a konec letního času se může změnit. V ČR současný stav platí od roku 1996. Pokud by nastala v budoucnu změna, byly by všechny již vyrobené čipy vadné. Nicméně letní čas v ČR má jasně definovaný začátek a konec. Na letní čas se v ČR každý rok přechází poslední neděli v březnu, kdy po 01:59:59 SEČ (středoevropského času) následuje 03:00:00 SELČ (středoevropského letního času). Letní čas končí poslední neděli v říjnu, kdy se po 02:59:59 SELČ hodiny posunou na 02:00:00 SEČ. Doporučuji tedy používat buď UTC nebo SEČ čas (+1h) a na jeho základě vypočítat a případně zobrazovat letní čas. Je to jenom programování s kontrolou měsíců, dnů, a dne v týdnu (poslední neděle v měsíci).