Zadaním tohto projektu bolo navrhnúť a realizovať hodiny reálneho času s RTC modulu PCF8583P komunikujúcim cez zbernicu I2C. Systém s mikroprocesorom ATmega328P, ktorý zobrazuje aktuálny čas pomocou UART (PuTTY) alebo LCD displeja.
Navrhnite a realizujte hodiny reálneho času s RTC modulu PCF8583P komunikujúcim cez zbernicu I2C. Systém s mikroprocesorom ATmega328P, ktorý zobrazuje aktuálny čas pomocou UART (PuTTY) alebo LCD displeja.
[[Súbor:DS138833_pinout.jpg|400px|thumb|center|RTC I2C modul DS138833 a jeho pinout.]]
[[Súbor:DS138833_pinout.jpg|400px|thumb|center|RTC I2C modul DS138833 a jeho pinout.]]
Riadok 11:
Riadok 11:
* [https://docs.arduino.cc/resources/datasheets/A000066-datasheet.pdf Arduino UNO datasheet]
* [https://docs.arduino.cc/resources/datasheets/A000066-datasheet.pdf Arduino UNO datasheet]
* [https://www.nxp.com/docs/en/data-sheet/PCF8583.pdf PCF8583P RTC modul datasheet]
* [https://www.nxp.com/docs/en/data-sheet/PCF8583.pdf PCF8583P RTC modul datasheet]
* [https://www.analog.com/media/en/technical-documentation/data-sheets/ds1388.pdf DS1388 I2C RTC modul datasheet]
Riadok 18:
Riadok 17:
== Analýza a opis riešenia ==
== Analýza a opis riešenia ==
V zadaní špecifikovaný RTC modul PCF8583P som pri vypracovaní nepoužil. Namiesto neho som použil DS138833. Tento RTC modul je veľmi podobný ako PCF8583P, má rovnaký pinout a totožné funkcionality. Bolo pre mňa jednoduchšie použiť DS138833 pretože PCF8583P som nemal a musel by som si ho kúpiť alebo požičať. Oba tieto moduly komunikujú cez zbernicu I2C, majú základné pripojenie pomocou liniek SDA (data) a SCL (clock), napájanie VCC a GND.
Opíšte sem čo a ako ste spravili, ak treba, doplňte obrázkami...
PCF8583P je starší a jednoduchší obvod vyrábaný firmou NXP. Poskytuje základnú funkciu RTC – uchovávanie hodín, minút, sekúnd, ako aj dátumu. Interný register je rozdelený do 8-bitových buniek, ktoré sú prístupné cez I²C protokol. Jeho výhodou je, že je často dostupný v podobe modulu s vývodmi prispôsobenými pre breadboard. Okrem základného napájania potrebuje tento modul zvyčajne externú záložnú batériu aby si zachoval čas aj pri strate hlavného napájania.
Podrobne opíšte použité komponenty (okrem základnej dosky s ATmega328P procesorom), pridajte linky na datasheety alebo opis obvodu.
DS1388, vyrábaný firmou Maxim Integrated, je modernejší RTC obvod. Poskytuje presnejšie počítanie času, integrované záložné napájanie (cez pin Vbackup), EEPROM pamäť na ukladanie dát a alarmového výstupu. DS138833 je SMD súčiastka, ktorú mám osadenú aj spolu s pull-up odpormi na PCB.
==== Použité komponenty ====
[[Súbor:GeminiAI-image3.jpg|400px|thumb|center|Celkový pohľad na zariadenie.]]
* Arduino UNO v3
* DS138833
* 2ks 4.7 kΩ pull-up rezistory na I2C SDA a SCL
* MS621FE batéria
* káblové vodiče
[[Súbor:DC1388_typicka_schema.jpg|400px|thumb|center|Typická schéma zapojenia z datasheetu.]]
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.
[[Súbor:pcb_ds1388.jpg|400px|thumb|center|PCB s RTC modulom DS138833.]]
=== Algoritmus a program ===
=== Algoritmus a program ===
Algoritmus programu obsahuje hlavičkovú časť programu s použitými knižnicami, definíciu pomocných funkcií a hlavnú funkčnú časť.
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...
==== Použité knižnice ====
* uart - knižnica na komunikáciu cez UART
* i2cmaster - knižnica pre I2C komunikáciu
==== Vlastné funkcie ====
* bcd2hex(uint8_t val) - prevod BCD (Binary-Coded Decimal) na HEX, využívaná pri čítaní aktuálneho času z RTC modulu
* hex2bcd(uint8_t val) - prevod HEX na BCD, využívaná pri zápise aktuálneho času do RTC modulu
* i2c_scanner(void) - funkcia vypíše do sériovej linky I2C adresu pripojeného zariadenia
* set_time_date(...) - nastaví aktuálny čas a dátum do RTC modulu DS1388
* read_time_date(...) - číta aktuálny čas a dátum z RTC modulu DS1388
==== Hlavný program ====
Main začína inicializáciou uart a i2c. Ďalej mám dve pomocné testovanie funkcie. Prvá uart_puts(...) testuje správnu funkcionalitu sériovej linky. Druhá i2c_scenner() overuje adresu RTC DS1388 modulu. Pokračuje definícia premenných a ich typu. Nakoniec samotný zápis času a čítanie s výpisom času vo while cykle. Knižnice i2cmaster.h a i2cmaster.c som nevkladal, pretože som na nich neurobil žiadne zmeny.
<tabs>
<tabs>
<tab name="AVR C-code"><syntaxhighlight lang="c++" style="background: LightYellow;">
<tab name="AVR C-code"><syntaxhighlight lang="c++" style="background: LightYellow;">
/*
uPrijekt MIPS
Filip Boco
Téma: Zbernica i2c: hodiny reálneho času
Poznámka: Namiesto čipu PCF8583P som použil čip DS1388 I2C RTC.
*/
#define F_CPU 16000000UL
#define BAUD 9600
#include <avr/io.h>
#include <util/delay.h>
#include <stdio.h>
#include "i2cmaster.h"
#include "uart.h"
#define DS1388_ADDR 0x68
/*--------------------/ Funkcie na prevod BCD na HEX a HEX na BCD /--------------------*/
static uint8_t bcd2hex(uint8_t val) {
return ((val>>4)*10)+(val&0x0F);
}
static uint8_t hex2bcd(uint8_t val) {
return ((val/10)<<4)|(val % 10);
}
/*--------------------/ I2C scenner na zistenie I2C adresy /--------------------*/
void i2c_scanner(void) {
uart_puts("I2C scanner start...\r\n");
for (uint8_t address = 1; address < 127; address++) {
i2c_start(address << 1); // Shift adresa na zápis (write)
if (i2c_write(0) == 0) {
uart_puts("Device found at 0x");
uart_put_hex(address);
uart_puts("\r\n");
}
i2c_stop();
_delay_ms(10);
}
}
/*--------------------/ Funkcie pre zápis a čítanie času na RTC module /--------------------*/
Záverečný projekt predmetu MIPS / LS2025 - Meno Priezvisko
Zadanie
Navrhnite a realizujte hodiny reálneho času s RTC modulu PCF8583P komunikujúcim cez zbernicu I2C. Systém s mikroprocesorom ATmega328P, ktorý zobrazuje aktuálny čas pomocou UART (PuTTY) alebo LCD displeja.
Opíšte sem čo a ako ste spravili, ak treba, doplňte obrázkami...
Podrobne opíšte použité komponenty (okrem základnej dosky s ATmega328P procesorom), pridajte linky na datasheety alebo opis obvodu.
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...
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:
Kľúčové slová 'Category', ktoré sú na konci stránky nemeňte.