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

knihovna

Dobrý den,
kde najdu knihovnu WProgram.h?
Děkuji za odpověď

Datum
Vložil
Titulek

Nejsou to hodiny

Je to hezká hračka, ale pro skutečné hodiny nepoužitelné, čas nelze upravit jinak než po připojení k Pc. Kdo si pořídí hodiny které musí každého půl roku sundat ze zdi, rozebrat, připojit k Pc a pak zase složit, a pokud budou na vzdáleném místě je o zábavu postaráno

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

Re: frekvence SCL

Ano jde. :-)

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

Re: druhý čip

Ano přesně tak. :-)

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?

1 | 2 | 3 | 4 | 5 >>

Vyhledávání

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