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

modul DS1307 pozor

Zdravím, dostal se mi do rukou tento modul DS1307 ale měl jen lithiovou baterii - to by mohl být problém s vybitými bateriemi. Modul je připraven na dobíjecí baterii.
odkaz na článek se schématem a úpravou: https://www.instructables.com/id/Arduino-Shower-Monitor-2/
jinak modul obsahuje ještě EEprom 4096x8bit na I2C
..... petr.kolc@tiscali.cz

Datum
Vložil
Titulek

knihovna

Proč se mi knihovna WProgram.h a DS1307.h neoznačí, nezbarví oranžově jako LiquidCrystal_I2C.h a Wire.h
Jsou to jennom nějake jine druhy souboru ?
Jinak vše funguje suprově....... :-)

Datum
Vložil
Titulek

Re: knihovna

Pokud Ti nevadí angličtina, tak vzsvětlení je tady: https://arduino.cc/en/Hacking/LibraryTutorial

Chápu to tak, že Arduino IDE neumí rozpoznat, co je v jaké knihovně vlastně definované - a proto to neumí zvýraznit.
Jako pomoc používá soubor keywords.txt, kam autor knihovny musí zadat co a jak má IDE zvýraznit.

V Tvém případě si autor/autoři knihoven WProgram a DS1307 nedali tolik práce, jako autoři kninoven LiquidCrystal_I2C a Wire.

Datum
Vložil
Titulek

Názvy dnů

Dobrý den,
nevíte někdo jak udělat, aby se místo čísel dnů v týdnu psaly názvy?

Datum
Vložil
Titulek

Re: Názvy dnů

přes if, kterej ti to změní
třeba máme proměnou denvtydnu, kde mas to cislo a promenou den, kde bude den:
if(denvtydnu == 1)
{
den = "Pondeli";
}
else if(denvtydnu == 2)
{
den = "Utery";
}
....
dál už na to přídeš sám :)

Datum
Vložil
Titulek

začátečník

Dobrej, prosím mám DALLAS DS12887A
Real time
Dá se to nějak použít s arduinem ?

Datum
Vložil
Titulek

čas 45:85:85

Dobrý den,
potřeboval bych pomoct s RTC modulem, mám ten samý co je zde uvedený a Atmega8, když spustím zařízení píše čas 45:85:85 časem ale pak začne ukazovat správný čas (bez zásahu) a pak už funguje dobře. Stejně to vypadá když není RTC připojeno vůbec. Snažil jsem se to vyGooglit ale nenašel jsem nic čeho by se dalo chytit. Dík moc za každou radu.

Datum
Vložil
Titulek

Re: čas 45:85:85

Měl jsem stejný problém. Myslel jsem si, že je problém s RTC modulem. Vyřešil jsem to odporem 10K, který jsem připojil mezi SDA a SCL a funguje to v pohodě.

Datum
Vložil
Titulek

Re: čas 45:85:85 bez incrementu

Zdravím,
mám stejnou potíž, vše zapojeno stejně, v SerialMonitoru mi po vteřině vrací 45:85:85 bez jakéhokoliv incrementu, vyzkoušel jsem i odpor 10k mezi SDA a SCL ale bez úspěchu.
Nevíte někdo prosím kde může být zrada? vadnej RTC? fakt nevím... Díky moc za případnou radu jak se pohnout dál,...

Datum
Vložil
Titulek

Re: Re: čas 45:85:85 bez incrementu

Ahoj, mám stejnej problém 45:85:85 akorát u verze DS1302, nenašel jsi nějaké řešení ?

<< 1 | 2 | 3 | 4 | 5 >>

Vyhledávání

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