This shows you the differences between two versions of the page.
pm:prj2022:amocanu:anastasia.smarandi [2022/06/02 06:14] anastasia.smarandi [Software Design] |
pm:prj2022:amocanu:anastasia.smarandi [2022/06/02 06:20] (current) anastasia.smarandi [Bibliografie/Resurse] |
||
---|---|---|---|
Line 41: | Line 41: | ||
Pentru a calcula frecvența corzilor chitării, am folosit o întrerupere ADC: de fiecare dată când portul A0 al plăcuței Arduino primește o nouă valoare analog, se produce o întrerupere după algoritmul descris aici: https://www.instructables.com/Arduino-Frequency-Detection/. | Pentru a calcula frecvența corzilor chitării, am folosit o întrerupere ADC: de fiecare dată când portul A0 al plăcuței Arduino primește o nouă valoare analog, se produce o întrerupere după algoritmul descris aici: https://www.instructables.com/Arduino-Frequency-Detection/. | ||
- | Astfel, în rutina de întrerupere ADC, am ales o tensiune în limitele semnalului meu (2.5 V). Am contorizat evenimentele de prag în care unda a traversat acest nivel cu o pantă ascendentă. Dacă acest lucru s-a întâmplat de mai multe ori într-un ciclu, am ales ca evenimentul de prag cu cea mai mare pantă să fie începutul ciclului. Am folosit o variabilă numită „time” (incrementată la o rată de 38,5 kHz) pentru a măsura timpul dintre evenimentele de prag și am stocat valorile acesteia într-un array numit timer[]. De asemenea, am înregistrat panta la fiecare dintre evenimentele de prag într-un array numit slope[]. Apoi am comparat elementele timer[] și slope[] pentru a afla unde a fost o potrivire. Odată ce a fost găsită o potrivire, am adunat elementele timer[] pentru a determina durata ciclului și am trimis această valoare la o variabilă globală numită „period”. În funcția principală loop() folosesc valoarea perioadei pentru a calcula frecvența. | + | Astfel, în rutina de întrerupere ADC, am ales o tensiune în limitele semnalului meu (2.5 V). Am contorizat evenimentele de prag în care unda a traversat acest nivel cu o pantă ascendentă. Dacă acest lucru s-a întâmplat de mai multe ori într-un ciclu, am ales ca evenimentul de prag cu cea mai mare pantă să fie începutul ciclului. Am folosit o variabilă numită „time” (incrementată la o rată de 38,5 kHz) pentru a măsura timpul dintre evenimentele de prag și am stocat valorile acesteia într-un array numit timer[]. De asemenea, am înregistrat panta la fiecare dintre evenimentele de prag într-un array numit slope[]. Apoi am comparat elementele timer[] și slope[] pentru a afla unde a fost o potrivire. Odată ce a fost găsită o potrivire, am adunat elementele timer[] pentru a determina durata ciclului și am stocat această valoare într-o variabilă globală numită „period”. În funcția principală loop() folosesc valoarea perioadei pentru a calcula frecvența. |
- | Această valoare este comparată apoi cu valorile de referință ale corzilor (în funcție de modul de acordare) pentru a determina ce coardă a fost atinsă și care este diferența de frecvență. | + | Frecvența obținută este comparată apoi cu valorile de referință ale corzilor (în funcție de modul de acordare) pentru a determina ce coardă a fost atinsă și care este diferența de frecvență. |
Printr-o altă întrerupere declanșată de apăsarea unui buton, stabilesc modul de acordare: Standard sau Drop D. Valorile frecvențelor pentru Standard Tuning sunt: | Printr-o altă întrerupere declanșată de apăsarea unui buton, stabilesc modul de acordare: Standard sau Drop D. Valorile frecvențelor pentru Standard Tuning sunt: | ||
Line 86: | Line 86: | ||
* https://stanford.edu/~mmhou/Guitar_tuner_instructable.pdf | * https://stanford.edu/~mmhou/Guitar_tuner_instructable.pdf | ||
* https://www.ti.com/lit/ds/symlink/tl082-n.pdf?ts=1653306138055&ref_url=https%253A%252F%252Fwww.google.com%252F | * https://www.ti.com/lit/ds/symlink/tl082-n.pdf?ts=1653306138055&ref_url=https%253A%252F%252Fwww.google.com%252F | ||
+ | * https://docs.arduino.cc/learn/electronics/lcd-displays | ||
+ | * https://riptutorial.com/arduino/example/9856/interrupt-on-button-press | ||
+ | * https://www.renesas.com/us/en/support/engineer-school/mcu-programming-peripherals-04-interrupts | ||
<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> |