This shows you the differences between two versions of the page.
|
pm:prj2026:ciprian.popescu0411:daria.harabagiu [2026/05/18 14:42] 127.0.0.1 external edit |
pm:prj2026:ciprian.popescu0411:daria.harabagiu [2026/05/25 11:20] (current) daria.harabagiu |
||
|---|---|---|---|
| Line 13: | Line 13: | ||
| <note tip> | <note tip> | ||
| * **Stocare (SPI):** Fișierele .wav sunt stocate pe un card microSD citit prin protocolul SPI cu biblioteca SDFat. | * **Stocare (SPI):** Fișierele .wav sunt stocate pe un card microSD citit prin protocolul SPI cu biblioteca SDFat. | ||
| - | * **Redare audio (PWM + Timere):** Samplelele audio sunt trimise unui Timer în mod Fast PWM, semnalul fiind filtrat și amplificat de modulul LM386 către difuzor sau căști (jack 3.5mm). | + | * **Redare audio (PWM + Timere):** Samplelele audio sunt trimise unui Timer în mod Fast PWM pe 8 biți. Semnalul PWM de mare viteză generat pe pinul D9 este injectat direct în modulul de amplificare SC8002B, care conduce direct difuzorul sau mufa jack pentru căști (atenuată prin rețeaua de rezistențe), eliminând distorsiunile și nevoia de filtre complexe. |
| * **Control (GPIO + Întreruperi):** Trei butoane fizice pe pinii de întrerupere gestionează play/pause, next și prev. | * **Control (GPIO + Întreruperi):** Trei butoane fizice pe pinii de întrerupere gestionează play/pause, next și prev. | ||
| * **Afișare (I2C):** Display-ul OLED SSD1306 afișează numele melodiei și statusul playerului prin I2C. | * **Afișare (I2C):** Display-ul OLED SSD1306 afișează numele melodiei și statusul playerului prin I2C. | ||
| * **Volum (ADC):** Un potențiometru de 10kΩ citit prin ADC controlează volumul redării. | * **Volum (ADC):** Un potențiometru de 10kΩ citit prin ADC controlează volumul redării. | ||
| - | * **VU Meter (PWM):** 6 LED-uri (verde, galben, roșu) vizualizează nivelul sonor în timp real. | + | * **VU Meter (PWM):** 4 LED-uri (verde, galben, roșu) vizualizează nivelul sonor în timp real. |
| </note> | </note> | ||
| Line 28: | Line 28: | ||
| * **Modul MicroSD (SPI):** Stochează fișierele audio .wav. | * **Modul MicroSD (SPI):** Stochează fișierele audio .wav. | ||
| * **Display OLED 1.3" I2C:** Afișează numele melodiei curente și statusul playerului. | * **Display OLED 1.3" I2C:** Afișează numele melodiei curente și statusul playerului. | ||
| - | * **Modul amplificator LM386:** Amplifică semnalul audio PWM pentru difuzor. | + | * **Modul audio SC8002B cu difuzor integrat:** Amplifică semnalul PWM și redă sunetul prin difuzorul de 2W integrat. |
| - | * **Difuzor 40mm 3W:** Redă sunetul amplificat. | + | |
| * **Mufă jack audio 3.5mm (PJ392):** Permite conectarea căștilor. | * **Mufă jack audio 3.5mm (PJ392):** Permite conectarea căștilor. | ||
| * **Potențiometru 10kΩ:** Controlează volumul prin ADC. | * **Potențiometru 10kΩ:** Controlează volumul prin ADC. | ||
| - | * **Butoane tactile (x4):** Play/pause, next, prev + rezervă. | + | * **Butoane tactile (x3):** Play/pause, next, prev. |
| - | * **LED-uri 5mm roșu x2, galben x2, verde x2:** VU meter vizual. | + | * **LED-uri 5mm roșu x1, galben x1, verde x2:** VU meter vizual. |
| - | * **Rezistențe 220Ω (x6):** Protecție LED-uri. | + | * **Rezistente: 220Ω (x4), 2.2kΩ (x1), 1kΩ (x1):** Protectie LED-uri si atenuare casti |
| - | * **Condensatoare 10µF (x2):** Filtru audio pentru LM386. | + | |
| * **Breadboard + fire Dupont:** Pentru realizarea conexiunilor între componente. | * **Breadboard + fire Dupont:** Pentru realizarea conexiunilor între componente. | ||
| </note> | </note> | ||
| Line 48: | Line 46: | ||
| | ::: | SCK | D13 (PB5) | Clock SPI. Sincronizează transferul de date. | | | ::: | SCK | D13 (PB5) | Clock SPI. Sincronizează transferul de date. | | ||
| | ::: | CS | D10 (PB2) | Chip Select. Activează comunicarea cu modulul SD. | | | ::: | CS | D10 (PB2) | Chip Select. Activează comunicarea cu modulul SD. | | ||
| - | | LM386 + Difuzor | VCC | 5V | Alimentare amplificator audio. | | + | | Modul SC8002B + Difuzor | VCC | 5V | Alimentare modul audio. | |
| - | | ::: | GND | GND | Masă comună. | | + | | ::: | GND | GND | Masă comună a circuitului. | |
| - | | ::: | IN (+) | D9 (PB1) prin C 10µF | Pin PWM Timer1 OC1A. Generează semnalul audio prin Fast PWM. | | + | | ::: | IN (+) | D9 (PB1) | Pin Timer1 OC1A. Generează semnalul audio prin Fast PWM. | |
| - | | ::: | OUT | Difuzor | Semnal amplificat către difuzor 3W. | | + | | ::: | OUT | Difuzor | Semnal amplificat către difuzor extern de 2W. | |
| + | | Mufă Jack Căști | Left / Right | - | Canale audio căști, conectate după rezistența de 2.2kΩ. | | ||
| + | | ::: | GND | GND | Conectat la bara albastră (GND) pentru închiderea circuitului. | | ||
| | Potențiometru Slider | VCC | 5V | Alimentare potențiometru. | | | Potențiometru Slider | VCC | 5V | Alimentare potențiometru. | | ||
| | ::: | OUT (cursor) | A0 (PC0) | Intrare analogică ADC. Citește poziția sliderului pentru volum. | | | ::: | OUT (cursor) | A0 (PC0) | Intrare analogică ADC. Citește poziția sliderului pentru volum. | | ||
| Line 58: | Line 58: | ||
| | LED Verde 2 (VU) | Anod | D4 (PD4) | GPIO digital. Primul nivel al VU meter-ului. | | | LED Verde 2 (VU) | Anod | D4 (PD4) | GPIO digital. Primul nivel al VU meter-ului. | | ||
| | LED Galben (VU) | Anod | D5 (PD5) | Pin PWM. Nivel intermediar VU meter. | | | LED Galben (VU) | Anod | D5 (PD5) | Pin PWM. Nivel intermediar VU meter. | | ||
| - | | LED Roșu (VU) | Anod | D6 (PD6) | Pin PWM. Nivel maxim VU meter — intensitate redusă prin cod. | | + | | LED Roșu (VU) | Anod | D7 (PD7) | Pin PWM. Nivel maxim VU meter. | |
| | LED-uri (toți) | Catod | GND | Masă comună prin rezistență 220Ω. | | | LED-uri (toți) | Catod | GND | Masă comună prin rezistență 220Ω. | | ||
| | OLED SSD1306 | VCC | 5V | Alimentare display. | | | OLED SSD1306 | VCC | 5V | Alimentare display. | | ||
| Line 71: | Line 71: | ||
| | ::: | P2 | GND | Masă comună. | | | ::: | P2 | GND | Masă comună. | | ||
| - | {{:pm:prj2026:ciprian.popescu0411:daria.harabagiu:circuit.jpeg?600|Circuit MP3 Player}} | + | {{:pm:prj2026:ciprian.popescu0411:daria.harabagiu:circuit_final.jpeg?600|Circuit MP3 Player}} |
| ===== Software Design ===== | ===== Software Design ===== | ||
| + | Cod proiect: https://github.com/dariaharabagiu/Proiect_MP3 | ||
| - | <note tip> | + | Proiectul a fost dezvoltat in mediul **VS Code + PlatformIO**, folosind framework-ul Arduino pentru microcontrollerul ATmega328P-XMINI. |
| - | Descrierea codului aplicaţiei (firmware): | + | |
| - | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | ^ Fisier / Biblioteca ^ Rol ^ |
| - | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | | main.cpp | Contine logica principala a proiectului: initializare hardware, redare audio, butoane, display si VU meter. | |
| - | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | | SD.h | Gestioneaza citirea fisierelor .wav de pe cardul microSD prin protocolul SPI. | |
| - | * (etapa 3) surse şi funcţii implementate | + | | TMRpcm.h | Redarea fisierelor audio WAV prin Timer1 in mod Fast PWM pe pinul D9. | |
| - | </note> | + | | U8g2lib.h (U8X8) | Controlul display-ului OLED SSD1306 prin I2C, in mod fara buffer pentru a nu bloca intreruperile audio. | |
| + | | Wire.h | Activeaza magistrala I2C hardware (A4=SDA, A5=SCL) pentru comunicatia cu display-ul. | | ||
| + | | SPI.h | Protocoul SPI hardware pentru comunicatia cu modulul microSD. | | ||
| + | |||
| + | ^ Functie ^ Rol ^ | ||
| + | | setup() | Initializeaza toti pinii, cardul SD, display-ul OLED si porneste prima melodie. | | ||
| + | | loop() | Citeste butoanele cu debounce, potentiometrul ADC, actualizeaza volumul si VU meter-ul. | | ||
| + | | pornesteMelodie(index) | Opreste piesa curenta, porneste piesa de la indexul dat si actualizeaza display-ul. | | ||
| + | | afiseazaOLED() | Scrie pe display numele melodiei curente, numarul track-ului si statusul play/pause. | | ||
| + | |||
| + | ^ Laborator ^ Utilizare in proiect ^ | ||
| + | | Lab 0 - GPIO | LED-uri VU meter pe D3, D4, D5, D7 cu rezistente 220Ω; butoane PREV/PLAY/NEXT pe A1, A2, A3 cu INPUT_PULLUP intern. | | ||
| + | | Lab 3 - Timere & PWM | TMRpcm foloseste Timer1 in mod Fast PWM pe pinul D9 (OC1A) pentru generarea semnalului audio. | | ||
| + | | Lab 4 - ADC | Potentiometrul slider HW-233 citit prin analogRead() pe A0 (0-1023), mapat la volum (0-3) si numar LED-uri aprinse. | | ||
| + | | Lab 5 - SPI | Cardul microSD comunicat prin SPI hardware pe pinii D10(CS), D11(MOSI), D12(MISO), D13(SCK). | | ||
| + | | Lab 6 - I2C | Display-ul OLED SSD1306 comunicat prin I2C hardware pe A4(SDA) si A5(SCL) folosind biblioteca U8X8. | | ||
| ===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
| - | <note tip> | + | Demo: {{:pm:prj2026:ciprian.popescu0411:daria.harabagiu:demo.zip|Download demo video}} |
| - | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | |
| - | </note> | + | |
| - | ===== Concluzii ===== | + | Proiectul functioneaza complet si implementeaza urmatoarele functii: |
| - | ===== Download ===== | + | * Redarea fisierelor audio .wav stocate pe cardul microSD prin amplificatorul SC8002B |
| + | * Navigarea intre melodii prin butoanele PREV si NEXT | ||
| + | * Pauza si reluarea redarii prin butonul PLAY/PAUSE | ||
| + | * Controlul volumului in timp real prin potentiometrul slider HW-233 | ||
| + | * Vizualizarea nivelului de volum prin VU meter-ul format din 4 LED-uri (verde, galben, rosu) | ||
| + | * Afisarea numelui melodiei curente, numarul track-ului si statusul pe display-ul OLED SSD1306 | ||
| - | <note warning> | + | ===== Concluzii ===== |
| - | O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului: surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-). | + | |
| - | Fişierele se încarcă pe wiki folosind facilitatea **Add Images or other files**. Namespace-ul în care se încarcă fişierele este de tipul **:pm:prj20??:c?** sau **:pm:prj20??:c?:nume_student** (dacă este cazul). **Exemplu:** Dumitru Alin, 331CC -> **:pm:prj2009:cc:dumitru_alin**. | + | Proiectul a demonstrat cum un microcontroller simplu (ATmega328P) poate gestiona simultan mai multe periferice: stocare SPI, redare audio PWM, afisaj I2C si input utilizator GPIO/ADC. |
| - | </note> | + | |
| - | ===== Jurnal ===== | + | Principala provocare tehnica a fost compatibilitatea intre biblioteca TMRpcm (care foloseste Timer1 prin intreruperi) si biblioteca de display (care poate bloca intreruperile in timpul scrierii). Solutia a fost folosirea modului U8X8 al bibliotecii U8g2, care scrie direct pe display fara buffer, fara a dezactiva intreruperile. |
| - | + | ||
| - | <note tip> | + | |
| - | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | + | |
| - | </note> | + | |
| ===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
| - | <note> | + | **Resurse Hardware:** |
| - | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | + | * [[https://ww1.microchip.com/downloads/en/DeviceDoc/ATmega48A-PA-88A-PA-168A-PA-328-P-DS-DS40002061A.pdf|Datasheet ATmega328P]] |
| - | </note> | + | * [[https://github.com/TMRh20/TMRpcm|Biblioteca TMRpcm - GitHub]] |
| + | * [[https://github.com/olikraus/u8g2|Biblioteca U8g2 - GitHub]] | ||
| + | |||
| + | **Resurse Software:** | ||
| + | * [[https://docs.platformio.org|Documentatie PlatformIO]] | ||
| + | * [[https://www.arduino.cc/reference/en/|Arduino Reference]] | ||
| - | <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | ||