Zbernica i2c: RTC Hodiny: Rozdiel medzi revíziami
Zo stránky SensorWiki
| Riadok 22: | Riadok 22: | ||
== Analýza a opis riešenia == | == 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. | |||
[[Súbor:GeminiAI-image3.jpg|400px|thumb|center|Celkový pohľad na zariadenie.]] | [[Súbor:GeminiAI-image3.jpg|400px|thumb|center|Celkový pohľad na zariadenie.]] | ||
| Riadok 77: | Riadok 93: | ||
'''Video:''' | '''Video:''' | ||
<center><youtube>D0UnqGm_miA</youtube></center> | <center><youtube>D0UnqGm_miA</youtube></center> | ||
== Čo by som urobil inak == | == Čo by som urobil inak == | ||
Verzia z 11:58, 26. máj 2026
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.

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.

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.

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.

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.