Operácie

Zbernica i2c: RTC Hodiny

Zo stránky SensorWiki

Záverečný projekt predmetu MIPS / LS2026 - Meno Priezvisko


Zadanie

Cieľom projektu je pomocou I2C zbernice vyčítať reálny čas z RTC modulu DS1307 a zobraziť ho na sériovom terminály cez UART. Modul DS1307 obsahuje hodiny a kalendár s vlastnou zálohovacou batériou, takže si čas uchová aj po odpojení napájania. Program každú sekundu prečíta aktuálny čas a dátum a vypíše ich vo formáte DD.MM.RRRR (Deň) HH:MM:SS.


Vývojová doska ACROB.

Literatúra:


Analýza a opis riešenia

Projekt využíva mikrokontrolér ATmega328P a externý RTC modul DS1307 zapojený cez I2C zbernicu. Komunikácia prebieha po dvoch vodičoch – SDA (dátová linka) a SCL (hodinová linka), pričom ATmega328P vystupuje ako master a DS1307 ako slave zariadenie s pevnou adresou 0x68. Na obsluhu I2C zbernice je použitá knižnica Peter Fleury I2C Master Library (i2cmaster.h + i2cmaster.c), ktorá využíva hardvérový TWI modul ATmega328P. Piny SDA a SCL sú pevne dané výrobcom čipu – PC4 (A4) pre SDA a PC5 (A5) pre SCL, nie je možné ich zmeniť na iné piny. Na oboch linkách sú nutné pull-up odpory 4,7 kΩ na +5V. Na použitom DS1307 module sú tieto odpory už osadené priamo na doske. DS1307 ukladá všetky hodnoty (sekundy, minúty, hodiny, dátum, mesiac, rok) v BCD formáte (Binary Coded Decimal), kde každá decimálna cifra je zakódovaná do samostatného 4-bitového nibble. Napríklad číslo 47 je uložené ako 0x47 (nie ako 0x2F čo by bol bežný hex zápis). Preto je v kóde nutná konverzia pomocou funkcií bcd_to_dec() a dec_to_bcd() pri každom čítaní a zápise. Dôležitý detail: bit CH (Clock Halt) v bite 7 registra sekúnd musí byť 0, inak DS1307 hodiny netíkajú. Továrensky je tento bit nastavený na 1 (hodiny zastavené), preto ho pri zápise vždy vynulujeme operáciou & 0x7F.


Celkový pohľad na zariadenie.

Nezabudnite doplniť schému zapojenia! V texte by ste mali opísať základné veci zo zapojenia, samotná schéma nie je dostačujúci opis.

Schéma zapojenia.


Algoritmus a program

Algoritmus programu využíva toto a toto, základné funkcie sú takéto a voláma ich tuto... Výpis kódu je nižšie...


#include <avr/io.h>

int main(void)
{
  unsigned int measuredValue;

  while (1)
  {
    /*  relax  */  
  }

  return(0);
}
#include <avr/io.h>

void adc_init(void);                                   // A/D converter initialization

unsigned int adc_read(char a_pin);

Pridajte sem aj zbalený kompletný projekt, napríklad takto (použite jednoznačné pomenovanie, nemôžeme mať na serveri 10x zdrojaky.zip:

Zdrojový kód: zdrojaky.zip

Overenie

Ako ste overili funkciu, napríklad... Na používanie našej aplikácie stačia dve tlačítka a postup používania je opísaný v sekcii popis riešenia. Na konci uvádzame fotku hotového zariadenia.

Aplikácia.

Video:

Čo by som urobil inak

Zamyslite sa spätne nad problémom, ktorý ste riešili a napíšte, čo sa vám nepodarilo a nabudúce by ste spravili inak.


Kľúčové slová 'Category', ktoré sú na konci stránky nemeňte.