Semplice schema e codice scritto in C con MikroC per realizzare una pianola a 7 tasti con un microcontrollore PIC…
INTRO
Le note musicali corrispondo a una determinata frequenza. In un piano forte vi sono molti tasti ma le note sono 7, Do, Re, Mi, Fa, Sol, La e Si, tra le diverse note uguali cambia la tonalità e quindi la frequenza. In un pianoforte il legno, la cassa armonica, i martelletti e le corde creano un suono unico, che con un microcontrollore è impossibile da creare. Il suono generato in questo caso ha stessa frequenza delle note, quindi si possono creare melodie e riprodurre suoni.
MikroC dispone di una libreria per creare suoni, si attiva indicando il pin di uscita e poi si può inserire la frequenza e la durata in una funzione e generare un suono di frequenza e durata desiderata. Proprio con questa libreria si andrà a realizzare il codice per la pianola.
CODICE
Il codice è molto semplice, si inizializzano ingressi e uscite, poi la libreria musicale e poi nel ciclo infinito si vanno a controllare i pulsanti e si riproduce il suono per 100ms. il codice è:
//Do=522Hz Re=588Hz Mi=660Hz Fa=698Hz Sol=784Hz La=880Hz Si=988Hz
void main() { //Programma principale
TRISB = 0b01111111; //Tutti ingressi tranne PB7
Sound_Init(&PORTB, 7); //Inizializza libreria
while(1){ //Ciclo infinito
if ( PORTB = 0b00000001 )Sound_Play(522,100); //Do
else if ( PORTB = 0b00000010 )Sound_Play(588,100); //Re
else if ( PORTB = 0b00000100 )Sound_Play(660,100); //Mi
else if ( PORTB = 0b00001000 )Sound_Play(698,100); //Fa
else if ( PORTB = 0b00010000 )Sound_Play(784,100); //Sol
else if ( PORTB = 0b00100000 )Sound_Play(880,100); //La
else if ( PORTB = 0b01000000 )Sound_Play(988,100); //Si
}
}
Prima di tutto si inizializzano le porte da PORTB0 a PORTB6 come ingressi e PORTB7 come uscita, dove verrà connesso l’altoparlante, e poi si inizializza la libreria musicale.
Nel codice infinito si vanno a controllare con gli if se il pulsante è premuto o no e in base al pulsante premuto si fa suonare l’altoparlante alla determinata frequenza. Le note sono in ordine e si fanno suonare per 100ms per evitare il rimbalzo del segnale generato dall’interruttore e per evitare che il tempo di controllo dei pulsanti sia paragonabile a quello di riproduzione. Con 100ms è molto minore il tempo di controllo dei pulsanti e quindi non crea problemi di suono.
SCHEMA
Lo schema è il seguente:
Il cristallo X1 è un quarzo da 8MHz e con i due condensatori da 22pF formano il circuito di oscillazione. La resistenza R4 serve per evitare che il PIC18F252 si resetti, mentre ai pin 20 si hanno 5V e ai pin 19 e 8 la massa dell’alimentazione.
Gli interruttori sono connessi a VCC e dall’altro lato all’ingresso del PIC, con delle resistenze di pull-down da 1Kohm. Per pilotare l’altoparlante si utilizza un transistor NPN con una resistenza di protezione da 1Kohm per pilotare la base. Il transistor è usato perché la corrente fornita dal PIC18F252 potrebbe essere non sufficiente. Il buzzer deve essere passizo, ovvero un altoparlante o un piezoelettrico senza circuiteria interna. Per capire se è attivo o no basta inviare un segnale continuo e se emette un suono continuo vuol dire che è attivo. Lo schema montato su breadboard è:
La configurazione dei fuses è la seguente:
È tutto disabilitato tranne il brownout reset e l’oscillatore è in configurazione HS con quarzo a 8MHz.
DOWNLOAD
È possibile scaricare la simulazione, il file .hex e il file .c al seguente LINK!!!
bello e semplice da sperimentare.
molto interessanti anche gli articoli correlati, vorrei chiedervi se è possibile acquistare i kit di montaggio
Grazie 🙂 Ho sempre pensato che i kit sono un ottima idea ma purtroppo non raggiungo una richiesta tale da giustificare l’acquisto preventivo di tutti i componenti per tutti i progetti 🙁 comunque da ebay.com si trova ormai tutto a pochissimo prezzo, l’unico problema sono i tempi di attesa
ho visto tante cose belle e vorrei potermi dilettare. ma ne