Pianola con PIC18F o PIC16F

NE555   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:

NE555   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 è:

NE555

La configurazione dei fuses è la seguente:

NE555

È 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!!!




 

1554 Visite totali 2 Visite di oggi
Pianola con PIC18F o PIC16F ultima modifica: 2016-09-24T22:47:32+00:00 da ne555

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *