Sintetizator audio pe atmega48

Pace tuturor, tovarăși! Mă plictisesc din nou. Cine ma pierdut acolo. Bucură-te, prieteni, căci acum sunt aici și vreau să ofer atenția publică noii meșteșuguri, produsă de inspirație și plictiseală - un sintetizator pe ATmega48.







Totul a început cu faptul că eram în mare măsură inspirat de "micul fug" al lui Bach. Apoi a venit weekend-ul, care, după cum se știe deja, mă prinde peste plictiseală mai mult decât toate celelalte zile ale săptămânii, împingând astfel la fabricarea unei varietăți de dispozitive. Și acum m-am decis din nimic de făcut pe un mic sintetizator, jucând o fugă mică. Deci, până la punct!

La început, am decis să se determine intervalul viitorului instrument, care a cerut mama mea (am avea muzician), care octavă sunt cele mai frecvente în majoritatea melodii. Sa dovedit că cei trei sunt mici, primul și al doilea. Desigur, cel mai mult m-am interesat de caracteristicile cantitative ale notelor, adică de frecvențele. Din fericire, pagina cu toate cele necesare a fost găsită foarte repede. Sa constatat că cea mai mare nota de așteptat - Si a doua octavă - are o frecvență de numai 988 Hz (aproximativ), astfel încât întreaga scală poate fi genera cu succes PWM CAD (Da, acest lucru nu este un dreptunghi, ca și în cele mai multe dintre aceste structuri, arbitrare probă). Din aceste considerente, apare următoarea diagramă:

Canalul PWM hardware-ul este conectat la un filtru simplu - o integrare RC-lanț, având o frecvență de tăiere de aproximativ cincisprezece kilohertzi (de fapt, a pus ceea ce a fost la îndemână - care este stânga). Mai mult în valoare clasic push-pull repeaterului, legănându-difuzor pyatidesyatiomny (el, de asemenea, pune în tomberoanele din cele mai vechi timpuri). C4 elimină componenta constantă, astfel încât să nu fumeze din greșeală. LED-ul a fost blocat pentru scopurile de depanare, așa că este lăsat - acum marchează citirea notei următoare.

Acum, puteți începe să generați direct sunete. Așa cum am menționat deja, am ales sinteza WT - adică se utilizează o serie de eșantioane care specifică forma semnalului. În principiu, planurile de a obține un eșantion de organe și de a le utiliza, dar în stadiul de depanare am cusut un sinus normal.

Un eșantion, o mulțime de muzică. Cum schimb terenul? Există două metode clasice - eșantionarea parțială dintr-o matrice cu o frecvență de eșantionare neschimbată și schimbarea frecvenței de eșantionare într-o eșantionare secvențială. În imagini:

Alegem fiecare al doilea punct pentru a mări frecvența de două ori:

Vom crește rata de eșantionare la jumătate pentru a dubla frecvența:







Evident, este mai ușor să schimbați frecvența cu un număr întreg de ori prin prima metodă. Dar raportul de note în octava nu este un întreg. Și pentru a forma o gamă nu este altceva de făcut decât să aplicăm al doilea - frecvența de eșantionare este setată de cronometru și poate fi schimbată mult mai liber. Dar pentru tranziția între octave este destul de logic să aplicăm doar o probă parțială din matrice - la urma urmei, frecvențele notelor din octavele vecine diferă de două ori. Astfel, pentru a reda o notă dată, aveți nevoie de următoarele informații:

1. Creșteți contorul matricei. Selectăm fiecare element - obținem o notă a octavei originale, alegem fiecare a doua - obținem aceeași notă cu o octavă mai mare, fiecare a patra este de două octave mai mare și așa mai departe.
2. De fapt, numărul notei. Am setat o matrice în memorie unde numerele notei înregistrează valorile de întârziere pentru cronometrul care controlează ieșirea valorilor din DAC.
3. Întârziere înainte de procesarea următoarei note.

Se poate observa că eșantionul ar trebui luat pentru cea mai mică octavă planificată, deoarece este cea mai ușoară creștere a frecvenței sale. Pentru a o reduce cu o octavă, este necesară o interpolare, iar acest lucru nu este atât de simplu.

În aceeași octavă, trebuie să vă concentrați pe nota cea mai înaltă și de aceea. Frecvența PWM este de aproximativ 32KHz. De unde urmează, ce să faci frecvența de eșantionare peste 16 KHz, în general, este lipsită de sens. Dar schimbarea frecvenței de eșantionare este folosită pentru a comuta între notele din octava, cu cea mai mare frecvență care corespunde celei mai înalte note. Acesta este factorul limitator. Ie O probă exemplară trebuie să fie formată pentru o mică octavă. Calculul arată că pentru frecvența maximă de eșantionare în regiunea de 16 kHz ar trebui să conțină 64 de puncte.

Total am folosit trei cronometre: opt-T / C0 este utilizat ca un generator PWM, T / C2 opereaza aceasta (perioada sa este frecvența de eșantionare) și shestnadtsatibitny T / C1 este angajat partiturilor citirea și configurarea primul dintre cele două cronometre și în sine (seturi de matrice increment probă corespunzătoare octavei, perioada dorită pentru T / C2 și pentru tine). Firmware-ul este scris în C în AVR-Studio + WinAVR (AVR-GCC).

Toate în colecție (nu au dezvoltat sigiliul):

Sintetizator audio pe atmega48

Octave Eu folosesc doar trei, iar notele în fiecare dintre ele (numărătoare de obiecte ascuțite și plane) sunt doisprezece. Ie Pentru numerotarea ambelor, puteți să vă potriviți în patru biți, ceea ce face posibilă organizarea unei comprimări primitive prin împachetarea în întregime într-un octet. Dar, pe durata notei, am dat doi octeți cinstiți. astfel melodia are forma unei matrice, împărțită în blocuri de trei octeți - în tetrad mai vechi, incrementul corespunzător octavei, până la cel mai mic număr al notei. Următorii doi octeți sunt durata în căpușe. Marcatorul final este de trei zerouri.

Dar este clar că brațele traduce melodie în formatul de mai sus este destul de dificil, asa ca am scris un interpretor simplu care generează o serie de înregistrare simplificată de muzică latină sishny (aplicație consolă în Code Blocks + MinGW). De exemplu, începutul unei mici fuguri arată așa (mama mea ma ajutat și eu):

Ie <октава><нота>[ascuțit / plat]<длительность (знаменатель)>[punct (creșterea duratei cu o dată și jumătate)]

Codurile sursă / binarele firmware-ului și convertorului se află în atașament.

În general, pentru astăzi totul. Îți exprim recunoștința față de mama mea pentru ajutorul ei în materie de muzică.







Articole similare

Trimiteți-le prietenilor: