This shows you the differences between two versions of the page.
|
pm:prj2025:rnedelcu:cosmin.croitoriu [2025/05/28 13:48] cosmin.croitoriu |
pm:prj2025:rnedelcu:cosmin.croitoriu [2025/05/28 15:56] (current) cosmin.croitoriu |
||
|---|---|---|---|
| Line 139: | Line 139: | ||
| * D3 crește intensitatea (prin întrerupere **INT1**) Întreruperea este activată pe frontul negativ HIGH to LOW. | * D3 crește intensitatea (prin întrerupere **INT1**) Întreruperea este activată pe frontul negativ HIGH to LOW. | ||
| În toate cazurile am folosit o măsură de a evita debounce-ul folosind niște variabile care rețin timestamp-ul ultimei schimbări. | În toate cazurile am folosit o măsură de a evita debounce-ul folosind niște variabile care rețin timestamp-ul ultimei schimbări. | ||
| + | |||
| + | **Conversia Analog-Digital**: Pentru prelucrarea semnalului de la chitară, am folosit convertorul analog-digital intern al Arduino-ului, configurat manual pentru a controla mai precis performanța și viteza de eșantionare. | ||
| + | Inițializarea se face în funcția setupADC() prin care se se setează referința la AVcc, se activează ADC-ul și se se setează prescaler-ul la 64. | ||
| + | <code> | ||
| + | void setupADC() { | ||
| + | // AVcc ca referinta si calanalul 0 by default | ||
| + | ADMUX = (1 << REFS0); | ||
| + | | ||
| + | // Enable la ADC su Prescaler 64 | ||
| + | ADCSRA = (1 << ADEN) | ||
| + | | (1 << ADPS2) | (1 << ADPS1); | ||
| + | } | ||
| + | </code> | ||
| + | |||
| + | Pentru citire în bucla de loop, se schimbă canalul între A0 și A1 (folosim A1 pentru fotorezistor), iar apoi se porneste conversia și se asteaptă terminarea. | ||
| + | <code> | ||
| + | uint16_t readADC(uint8_t pin) { | ||
| + | // Setam canalul, 0 sau 1. | ||
| + | ADMUX = (ADMUX & 0xF0) | (pin & 0x0F); | ||
| + | |||
| + | // Start conversie | ||
| + | ADCSRA |= (1 << ADSC); | ||
| + | |||
| + | // Se asteapta pana conversia este terminata | ||
| + | while (ADCSRA & (1 << ADSC)); | ||
| + | |||
| + | return ADC; | ||
| + | } | ||
| + | </code> | ||
| + | |||
| **Conversia Digital-Analog**: Semnalele procesate sunt trimise la DAC-ul **MCP4725**, care are implicit adresa 0x60, și care funcționează pe **protocolul I2C**. Valoarea de 10 biți este transformată într-una de 12 biți prin shiftare la stânga. | **Conversia Digital-Analog**: Semnalele procesate sunt trimise la DAC-ul **MCP4725**, care are implicit adresa 0x60, și care funcționează pe **protocolul I2C**. Valoarea de 10 biți este transformată într-una de 12 biți prin shiftare la stânga. | ||
| Line 182: | Line 212: | ||
| [[https://ocw.cs.pub.ro/courses/pm/prj2017/ddragomir/cmihalache|Proiect inspiratie]] | [[https://ocw.cs.pub.ro/courses/pm/prj2017/ddragomir/cmihalache|Proiect inspiratie]] | ||
| + | |||
| + | {{:pm:prj2025:rnedelcu:cosmin_proiect_pm.zip|Arhiva cod}} | ||
| <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> | ||