Scatola Musicale - Microcontrollore

Punto secondo: il microcontrollore.

Il microcontrollore deve occuparsi di leggere la tastiera e comandare il modulo. Siccome la tastiera ha 3 colonne e 4 righe, serviranno 7 pin di I/O per leggerla, e serviranno altri 3 pin per controllare il modulo audio (TX,RESET e BUSY). Il minimo numero di pin che ci servono è quindi 10, ragion per cui non possiamo utilizzare un pic a 8 pin (sempre stando nell’ottica dell’occupare meno spazio possibile) ma un pic a 18 pin va benissimo: ho scelto quindi il PIC16F628A, assegnando a ciascun pin il suo compito in questo modo:

PORTA:

Pin 6,7: Quarzo;
Pin 2,3,4: Uscite colonne tastiera;
Pin 1: Led per segnalazioni luminose;
Pin 0,5: Non usati

PORTB:

Pin 4,5,6,7: Ingresso riga tastiera;
Pin 3: RESET modulo audio;
Pin 2: Tx seriale;
Pin 1: Rx seriale;
Pin 0: BUSY Modulo audio

I pin 6 e 7 di portA sono obbligatoriamente impegnati per il quarzo, necessario in quanto per utilizzare la comunicazione seriale serve un clock preciso: ho provato ad utilizzare l’oscillatore interno, ed il tutto ha smesso di funzionare.

La tastiera verrà letta attraverso i pin 2,3 e 4 di portA per le colonne (il pin 4 necessita di una resistenza di pull-up sull’uscita perchè è open-drain: significa che può soltanto, se utilizzato come uscita, chiudere a massa o non chiudere) e i pin 4,5,6,7 (con rispettivi pull-down) di portB per le righe. Non mi è stato possibile utilizzare i pull-up interni di portB perchè il 16f628a non dà la possibilità di attivarli soltanto sui pin desiderati, ma soltanto di attivarli o non attivarli su tutta portB, e attivandoli avevo problemi con la comunicazione seriale.

Sul pin 1 di portA è collegato un led per segnalazioni utili soprattutto in fase di debug.

Infine, i pin 0,1,2,3 di portB si occupano del controllo del modulo audio: i pin 1 e 2 costituiscono l’interfaccia seriale mentre i pin 0 e 3 si occupano di leggere il pin BUSY e impostare il RESET del modulo audio.

Il pin 0 di portB ha una resistenza di pull-down: la ho inserita sebbene non fosse indicata nel datasheet del modulo, perchè senza il circuito non funzionava. La prima volta che ho provato questo modulo, infatti, non riuscivo a farlo andare, e si è messo a funzionare quando lo ho avviato tenendo il puntale del tester sul pin BUSY per vedere se c’erano problemi. Da lì ho capito che una resistenza di pull-down era necessaria, senza tuttavia sapere esattamente perchè. Probabilmente il microcontrollore deve, durante la fase di avvio, considerare il modulo come "occupato" finchè quest’ultimo non si è completamente avviato e ha impostato il pin BUSY secondo la sua volontà.

Ecco lo schema che riassume queste impostazioni: