Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2026:theodor_ioan.buliga:andrei_ioan.simion [2026/05/04 01:56]
andrei_ioan.simion [Descriere generală]
pm:prj2026:theodor_ioan.buliga:andrei_ioan.simion [2026/05/27 08:40] (current)
andrei_ioan.simion [Bibliografie/Resurse]
Line 19: Line 19:
   ***Procesare (Logica):** Placa ATmega328P coordoneaza intregul sistem. Ea gestioneaza protocoalele de comunicare SPI (pentru citirea datelor de pe cardul SD) si I2C (pentru sincronizarea cu ceasul de timp real si afisaj), procesand in acelasi timp semnalul PWM pentru iesirea audio.   ***Procesare (Logica):** Placa ATmega328P coordoneaza intregul sistem. Ea gestioneaza protocoalele de comunicare SPI (pentru citirea datelor de pe cardul SD) si I2C (pentru sincronizarea cu ceasul de timp real si afisaj), procesand in acelasi timp semnalul PWM pentru iesirea audio.
   ***Afisare (Output):** Informatiile esentiale, precum ora curenta, data, sau numele melodiei redate, sunt afisate clar pe un ecran LCD 16x2. Acesta ofera feedback vizual imediat pentru fiecare comanda primita de la input.   ***Afisare (Output):** Informatiile esentiale, precum ora curenta, data, sau numele melodiei redate, sunt afisate clar pe un ecran LCD 16x2. Acesta ofera feedback vizual imediat pentru fiecare comanda primita de la input.
 +  ***Sunet (Feedback):​** Sistemul audio, format dintr-un tranzistor de amplificare si un difuzor, reda fisierele de pe cardul SD. Acesta ofera atat functia de relaxare prin muzica, cat si avertizarea sonora pentru alarma programata.
 +  ***Stocare (Data):** Fisierele audio si setarile sistemului sunt gestionate folosind un card MicroSD si memoria interna EEPROM a microcontroller-ului,​ asigurand pastrarea alarmei chiar si dupa oprirea dispozitivului.
 </​note>​ </​note>​
  
-===== Hardware Design =====+{{schema_bloc_buddy.png}}
  
-<note tip> +**Laboratoare folosite:** 
-Aici puneţi tot ce ţine de hardware design+  *Laborator 0 GPIO: Configurarea pinilor ​de intrare si iesire 
-  * listă ​de piese +  *Laborator 2 IntreruperiAsigurarea unui raspuns instantaneu la apasarea butoanelor 
-  * scheme electrice (se pot lua şi de pe Internet şi din datasheet-uri,​ e.g. http://​www.captain.at/​electronic-atmega16-mmc-schematic.png) +  *Laborator 3 Timere. PWM: Generarea semnalului audio 
-  * diagrame de semnal ​ +  *Laborator 5 SPI: Comunicarea cu modulul MicroSD 
-  * rezultatele simulării +  ​*Laborator 6 I2C: Conectarea ecranului LCD si a modulului RTC
-</​note>​+
  
-===== Software ​Design =====+===== 1. Hardware ​Design =====
  
 +In cadrul acestui capitol este descris design-ul hardware al sistemului, tabelele detaliate de mapare a pinilor intre microcontrolerul ATmega328P si periferice, precum si lista de componente utilizate.
  
-<note tip> 
-Descrierea codului aplicaţiei (firmware): 
-  * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) 
-  * librării şi surse 3rd-party (e.g. Procyon AVRlib) 
-  * algoritmi şi structuri pe care plănuiţi să le implementaţi 
-  * (etapa 3) surse şi funcţii implementate 
-</​note>​ 
  
-===== Rezultate Obţinute =====+Sistemul este construit in jurul microcontrolerului ATmega328P. Acesta interactioneaza cu modulele periferice prin protocoale de comunicatie dedicate (I2C, SPI) si semnale PWM / GPIO digitale.
  
-<note tip> +  * **ATmega328P** - Unitatea centrala de procesare care controleaza citirea timpului, interogarea butoanelor, afisarea pe ecran si generarea semnalului audio. 
-Care au fost rezultatele obţinute în urma realizării proiectului vostru+  * **Modul RTC DS1307 (I2C)** - Mentine timpul real (ore, minute, secunde, data) si comunica cu MC-ul prin magistrala TWI/I2C (pinii A4 - SDA, A5 - SCL)
-</note>+  * **Ecran LCD 16x2 cu adaptor I2C (PCF8574)** - Afiseaza interfata grafica, timpul curent si meniurile de configurare. Partajeaza aceeasi magistrala I2C. 
 +  * **Modul Card SD (SPI)** - Stocheaza fisierele audio in format RAW/WAV (pinii 10 - CS, 11 - MOSI, 12 - MISO, 13 - SCK). 
 +  * **Modul Amplificator Audio SC8002B cu Difuzor Integrat** - Amplifica semnalul audio PWM de inalta frecventa generat de Pinul 9 (PB1) si reda sunetul. Are potentiometru integrat pentru controlul volumului. 
 +  * **Bloc de butoane (GPIO)** - 5 butoane conectate pe Portul D (PD2 - PD6) cu rezistente interne de pull-up activate.
  
-===== Concluzii ===== 
  
 +==== Maparea Pinilor si Conexiuni ====
 +
 +Pentru o organizare clara si stabila pe breadboard, conexiunile electrice si distributia semnalelor de la microcontrolerul ATmega328P catre modulele periferice au fost mapate conform tabelelor de mai jos.
 +
 +### 1. Magistrala I2C (Ecran LCD si Modul RTC DS1307)
 +Modulul RTC si adaptorul PCF8574 al ecranului LCD sunt conectate in paralel pe aceeasi magistrala I2C (TWI), avand adrese hexazecimale diferite.
 +^ Pin ATmega328P ^ Semnal ^ Pin Periferic (RTC & LCD) ^ Tip Semnal ^ Descriere ^
 +| PC4 / Analog 4 | SDA | SDA | Digital I/O | Linie de Date I2C (Serial Data) |
 +| PC5 / Analog 5 | SCL | SCL | Digital Input | Linie de Ceas I2C (Serial Clock) |
 +| +5V | VCC | VCC | Power | Alimentare logica 5V |
 +| GND | GND | GND | Power | Masa comuna |
 +
 +### 2. Interfata SPI (Modul Card SD)
 +Comunicarea rapida cu cardul SD pentru streaming-ul esantioanelor audio brute se realizeaza prin perifericul SPI hardware.
 +^ Pin ATmega328P ^ Semnal ^ Pin Modul SD ^ Tip Semnal ^ Descriere ^
 +| PB2 / Digital 10 | SS / CS | CS | Digital Output | Chip Select (Activ pe 0 logic) |
 +| PB3 / Digital 11 | MOSI | MOSI | Digital Output | Master Out Slave In (Date catre SD) |
 +| PB4 / Digital 12 | MISO | MISO | Digital Input | Master In Slave Out (Date de la SD) |
 +| PB5 / Digital 13 | SCK | CLK / SCK | Digital Output | Serial Clock (Ceas SPI) |
 +| +5V | VCC | VCC / 5V | Power | Alimentare modul SD (cu regulator pe placuta) |
 +| GND | GND | GND | Power | Masa comuna |
 +
 +### 3. Conexiune Modul Audio / Difuzor (SC8002B)
 +Semnalul audio generat prin Fast PWM pe 8 biti este trimis direct catre amplificator pentru a fi redat in difuzor.
 +^ Pin ATmega328P ^ Semnal ^ Pin Modul Audio ^ Tip Semnal ^ Descriere ^
 +| PB1 / Digital 9 | PWM (OC1A) | IN / AUDIO_IN | Analog/PWM | Semnal audio brut (iesire DAC prin PWM) |
 +| +5V | VCC | VCC / 5V | Power | Alimentare amplificator (filtrata cu condensator) |
 +| GND | GND | GND | Power | Masa comuna |
 +
 +### 4. Blocul de Butoane (Interfata Utilizator)
 +Butoanele utilizeaza rezistentele interne de pull-up ale portului D, eliminand necesitatea unor rezistente externe pe breadboard. Apasarea unui buton aduce pinul in stare '​0'​ logic.
 +^ Pin ATmega328P ^ Registru ^ Nume Buton ^ Functie in Aplicatie ^
 +| PD2 / Digital 2 | PIND2 | BUTON_SELECT | Intrare in meniuri / Confirmare selectie |
 +| PD3 / Digital 3 | PIND3 | BUTON_PLUS | Incrementare valori / Piesa urmatoare |
 +| PD4 / Digital 4 | PIND4 | BUTON_MINUS | Decrementare valori / Piesa precedenta |
 +| PD5 / Digital 5 | PIND5 | BUTON_BACK | Inapoi la ecranul principal / Reset |
 +| PD6 / Digital 6 | PIND6 | BUTON_MODE | Schimbare mod (Ceas <-> Music Player) / Stop Alarma |
 +
 +==== Lista de Componente ====
 +
 +^ Componenta ^ Descriere ^ Rol in proiect ^
 +| **ATmega328P** | Microcontroler AVR pe placuta de dezvoltare Arduino Uno | Coordoneaza toate perifericele si ruleaza algoritmul principal |
 +| **DS1307 RTC** | Real-Time Clock Module (I2C) | Pastreaza ora si data exacta chiar si cand sistemul este oprit |
 +| **LCD 16x2 + I2C** | Afisaj alfanumeric cu interfata PCF8574 | Afisarea timpului si navigarea in meniurile aplicatiei |
 +| **Modul SD Card** | Adaptor de card MicroSD cu schimbator de nivel (SPI) | Citirea fisierelor audio brute ale melodiilor si alarmei |
 +| **SC8002B Audio** | Modul amplificator audio de 2W cu difuzor integrat | Redarea melodiilor si semnalului de alarma la volum reglabil |
 +| **Condensator** | Condensator electrolitic de filtrare (100uF - 470uF) | Stabilizeaza liniile de alimentare de 5V si GND impotriva socurilor audio |
 +| **Butoane** | 5x Butoane Push-Button | Navigarea si controlul aplicatiei (interfata GPIO) |
 +| **Breadboard & Fire** | Fire de conexiune Dupont | Realizarea legaturilor electrice dintre module |
 +===== 2. Software Design =====
 +
 +Design-ul software este conceput modular, fara dependente de librarii Arduino mari (folosind programare low-level in C pur). Functionalitatea principala se bazeaza pe mecanisme de intreruperi de timere pentru redarea audio paralela cu interfata grafica.
 +
 +==== Mediu de Dezvoltare ====
 +Proiectul a fost dezvoltat folosind **PlatformIO** in Visual Studio Code, utilizand toolchain-ul `avr-gcc` si framework-ul nativ pentru microcontrolerul ATmega328P la o frecventa de clock de 16MHz.
 +
 +==== Drivere si Module Software ====
 +  * **twi.c / twi.h**: Implementarea protocolului I2C/TWI hardware pentru scrierea si citirea registrilor din RTC-ul DS1307 si trimiterea comenzilor catre ecranul LCD.
 +  * **lcd.c / lcd.h**: Driver-ul pentru ecranul LCD 16x2 configurat sa lucreze prin expandorul I2C PCF8574. Include functii de initializare,​ clear si afisare de string-uri formatate (`LCD_printAt`).
 +  * **spi.c / spi.h**: Controlul perifericului SPI hardware al ATmega328P folosit pentru comunicarea rapida cu cardul SD.
 +  * **sd.c / sd.h**: Implementare simplificata (pffs - Petit FatFs / logica custom) pentru initializarea cardului in mod SPI (`disk_initialize`),​ citirea directa a sectoarelor de date brute (`disk_readp`) si maparea fisierelor.
 +
 +==== Structura Codului si Logica de Control ====
 +
 +Codul utilizeaza o masina de stari (`AppMode`) pentru a gestiona meniurile afisate pe ecran si interactiunea cu butoanele:
 +  * ''​MODE_VIEW''​ - Modul principal in care se afiseaza data si timpul curent, impreuna cu urmatoarea alarma activa.
 +  * ''​MODE_SELECT_ALARM_ID'',​ ''​MODE_SET_ALARM_HOUR'',​ etc. - State-uri dedicate configurarii celor 3 alarme independente din sistem.
 +  * ''​MODE_MUSIC_PLAYER''​ - Modul de player audio de pe cardul SD.
 +
 +=== Streaming Audio prin PWM si Intreruperi (Timer 2) ===
 +Redarea audio se realizeaza prin tehnica PWM la o frecventa ultrasonica,​ incarcand esantioanele audio direct de pe cardul SD in fundal.
 +  * **Timer 1** este configurat in mod **Fast PWM pe 8 biti** (frecventa purtatoare de ~62.5 kHz) pe pinul PB1 (Digital 9). Registrul `OCR1A` controleaza direct factorul de umplere, actionand ca un DAC (Digital-to-Analog Converter) primitiv pentru difuzor.
 +  * **Timer 2** este configurat ca generator de timp (CTC) setat la frecventa de esantionare a fisierului audio (ex: 8-16 kHz).
 +  * In cadrul intreruperii **`ISR(TIMER2_COMPA_vect)`**,​ daca starea `is_playing` este activa, se apeleaza functia `disk_readp` pentru a extrage octet cu octet direct din sectorul curent al cardului SD, actualizand valoarea `OCR1A`.
 +
 +=== Optimizari Hardware-Software implementate ===
 +  1. **Control Agresiv si Reactiv al Butoanelor**:​ Pentru a preveni blocarea procesorului in timpul streaming-ului audio intens de pe card, bucla principala scaneaza direct pinii portului D (`PIND`). La detectarea oricarei apasari, timerul audio este oprit instant (`stop_raw_wav`),​ oferind o oprire imediata a alarmei sau melodiei.
 +  2. **Protectie Anti-Erori SPI**: In interiorul ISR-ului, daca functia `disk_readp` returneaza un cod de eroare din cauza unui contact imperfect pe breadboard, redarea se opreste automat pentru a preveni coruperea ecranului LCD sau blocarea in bucle infinite.
 +===== 3. Rezultate Obtinute =====
 +
 +Sistemul functioneaza ca un ceas desteptator complet autonom, alimentat direct de la priza (prin adaptor USB de 5V) pentru o stabilitate electrica maxima. ​
 +
 +**Functionalitati demonstrate:​**
 +  * Timpul este mentinut cu precizie de modulul RTC hardware, fiind actualizat pe ecranul LCD in timp real.
 +  * Utilizatorul poate naviga fluid prin meniuri pentru a seta data, ora curenta sau pentru a configura cele 3 alarme disponibile (Stare ON/OFF, Ora, Minut).
 +  * La potrivirea timpului curent cu o alarma activa, sistemul declanseaza automat streaming-ul fiisierului `ALARMA.wav` de pe cardul SD, ruland in loop pana la apasarea oricarui buton.
 +  * Modulul Music Player permite selectarea si redarea a 10 piese diferite inregistrate pe cardul SD (`1.wav` - `10.wav`), afisand starea curenta (`>PLAY` / `II PAUS`).
 +  * Filtrarea cu condensator pe liniile de alimentare si alimentarea de mare curent de la priza asigura o redare audio clara, fara distorsiuni sau zgomote electromagnetice parazite pe ecranul LCD.
 +===== 4. Concluzii =====
 +
 +Proiectul evidentiaza modul in care un microcontroler cu resurse limitate (2KB RAM) poate gestiona sarcini multiple in timp real (afisare I2C, streaming SPI de mare viteza, decodare audio si scanare GPIO) prin utilizarea corecta a timerelor si a intreruperilor hardware.
 +
 +Eliminarea librariilor standard Arduino in favoarea codului scris low-level in C a permis optimizarea timpilor de executie si controlul strict al registrilor interni ai ATmega328P. Implementarea filtrelor hardware (condensatori) si optimizarile software de tip de-bouncing si protectie SPI au transformat un montaj initial instabil pe breadboard intr-un dispozitiv robust si perfect functional, gata pentru utilizarea zilnica.
 ===== Download ===== ===== Download =====
  
Line 64: Line 154:
 </​note>​ </​note>​
  
-===== Bibliografie/​Resurse ​===== +===== 5. Resurse si Bibliografie =====
- +
-<​note>​ +
-Listă cu documente, datasheet-uri,​ resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. +
-</​note>​ +
- +
-<​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​+
  
 +  * Datasheet ATmega328P - Microchip/​Atmel Documentations
 +  * Petit FatFs User Application Interface - ChaN (http://​elm-chan.org/​fsw/​ff/​00index_p.html)
 +  * DS1307 Serial RTC Datasheet - Maxim Integrated
 +  * Laboratoarele de Proiectare cu Microcontrolere (GPIO, Timere, I2C, SPI), Facultatea de Automatica si Calculatoare,​ UPB.
pm/prj2026/theodor_ioan.buliga/andrei_ioan.simion.1777849007.txt.gz · Last modified: 2026/05/04 01:56 by andrei_ioan.simion
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0