Scatola Musicale - Modulo audio LPM11162

Diamo uno sguardo più da vicino a quello che è forse il componente più importante nonchè misterioso: il modulo audio.

Non mi dilungherò su ogni singolo passo necessario per utilizzare uno di questi moduli: per chi fosse interessato, il sito che lo vende offre una serie di articoli tecnici molto esaustivi che ho trovato ottimi per conoscere il modulo in ogni sua parte a cui vi rimando per i dettagli: articoli tecnici.

Si tratta di un modulo che memorizza i file audio dal pc (formato .wav, 16 bit 11025 kHz, mono) e, una volta programmato (è riprogrammabile) può essere controllato in due modi: in modalità key-mode attraverso l’utilizzo di pulsanti, o in modalità seriale: utilizzeremo quest’ultima perchè permette di riprodurre tutti i suoni che desideriamo, permette di regolare il volume, di fermare i suoni, insomma è la modalità più versatile. Necessita solo di qualcosa che la comandi in seriale, per questo utilizzeremo un microcontrollore, il pic16f628a.

All’avvio, il modulo audio necessita di “sapere” che vogliamo utilizzare la modalità seriale: per dirglielo, gli inviamo il cosiddetto “carattere di auto-baudrate”, cioè il carattere 0x55, o ‘U’ che dir si voglia: in questo modo il modulo capirà che lo vogliamo comandare in seriale, e aggiusterà automaticamente il suo baud-rate per adattarsi a quello impostato nel microcontrollore. A questo punto il modulo è già pronto per ricevere comandi.

I pin del modulo che vanno connessi al microcontrollore sono 3: il pin RESET ci permette di dare un reset iniziale al modulo, non ho scelto di pullupparlo per avere un migliore controllo dal pic; il pin BUSY ci informa, stando a livello logico basso, che il modulo è impegnato nell’esecuzione di un comando e non può accettarne altri; infine i due pin TX e RX, i pin per la comunicazione seriale. Il pin TX lo lasciamo scollegato, perchè non serve: viene utilizzato unicamente dal modulo, dopo l’invio del carattere di auto-baudrate, per comunicare il suo numero di serie e la versione del suo firmware. A noi non interessano queste informazioni, ci limiteremo a capire, attraverso il pin BUSY, quando il modulo ha finito di inviare queste informazioni ed è pronto a ricevere comandi.

La sequenza di inizializzazione, che deve seguire alcune tempistiche specifiche (le vedrete in seguito nel commento del codice sorgente) è riassunta in questo grafico preso dal datasheet:

I comandi vengono inviati attraverso più byte: il primo byte indica che comando vogliamo inviare; i due byte successivi informano il modulo sul numero di byte che dovrà ricevere come argomento del comando.

Queste tabelle, qui riportate dal datasheet, fanno chiarezza su questo sistema di invio dei comandi

Una volta inviato un comando, il modulo porta il suo pin BUSY a livello logico basso, e lo rialza quando ha finito ed è pronto a ricevere nuovi comandi. Il microcontrollore quindi dopo ogni comando aspetta che il modulo audio riporti questo pin a livello logico alto per riprendere a lavorare.

Un cenno alla programmazione del modulo audio: è possibile prevedere la programmazione in-circuit del modulo, ma per ragioni di spazio non la ho inserita in questo progetto. Per questo vi rimando all’articolo tecnico numero 3.

Ecco invece come programmare il modulo audio su un programmatore fatto appositamente (anche per questo è previsto un esauriente articolo tecnico): è sufficiente alimentarlo a 3,3V e connetterlo alla porta seriale di un computer. Ovviamente serve un adattatore di livelli logici (dai +/- 12V della seriale pc ai 0-3,3V del modulo): il comunemente usato max232 NON va bene perchè non lavora a questa tensione troppo bassa. Occorre quindi un convertitore che lavori a tensioni più basse, come il MAX3222, oppure un modulo convertitore come il modulo LPM232, soluzione per cui ho optato perchè molto versatile.

Interponendo la necessaria conversione di livelli, bisogna collegare i pin della seriale a quelli del modulo come illustrato in questo schema:



(clicca sull'immagine per vederla più grande)

Il pin RX della seriale al pin TX del modulo, il pin TX della seriale al pin RX del modulo, il pin RTS al RESET e il CTS al BUSY.

A questo punto si avvia dal pc il programma apposito, disponibile sempre sul sito, che dovrebbe (una volta aperta la porta seriale appropriata) riconoscere il modulo e mostrarvi, nella parte bassa della finestra, la sua ID e la sua versione del firmware. Questo programma è molto intuitivo e semplice da usare, permette anche di provare i file appena programmati (se il modulo è connesso a un amplificatore) previa preparazione del file nel modo appropriato: il modulo può infatti memorizzare solo file in formato WAV 16bit monocanale, frequenza di campionamento 11025 Hz. La conversione dei file in questo formato può essere effettuata direttamente dal programma, opzione molto utile, oppure da un programma di editing audio esterno (personalmente consiglio Audacity). Anche per la preparazione dei file audio e la loro programmazione vi rimando ai rispettivi articoli tecnici (7 e 8).