Sasa Sbarra homepage
MusicBox - Riproduttore di file audio a comando e di colonna sonora continua
Hw Rev.C - Fw Rev.1 - Data: 15/2/2014

Scarica la documentazione completa del progetto

Caratteristiche tecniche Schema elettrico Consigli utili
Modalità di funzionamento Firmware cpu Esempi di collegamento
Moduli audio Realizzazione pratica Fotografie realizzazione
Stati di funzionamento con moduli audio Collaudo Download

1 - Introduzione
Il progetto presentato in questo documento è un riproduttore di file musicali comandato da 30 ingressi ed un generatore di colonna sonora continua.
Può essere utilizzato, in abbinamento ad un timer o ad un generatore di uscite programmabili (ad esempio il progetto Presepe6), per generare i suoni di un presepe o di una scenografia, oppure per riprodurre a comando il suono di campane, brani musicali, eccetera.
Utilizza 2 moduli preassemblati VS1000mod oppure una scheda esterna MDFLY AU5018.
Senza moduli audio, il circuito può essere utilizzato per interfacciare ingressi di varia natura ad un pc mediante una porta seriale di tipo talk-only.

scheda MusicBox mainboard
scheda MusicBox espansione

2 – Caratteristiche tecniche

3 – Modalità di funzionamento
Il circuito può essere utilizzato in 2 modalità:

Nelle due immagini successive sono illustrate le due modalità di funzionamento del circuito:

riproduttore audio a comando
lettore di ingressi con uscita su seriale

4 – Moduli audio
4.1 – Modulo VS1000mod
Il modulo utilizzato è prodotto dalla finlandese VLSI e utilizza il circuito integrato VS1000, al cui interno è presente un riproduttore di file OGG, un codec audio senza licenza (i classici file mp3 possono essere facilmente convertiti in questo formato).
Ha la possibilità di interfacciarsi direttamente con memorie esterne di tipo Eeprom o SD, dispone di una porta USB, di una porta seriale a 115200bps (utilizzata nel nostro caso per impartire i vari comandi) e di varie linee di I/O fra cui un’uscita audio stereofonica.
Sul modulo, che ha la stessa grandezza di un circuito integrato DIP a 32 pin, è presente, oltre all’integrato VS1000, una memoria Eeprom da 2Mbyte, lo zoccolo per una eventuale memoria SD e tutti i componenti passivi per farlo funzionare.
Utilizzando applicazioni forniti dalla casa madre, è possibile anche personalizzare il firmware del modulo secondo le proprie esigenze; in questo progetto è stato utilizzato il firmware di default versione 0.60.

modulo audio VS1000

Il firware di default prevede che i file audio in formato OGG siano sulla memoria Eeprom sul modulo oppure sulla memoria microSD esterna; i comandi vengono inviati mediante la porta seriale.
Quando il modulo viene alimentato, vengono inviate sulla porta seriale una serie di informazioni riguardanti il tipo, la dimensione della memoria ed il numero di file OGG trovati in root che sono validi per la riproduzione. Il firmware non gestisce le directory e file con nomi maggiori di 8 caratteri.
Se è presente la memoria microSD esterna, viene analizzato il suo contenuto, altrimenti si analizza il contenuto della memoria Eeprom presente sul modulo. Nella memoria Eeprom sono pre-registati 5 file audio di test che contengono il numero della traccia e sono nominati MODULE1-5.OGG.
Il player parte nella modalità ‘continua’, riproducendo continuamente tutti i file trovati sulla memoria, proprio come un riproduttore a nastro di tipo auto-reverse. Sulla seriale vengono inviati informazioni all’inizio e alla fine della riproduzione di ogni file. Tutte le informazioni sono delimitate dal carattere Lf (Ascii 10).

Dati ricevuti dalla porta seriale

Descrizione

SD Lf

Solo se rilevata memoria SD esterna

fat 0x00 0x00 0x0F 0xC0 Lf

Dimensione memoria

files 0x00 0x05 Lf

Numero di file OGG validi

play 0x00 0x00 MODULE1 OGG Lf

Inizio riproduzione primo file MODULE1.OGG

Done

Fine riproduzione

….

 

play 0x00 0x00 MODULE5 OGG Lf

Inizio riproduzione quinto file MODULE5.OGG

Done

Fine riproduzione

play 0x00 0x00 MODULE1 OGG Lf

Inizio riproduzione primo file MODULE1.OGG

Done

Fine riproduzione

….

 

Per avere il controllo del file da riprodurre mediante la porta seriale, è necessario entrare nella modalità ‘file’: si entra in questa modalità inviando al modulo il carattere f (modalità file) seguito dal carattere C (stop riproduzione).
A questo punto il modulo è pronto per accettare i comandi per la riproduzione del singolo file. Nella tabella seguente verranno analizzati i comandi che sono stati utilizzati nel progetto.
La conferma della corretta esecuzione dei comandi viene rilevata dalle stringhe di testo ricevute dalla porta seriale.

Descrizione comando

Comandi trasmessi al modulo

Dati ricevuti dal modulo

Rilevata memoria SD

 

SD (solo all’avvio)

Play file in formato OGG

PnomefileOGG Lf

- play (all’apertura di un file trovato sulla memoria)

- done (alla chiusura del file)

In caso di file non validi, play + done verranno restituiti in sequenza e non verrà riprodotto niente

Se il file specificato non è presente sulla memoria non verrà ricevuto niente

Stop riproduzione

C

done (al termine della riproduzione)

Rimozione memoria SD

 

!SD (quando l’utente estrae la memoria)

Per maggiori informazioni sul modulo si rimanda al relativo datasheet.

4.2 – Scheda MDFLY AU5018
Questa scheda è un riproduttore di file mp3 residenti su memoria SD che utilizza una cpu Atmel ed un decoder mp3 di tipo VS1011.
Può gestire fino a 99 file situati nella root della SD e nominati da 01.mp3 a 99.mp3.
I primi 8 file possono essere riprodotti direttamente premendo gli appositi pulsanti; invece per gestire tutti i 99 file è necessario utilizzare l’interfaccia seriale a 9600bps che accetta comandi a singolo byte.
Analogamente al modulo sopradescritto, per il progetto sono stati utilizzati solo un sottoinsieme di comandi.

Descrizione comando

Comandi trasmessi al modulo

Dati ricevuti dal modulo

Richiesta numero di file mp3 sulla memoria SD

0xA2

0x00: nessun file mp3 trovato

0x01…0x99: trovati file mp3 sulla memoria SD

Play

0x01: file 01.mp3

0x10: file 10.mp3

0x99: file 99.mp3

- 0x01…0x99: all’apertura di un file trovato sulla memoria

- 0xFF: alla chiusura del file

In caso di file non validi, i caratteri di apertura e chiusura file verranno restituiti in sequenza e non verrà riprodotto niente

Se il file specificato non è presente sulla memoria non verrà ricevuto niente

Stop riproduzione

0xEF

0xEF: al termine della riproduzione

Anche in questo caso per maggiori informazioni sulla scheda si rimanda al relativo manuale.

scheda audio MDFLY AU5018

5 – Stati di funzionamento con moduli audio
La routine della cpu gestisce il modulo audio mediante comandi inviati su una seriale: per inviare comandi correttamente, la cpu deve conoscere in ogni momento lo stato di funzionamento del modulo.
Sono stati definiti 6 stati di funzionamento:

  1. Init: Inizializzazione del modulo all’avvio.
    Viene controllata la presenza del modulo e se sono presenti file audio validi sulla relativa memoria SD.
    Per il modulo VS1000 devono essere ricevute in sequenza la stringa SD (rilevata memoria SD) e play (riproduzione primo file in modalità continua); a questo punto devono essere inviati i caratteri fC (modalità file e stop riproduzione) ed attendere la stringa done. La non ricezione di questa sequenza genera errore.
    Per la scheda MDFLY si richiede il numero di file presenti sulla memoria SD per tre volte, mediante il comando 0xA2. Viene generato errore se è pari a zero o non è pervenuta nessuna risposta dalla scheda.
    Se l’inizializzazione va a buon fine, il modulo è pronto per accettare comandi per la riproduzione di file audio.
  2. Ready: modulo pronto per accettare un comando
    Il comando, generato a valle di un fronte positivo rilevato sugli ingressi o di una pressione del pulsante Play/Next, ha formati differenti in funzione del modulo scelto. Per VS1000 è P01______OGGLf, mentre per MDFLY è un corrispondente al carattere esadecimale della traccia. Se si preme il pulsante Play/Next viene attivata una modalità che riproduce continuamente tutti i file in sequenza finchè non viene premuto Stop o viene rilevato un fronte positivo sugli ingressi.
    Dopo aver inviato il comando Play si entra nello stato successivo.
  3. Wait_Rx_Play: attesa per conferma Play riproduzione file
    Se il file è presente sulla memoria SD, alla sua apertura viene inviata: la stringa play per il modulo VS1000 oppure l’eco del carattere trasmesso per la scheda MDFLY. A valle di questa conferma, che setta un apposito Flag, si entra nello stato successivo.
  4. Play: riproduzione file in corso
    Deve essere controllato se il modulo invia una segnalazione di fine file (stringa done per VS1000 oppure carattere 0xFF per MDFLY) per ritornare nuovamente nello stato Ready mediante lo stato Wait_Rx_Stop descritto di seguito.
    Devono essere controllati anche i due pulsanti utente e gli ingressi: se premuto Stop (arresto riproduzione) o Play/Next (file successivo) oppure viene rilevato un fronte positivo, deve essere inviato al modulo un comando di Stop (carattere C per VS1000 o 0xEF per MDFLY): a valle di questo comando si entra nello stato successivo.
  5. Wait_Rx_Stop: attesa per conferma Stop riproduzione
    E’ utilizzato per attendere conferma dal modulo che la riproduzione del file è stata effettivamente interrotta. Se la riproduzione è stata attivata da utente premendo il pulsante Play/Next, verrà incrementato un contatore per avviare la riproduzione del file successivo, dopo che si è entrati nello stato Ready di partenza.
  6. Error: errore modulo
    Si entra in questo stato se l’inizializzazione del modulo non è andata a buon fine oppure se è stata rimossa la memoria SD dal modulo. Per uscire da questo stato è necessario spegnere e riaccendere il circuito.
L’immagine mostra i vari stati di funzionamento:

stati di funzionamento

La seguente tabella mostra i comandi possibili e le indicazioni sul display in ogni stato di funzionamento

Stato

Descrizione

Comandi possibili

Segnalazione Display

Segnalazione Led HBeat

0

Init

Nessuno

Spento

50% ON + 50% OFF

1

Ready

Play

‘--‘ fisso

10% ON + 90% OFF

2

Wait_Rx_Play

Play

Numero file lampeggiante

50% ON + 50% OFF

3

Play

Stop

Numero file fisso

90% ON + 10% OFF

4

Wait_Rx_Stop

Nessuno

‘--‘ lampeggiante

50% ON + 50% OFF

5

Error

Nessuno

‘Er’ fisso

OFF

La seguente tabella mette in correlazione lo stato precedente e l’azione che viene intrapresa:

Stato precedente

Evento

Azione

Note

Ready

Wait_Rx_Play

Play

Wait_Rx_Stop

Rilevato ingresso positivo su ingressi 1..30

Play singolo file 01..30

Disattiva modalità Autoplay

Ready

Wait_Rx_Play

Premuto pulsante Play/Next

Play file 01 e successivi

Attiva modalità Autoplay

Play

Premuto pulsante Play/Next

Play file successivo

Attiva modalità Autoplay

Play

Premuto pulsante Stop

Stop riproduzione

Disattiva modalità Autoplay

6 – Schema elettrico
Il circuito è composto da:

schema elettrico matrice ingressi

La figura mostra lo schema a blocchi del circuito. I blocchi con il bordo tratteggiato sono opzionali oppure da montare in alternativa ad altri.

scheda elettrico a blocchi

7 – Firmware cpu
Il programma contenuto nella cpu, scritto in MPASM, provvede a gestire le varie funzoni richieste:

Il firmware utilizza due routine di interrupt:
All’inizio del programma principale, dopo aver inizializzato i vari I/O, viene controllato lo stato dei jumper e dei pulsanti per definire la modalità di funzionamento o di test del circuito. Vengono controllati in sequenza:
In quest’ultima modalità, dopo aver inizializzato il modulo audio, si provvede ciclicamente a:
Tutto ciò viene svolto da una routine eseguita ogni 100ms che prevede i 5 stati di funzionamento analizzati in precedenza (init, ready, wait_rx_play, play, wait_rx_stop, error).
Di seguito viene mostrato il flow-chart del programma principale.

flow-chart firmware

8 – Realizzazione pratica
Il progetto è stato sviluppato su tre circuiti stampati monofaccia che possono essere realizzati con la fotoincisione:

Ciascuno dei 30 ingressi, elettricamente separato dal circuito e da tutti gli altri ingressi, può accettare tensioni alternate o continue: per stabilire la tensione massima applicata è sufficiente modificare il valore di una sola resistenza per stadio affinchè nel led del fotoaccoppiatore scorra una corrente da 2 a 10mA massimi. A tale scopo il valore di queste resistenze è stato impostato di 2.2k 1/4W per tensioni da 12 a 24V e di 100k 1/2W per 220V.

Conviene montare i due moduli su zoccolo in modo che possono essere rimossi facilmente senza danneggiarli.
Il modulo MOD1 è quello utilizzato per la riproduzione dei suoni comandati dagli ingressi. Se si utilizza solo questo modulo è possibile non montare i due potenziometri per la regolazione del volume (R48, R54) e le 4 resistenze per la miscelazione (R42, R49, R53, R55). Sarà necessario collegare direttamente le uscite L_OUT1 e R_OUT1 (pin 26 e 27) direttamente alla presa jack di uscita mediante 4 ponticelli al posto di R48/1, R48/2, R42, R49. E’ possibile ottenere anche un segnale mono cortocircuitando i segnali L_OUT1 e R_OUT1 direttamente sui pin 26 e 27 del modulo e ponticellando solo la resistenza R42.
Il modulo MOD2 deve essere montato solo se si desidera riprodurre una colonna sonora continua, sovrapposta ai vari suoni ‘comandati’ dagli ingressi. In questo caso sarà necessario montare i due potenziometri (R48, R54) e le 4 resistenze (R42, R49, R53, R55) per miscelare e regolare indipendentemente il segnale audio proveniente dai due moduli. Anche in questo caso, se è sufficiente un segnale mono, è possibile cortocircuitare i segnali in uscita dai due moduli (pin 26 e 27), utilizzare due timmer da 10k al posto di R48 e R54 e montare solo R42 e R53 per far giungere il segnale audio solo al pin più interno della presa jack.

Se non si desidera lo stadio display, è possibile non montare sulla scheda madre i seguenti componenti: shift-register IC4, resistenze R32, R33, R34, R35, R36, R37, R38, R39, R40, R41, i transistor Q1, Q2 ed il connettore SV3.

Per collegare la scheda esterna MDFLY è necessario costruire un cavetto di collegamento per fornirle alimentazione e connetterla alla porta seriale della cpu. Il cavo partirà dallo zoccolo a 32 pin del modulo MOD1 situato sulla scheda madre e giungerà al connettore a 4 pin in basso a sinistra della scheda. Prestare attenzione all’inserimento di quest’ultimo connettore per evitare di invertire la tensione di alimentazione e danneggiare la scheda MDFLY: il pin in alto è GND, quello in basso 5V.
Conviene prelevare il segnale audio direttamente dal connettore a 3 pin situato in alto sulla scheda audio esterna e rispettando la piedinatura indicata.

collegamento a scheda audio MDFLY AU5018

Se il circuito viene utilizzato come Lettore di ingressi con uscita su porta seriale, deve essere montato tutto lo stadio trasmittente RS232, composto dal transistor Q3 e componenti associati, che è situato al di sotto del modulo MOD2. Per collegare questo stadio all’uscita TX_CPU è necessario ponticellare mediante un corto spezzone di filo i terminali JC1 e JC2. In questo caso entrambi i moduli audio non andranno montati. L’uscita dati talk-only sarà disponibile sulla morsettiera X32 che andrà connessa ad un pc mediante un connettore DB9F. L’immagine seguente mostra il collegamento elettrico.

collegamento porta seriale connettore DB9

Il connettore SV4 della scheda display opzionale va inserito nello zoccolo SV3 della scheda madre: in questo modo le due cifre del display vengono a trovarsi fra i pulsanti utente e il primo modulo audio.
La scheda di espansione può essere montata sovrapposta alla scheda madre oppure affiancata ad essa. Per collegarle elettricamente è necessario che il connettore SV2 della scheda espansione sia connesso allo zoccolo SV1 della scheda madre mediante pin saldati sul lato rame della scheda espansione (nel caso del montaggio in sovrapposizione) oppure da una piattina multipolare munita di connettori maschio/femmina volanti (nel caso del montaggio affiancato).

9 – Collaudo
Per effettuare il collaudo è necessario seguire la seguente procedura:

10 – Consigli utili
Conviene racchiudere il circuito all’interno di un mobiletto plastico delle dimensioni appropriate, ad esempio una cassetta di derivazione per impianti elettrici.
La scheda di espansione può essere collocata accanto alla scheda madre oppure sovrapposta ad essa: in quest’ultimo caso dovranno essere utilizzati degli appositi distanziatori plastici e il connettore SV2 dovrà essere montato dal lato rame del circuito stampato di espansione.
L’alimentatore/trasformatore 9-12V può essere situato all’interno o all’esterno del mobiletto.
Sulla parte anteriore del mobiletto verranno praticati, dove necessario, i fori per i due pulsanti Play/Next e Stop, il display a due cifre, le fessure per l’inserimento delle due memorie microSD e, nel caso che il circuito è utilizzato come Lettore di ingressi, il connettore DB9 della porta seriale; sulla parte posteriore i fori per far entrare il cavo di alimentazione (diretto o tramite connettore) e i vari cavi di comando degli ingressi. Per questi ultimi è possibile entrare direttamente con un cavo oppure utilizzare un connettore multipolare.
Se gli ingressi sono a 220V si consiglia di entrare direttamente con cavi bipolari da 0.5 mm completi di spina due poli 10A che verranno inserite nelle prese di uscita della centralina di comando.
Se gli ingressi sono alimentati dallo stesso alimentatore a bassissima tensione (12-24V), è possibile anche collegare insieme i vari negativi sulle morsettiere X1..X30 ed utilizzare un connettore multipolare, ad esempio un DB9/15/25/37.
Considerare che la corrente entrante nei vari ingressi del circuito non supera i 10mA: è utilizzata unicamente per alimentare il led del fotoaccoppiatore. Se si entra con una tensione alternata non è necessario rispettare alcuna polarità; se invece si entra con una tensione continua, è necessario rispettare la polarità.

L’immagine mostra un esempio di connessione ingressi: 220Vac, 12/24Vac/cc e 12/24Vcc con negativo comune.
All’interno delle resistenze è indicato il valore da utilizzare in funzione della tensione di ingresso.

ingressi scheda musicbox

Infine si ricorda brevemente che:

diagramma temporale riproduzione file audio

schema relè invertitore

11 – Esempi di collegamento
In questo primo esempio il circuito è stato connesso ad una centralina per la generazione di effetti luminosi e uscite on-off.
Gli ingressi, tutti a 220V, sono stati connessi come descritto in tabella:

Uscita centralina effetti luminosi

Fronte positivo

Ingresso

Music_Box

Suono riprodotto

Lampada Alba

All’inizio della fase Alba

1

Canto del gallo

Lampada Giorno

All’inizio della fase Giorno

2

Campane

Pompa fontana

A metà della fase Giorno

3

Venditori ambulanti

Motore pastore Fabbro

A 3/4 della fase Giorno

4

Sono incudine fabbro

Motore pastore Arrotino

All’inizio della fase Tramonto

5

Suono mola arrotino

Case zona 1

A 1/4 della fase Tramonto

6

Musicisti zampogne

Case zona 2

A metà della fase Tramonto

7

Pecore

Case zona 3

A 3/4 della fase Tramonto

8

Asino e Bue

collegamento a scheda Presepe6

In quest’ ulteriore esempio, il circuito è utilizzato come un simulatore di campane.
Sulla memoria microSD saranno presenti tanti file audio quanti sono i motivi da riprodurre. Agli ingressi saranno connessi pulsanti NA che, quando premuti, faranno partire il singolo motivo, allo stesso modo dei pulsanti Direct-play di un lettore CD: gli ingressi saranno alimentati dalla stessa tensione 12V (ac o cc) che alimenta la scheda.
Sulla scheda è possibile non montare i led (LED1..30) che indicano gli stati degli ingressi e sostituirli con un ponticello.
Il display indicherà il motivo riprodotto e il pulsante Stop potrà essere utilizzato per interrompere la riproduzione in qualsiasi momento.

esempio riproduttore campane

12 - Fotografie realizzazione
In queste foto sono visibili i particolari di realizzazione della scheda madre e il collegamento con la scheda di espansione. Alle morsettiere di ingresso sono stati collegati dei dip-switch per fornire alimentazione agli ingressi e verificare il funzionamento del circuito.

frontale scheda musicbox

ingressi scheda musicbox

scheda musicbox connessa a scheda espansione

15 - Download progetto MusicBox
Documentazione tecnica
Schemi elettrici e circuito stampato Include file di origine Eagle
Firmware per cpu e documentazione

Per contattarmi: sasa.sbarra@libero.it

Ritorna alla pagina progetti
Ritorna alla homepage