Lekce 11 - Hodinový modul DS1307

15.03.2013 00:00

V 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 :-):

 

  RTC.stop(); // zastaví čas
  RTC.set(DS1307_SEC,1); //nastaví sekundy
  RTC.set(DS1307_MIN,57); // nastaví minuty
  RTC.set(DS1307_HR,17); // nastaví hodiny
  RTC.set(DS1307_DOW,2); // nastaví den v týdnu
  RTC.set(DS1307_DATE,18); // nastaví den v měsíci
  RTC.set(DS1307_MTH,1); // nastaví měsíc
  RTC.set(DS1307_YR,10); // nastaví rok
  RTC.start(); // spustí čas

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ět

Diskusní téma: Lekce 11 - Hodinový modul DS1307

Datum
Vložil
Titulek

frekvence SCL

Zdravím, lze nějak nastavit frekvenci přenosu dat na síti IIC? Moc děkuji.

Datum
Vložil
Titulek

druhý čip

prosím. k čemu je ten druhý čip? ...to je 2v1 na jedné desce čas+paměť, který jsou oddělený?

Datum
Vložil
Titulek

zapis v danom case

potreboval by som pomôcť s funkciou - zo zapísom dat na SD v 15 minútových intervaloch, t.j XX:15:00 - XX:30.00 - XX:45:00 - XX:00:00

Datum
Vložil
Titulek

Re: zapis v danom case

Myslím si, že k tomuto účelu stačí delay(900000) (s tim přepočtem na milisekundy si nejsem jistý, že jsem to správně spočítal)

Datum
Vložil
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
Vložil
Titulek

k čemu je SQ a DS

dobrý den, k čemu slouží piny SQ a DS?

Datum
Vložil
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
Vložil
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
Vložil
Titulek

Re: Re: Nefunguje RTC

Prosim hodite sem program na ozivenie dik

Datum
Vložil
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

1 | 2 | 3 | 4 | 5 >>

Vyhledávání

arduino8.cz © 2015 Všechna práva vyhrazena.