Reproducerea melodiilor cu un singur ton folosind microcontrolerele și tehnologiile avr

Formarea sunetului folosind un microcontroler nu este dificilă. Suficient să se bazeze un LED intermitent program și conectați un difuzor, iar în program pentru a schimba întârzierea constantă, astfel încât frecvența de ieșire este crescută până la banda de sunet. O persoană poate auzi sunete cu o frecvență cuprinsă între 50Hz și 15kHz. LED-uri într-una din lecțiile noastre flash-uri la 4 Hz, și dacă reduce timpul de întârziere în 1000, puteți obține 4HZ frecvența de ieșire.







Sarcina: vom dezvolta un program prin intermediul căruia microcontrolerul Atmega8 va reproduce o melodie simplă de un ton.

Reproducerea melodiilor cu un singur ton folosind microcontrolerele și tehnologiile avr

Numărul muzical este împărțit în octave, fiecare octavă este împărțită în 12 de note este de 7 de bază (Do, Re, Mi, Fa, Sol, La, Si), și încă cinci (Înainte ascuțite, D ascuțite, F ascuțite, Sol ascuțit, La ascuțite) . Frecvențele două note adiacente diferă unul de altul, în același număr de ori, iar frecvențele două ca două octave adiacente de note difera de 2 ori.







Pentru a genera sunetul, folosim cronometrul / contra1 hexazecimal, acesta va funcționa în modul CTC (resetare la coincidență), pentru a controla factorul de conversie pe care îl folosim în registrul ICR1. Modul STS vă permite să controlați direct frecvența semnalului. Pentru a activa acest mod, biții WGM13 și WGM12 sunt setați la unul.

Pentru modul, semnalul periodic de ieșire format trebuie să configureze de ieșire OC1A, astfel încât să coincidă cu fiecare semnal de ieșire își modifică valoarea din contra STS. Pentru a face acest lucru, setați bitul COM1A1 la unul și conectați difuzorul la acesta și, de asemenea, configurați portul PB1 la ieșire.

Frecvența semnalului la ieșirea lui OC1A este determinată de formula:

unde N este factorul de conversie al divizorului preliminar, în loc de OCR1A în cazul nostru ICR1.

În plus față de note, orice melodie conține pauze, acesta fiind intervalul de timp în care nu suna un sunet. Funcția Set_temp este responsabilă pentru întreruperea. pur și simplu dezactivează temporizatorul / contorul la momentul potrivit.

Mai jos este codul sursă cu o descriere detaliată, dacă ceva nu este clar, puneți întrebări. Pe una din următoarele sarcini, vom analiza modul în care puteți realiza un sintetizator de voce.







Articole similare

Trimiteți-le prietenilor: