This shows you the differences between two versions of the page.
pm:prj2025:fstancu:cristina.drinciu [2025/05/25 18:17] cristina.drinciu [Rezultate Obţinute si Performanta] |
pm:prj2025:fstancu:cristina.drinciu [2025/05/30 13:42] (current) cristina.drinciu [Hardware Design] |
||
---|---|---|---|
Line 103: | Line 103: | ||
{{:pm:prj2025:fstancu:poza2_amp.jpg?350 |}} {{:pm:prj2025:fstancu:poza4_amp.jpg?350|}} | {{:pm:prj2025:fstancu:poza2_amp.jpg?350 |}} {{:pm:prj2025:fstancu:poza4_amp.jpg?350|}} | ||
{{:pm:prj2025:fstancu:poza3_amp.jpg?350 |}} {{:pm:prj2025:fstancu:poza1_amp.jpg?350|}} | {{:pm:prj2025:fstancu:poza3_amp.jpg?350 |}} {{:pm:prj2025:fstancu:poza1_amp.jpg?350|}} | ||
+ | {{:pm:prj2025:fstancu:final_project1.jpeg?350|}} {{:pm:prj2025:fstancu:final_project.jpeg?350|}} | ||
Link catre poze si video demonstrativ: [[https://drive.google.com/drive/folders/1RUL_uXa5XXPFie1JvUg6ljKmbEH5EQQS | aici ]] | Link catre poze si video demonstrativ: [[https://drive.google.com/drive/folders/1RUL_uXa5XXPFie1JvUg6ljKmbEH5EQQS | aici ]] | ||
Line 143: | Line 144: | ||
=== I2C (TWI) === | === I2C (TWI) === | ||
__//Rol://__ Interfața I²C (TWI) generică, folosită pentru a comunica cu DAC-ul MCP4725 la ~400 kHz. | __//Rol://__ Interfața I²C (TWI) generică, folosită pentru a comunica cu DAC-ul MCP4725 la ~400 kHz. | ||
+ | |||
+ | {{:pm:prj2025:fstancu:amp_twcr.png?500|}} | ||
Ce face fiecare functie: | Ce face fiecare functie: | ||
Line 267: | Line 270: | ||
__//Rol://__ Preluare continuă de semnal analogic și declanșare ISR pentru procesare. | __//Rol://__ Preluare continuă de semnal analogic și declanșare ISR pentru procesare. | ||
+ | |||
+ | {{:pm:prj2025:fstancu:amp_admux.png?500|}} | ||
+ | |||
+ | {{:pm:prj2025:fstancu:amp_adcsra.png?500|}} | ||
+ | |||
+ | {{:pm:prj2025:fstancu:amp_adcsrb.png?500|}} | ||
+ | |||
Avem urmatoarele setari pentru registre: | Avem urmatoarele setari pentru registre: | ||
Line 332: | Line 342: | ||
Chiar daca am incercat sa lucrez la o frecventa destul de ridicata pentru a avea un sample rate cat mai mare, notele joase sunt redate foarte clar iar cele mai inalte sunt redate o idee mai prost, avand o frecventa destul de mare si masuratorile nu sunt atat de accurate. | Chiar daca am incercat sa lucrez la o frecventa destul de ridicata pentru a avea un sample rate cat mai mare, notele joase sunt redate foarte clar iar cele mai inalte sunt redate o idee mai prost, avand o frecventa destul de mare si masuratorile nu sunt atat de accurate. | ||
- | Optimizarile folosite pentru a obtine performante si imbunatiri care pot fi adaugate: | + | === Optimizarile folosite pentru a obtine performante si imbunatiri care pot fi adaugate === |
- | 1) Free-Running ADC | + | **1) Free-Running ADC** |
* Folosim ADC în Free-Running Mode pentru conversii continue la rata stabilită de prescaler, fără a reporni manual conversia la fiecare eşantion. | * Folosim ADC în Free-Running Mode pentru conversii continue la rata stabilită de prescaler, fără a reporni manual conversia la fiecare eşantion. | ||
Line 341: | Line 351: | ||
- | 2) Intreruperi | + | **2) Intreruperi** |
* toată logica de procesare audio (distorsiune, tremolo, delay) se execută în ISR(ADC_vect), eliminând buclele de polling | * toată logica de procesare audio (distorsiune, tremolo, delay) se execută în ISR(ADC_vect), eliminând buclele de polling | ||
Line 348: | Line 358: | ||
- | 3) Math Library | + | **3) Math Library** |
* Tremolo folosește sinf() din <math.h>, costisitor în cicluri CPU | * Tremolo folosește sinf() din <math.h>, costisitor în cicluri CPU | ||
Line 355: | Line 365: | ||
- | 4) Buffer Circular Fix-Size pentru Delay | + | **4) Buffer Circular Fix-Size pentru Delay** |
* Delay folosește un buffer circular simplu, cu indexare modulară, pentru acces și scriere în timp constant (O(1)). | * Delay folosește un buffer circular simplu, cu indexare modulară, pentru acces și scriere în timp constant (O(1)). | ||
* Dimensiunea buffer-ului (980) este un compromis între intârziere perceptibilă și consum de memorie SRAM (≈2 KB). | * Dimensiunea buffer-ului (980) este un compromis între intârziere perceptibilă și consum de memorie SRAM (≈2 KB). | ||
+ | === Frecvente ale proiectului === | ||
+ | **1) Rata de eşantionare ADC: ~10 kHz** | ||
+ | Prescaler ADC = 64 la 16 MHz → ADC clock ≈ 250 kHz → 25 cicluri pe conversie → ~10 k conversii/s, fiind suficient pentru frecventele relevante ala chitarii. | ||
- | ===== Concluzii ===== | + | **2) LFO Tremolo: 5 Hz** |
- | ===== Download ===== | + | Frecvență perceptibilă plăcută de modulare de volum. Phase increment pre-calculatează saltul de fază pe eşantion, fără recalcule de frecvență în timp real. |
- | <note warning> | + | **3) Timer Debounce: 1 kHz (1 ms tick)** |
- | 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**. | + | Asigură o rata de debounce robustă în maxim 50 ms fără pierderi de evenimente. |
- | </note> | + | |
+ | **4) I2C (TWI): ~400 kHz** | ||
+ | |||
+ | Comunicarea cu DAC la fast-mode pentru a corespunde celor 10 k eşantioane/s și overhead-ul I2C. | ||
+ | |||
+ | === Estimarea Consumului de Putere === | ||
+ | |||
+ | * Microntroller ATmega328P in mod normal (16 MHz, Vcc = 5 V): ~10–20 mA | ||
+ | | ||
+ | * DAC MCP4725: ~0.5 mA | ||
+ | | ||
+ | * LM358: fiecare canal ~0.7 mA | ||
+ | |||
+ | * LED-uri și Butoane: LED-uri aprinse (3 × 2 mA) = ~6 mA maxim | ||
+ | | ||
+ | **Total:** | ||
+ | I_total≈15mA (MCU)+1mA (DAC)+2mA (LM358)+6mA (LED)**≈24mA** | ||
+ | |||
+ | **Putere:** | ||
+ | P=V×I≈5V×24mA=**120mW** | ||
+ | |||
+ | |||
+ | ===== Concluzii ===== | ||
+ | |||
+ | Acest proiect a fost o modalitate perfecta de a aprofunda cunostiintele atat de proiectarea microprocesoarelor, a laboratoarelor de la aceasta materie, cat si mai important, cunostiintele de electronica. Constructia partii de HARDWARE a fost o provocare. In final, sunt multumita de outcome. :-D | ||
===== Jurnal ===== | ===== Jurnal ===== | ||
Line 379: | Line 414: | ||
18 Mai: Descriere detaliata pentru hardware si modificare liste de componente. | 18 Mai: Descriere detaliata pentru hardware si modificare liste de componente. | ||
+ | 25 Mai: Decriere detaliata Software + estimarea puterii consumate si optimizarile facute | ||
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
- | <note> | + | Datasheet LM358: [[https://www.onsemi.com/download/data-sheet/pdf/lm358-d.pdf | LINK]] |
- | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | + | |
- | </note> | + | Datasheet MCP4725: [[https://ww1.microchip.com/downloads/en/devicedoc/22039d.pdf | LINK]] |
+ | |||
+ | Datasheet ArduinoUno ATmega328p: [[https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf | LINK]] | ||
<html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | ||
+ | |||
+ | {{:pm:prj2025:fstancu:pm_amp.zip| Arhiva aici}} |