Table of Contents

MiniPian

Introducere

Descriere generală

Minipianul se poate afla in una din urmatoarele stari:

1. Redare note introduse de utilizator:

2. Selectare cantec:

3. Redare cantec:

Trecerea intre tipurile de functionare se face astfel:

Hardware Design

Componente folosite pentru placuta extensie:

Nu am avut nevoie de rezistente pentru butoane, deoarece am folosit rezistentele de Pull-up integrate in microcontroller. Placutele se alimenteaza prin USB. Mai jos este schema electrica, realizata in Isis 6. Dintre componentele placutei de baza, am inclus doar microcontrollerul.

Software Design

Pentru generarea notelor, am folosit Timer1, channel A. Am setat ca mod de functionare Pulse Width Modulation, Phase & Frequency Correct, luand valoarea TOP din registrul ICR1. Folosind datele de la link-ul [3], am memorat un vector cu frecventa notelor. Pe baza acestor frecvente, am calculat in functia generateICRValues(), valorile ICR1 corespunzatoare fiecarei note.

Nota Frecventa
C4 261.63 Hz
D4 293.66 Hz
E4 329.63 Hz
F4 349.23 Hz
G4 392.00 Hz
A4 440.00 Hz
B4 493.88 Hz
C5 523.25 Hz

ICR1 = F_CPU / (fnota * 2 * prescaler), unde

Se poate opri redarea cantecelor, apasand din nou butonul de selectie. Am implementat aceasta facilitate in functia playSong(short int *song), verificand, dupa fiecare nota redata, starea butonului.

Pentru a nu schimba haotic modul de functionare in cazul in care butonul se tine apasat mai mult timp, am folosit urmatorul cod:

modified = 0;
while(!(PIND & (1<<PD6))) // cat timp este tinut apasat butonul de selectie mod functionare
{ 
    modified = 1;
}
if(modified)
{
    mode = (mode+1)%2;
}

Rezultate Obţinute

Proiectul functioneaza conform descrierii anterioare, desi uneori trebuie sa fii putin mai insistent cand vine vorba de selectarea modului de functionare.

Concluzii

Download

De aici puteti descarca programul, impreuna cu fisierul Makefile si cu schema .DSN: lecu_marina_minipian.zip

Bibliografie/Resurse