Iulian Corcoja, 331CA
In proiectul dat am dezvoltat si am creat un pian digital simplu cu 3 functionalitati de baza:
Scopul proiectului a fost intelegerea mai aprofundata a functionarii micro-controller-ului ATmega324pa, realizarea placutei, precum crearea PCB-ului si lipirea elementelor, metodele de programare a unui micro-controller. Am ales sa fac anume un pian din motivul ca mi s-a parut ceva mai interesant de creat fata de celelalte proiecte cu o complexitate medie. Scopul pianului este unul pur distractiv
Schema pentru structura pianului am creat-o si simulat-o in Eagle. Toata structura este impartita in 3 circuite de baza:
Diagrama schemei
Toate trei circuite interactioneaza direct cu micro-controller-ul, memoria si logica programului fiind asigurata de insusi mirco-controller. Pianul digital are trei stari posibile de functionare, acestea fiind:
Fiecare circuit are urmatoarele elemente cheie:
Design-ul hardware al pianului consta din cablajul imprimat la prima etapa si cablajul personal imprimat cu cele trei circuite. Fiecare circuit este conectat la un anumit port pe cablajul de baza.
Toate cele 8 butoane sunt legate la portul A al micro-controller-ului si la masa prin rezistenele de 100Ω.
Butoanele si cele 2 LED-uri sunt legate la portul C al micro-controller-ului si la masa prin rezistenele de 100Ω, respectiv 1kΩ. LED-urile sunt conectate la pinii PC6 si PC7, butoanele la pinii PC4 si PC5.
Difuzorul este conectat la portul D, pinul PD5 unde se creaza semnalul de tip PWM al timer-ului 1 si la masa prin condesatorul de 100μF.
Fisierele sursa
Cum functioneaza?
Pentru tratarea evenimentelor, acestea fiind apasarea unui buton de la pian sau panoul de control, inregistrarea notelor sau redarea lor (dupa ce au fost inregistrate) se asigura prin intermediul unui timer. Am utilizat timer-ul 0 format din 8 biti, care este setat cu prescaler-ul si counter-ul pentru a trimite intreruperi la fiecare 10ms.
In interiorul functiei ISR(TIMER0_comp_vect) se calculeaza niste cicli care la randul lor apeleaza functii la un interval anumit. De exemplu pentru logica pianului functia este apelata la fiecare ciclu, adica fiecare 10ms. Pentru blink-urile LED-urilor de pe panoul de control, functia este apelata la ficare al 50-lea ciclu, adica fiecare 500ms.
Pentru difuzor am folosit timer1 setat in modul PWM. Fiecare nota reprezinta o frecventa diferita a PWM-ului.
Inregistrarea si redarea melodiei
O melodie inregistrata reprezinta practic un array din 512 structuri, asta fiind lungimea maxima a unui melodii. Fiecare din aceste 512 elemente inseamna defapt o nota, fie muta, fie una normala. In structura sunt definite doua campuri:
La inregistrarea melodiei acest array este umplut cu date. Daca este atinsa lungimea maxima (512 note), pianul trece in modul NORMAL. La redare se citeste din array si se redau notele inscrise.
A fost un proiect destul de interesant si captivant Am invatat multe lucruri noi pe parcursul dezvoltarii pianului. Partea hardware a fost relativ usoara ceea ce n-as zice de partea software.
Proiectul este complet si 100% functional!