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
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.
2 – Caratteristiche tecniche
-
30 ingressi optoisolati
i primi 15 situati sulla scheda madre e gli ulteriori 15 su una scheda di espansione che può essere
montata anche al di sopra della scheda madre per risparmiare spazio.
Gli ingressi del circuito accettano tensioni continue ed alternate, impostabili da 12 a 220V
modificando il valore di una sola resistenza. Possono essere collegati in
parallelo ad utilizzatori di qualsiasi tipo (lampade, motori, led) connessi ad uscite
di tipo on-off o dissolvenza provenienti da circuiti esterni (per esempio
Presepe6). Gli ingressi a Trigger di Schmitt provvederanno a
rilevare il fronte positivo della tensione di ingresso (passaggio dal livello
basso al livello alto) in entrambi i casi.
-
Utilizzo di 2 moduli preassemblati VS1000mod
della VLSI che hanno la stessa grandezza di un
integrato a 32 pin e leggono file musicali di tipo OGG (un classico file mp3
può essere convertito) residenti su una memoria miniSD il cui zoccolo è situato sul lato corto
del modulo stesso.
Il primo modulo è utilizzato per riprodurre a comando i file musicali quando su
uno dei 30 ingressi viene rilevato un fronte positivo.
Il secondo modulo (opzionale) è utilizzato per generare una colonna sonora
continua: lo stesso effetto ottenuto utilizzando un vecchio riproduttore di audio-cassette
con funzione autoreverse.
Al posto del primo modulo VS1000 è possibile anche utilizzare una scheda mp3 di
tipo MDFLY modello AU5018 mediante piccoli adattamenti elettrici.
-
Pulsanti Play/Next e Stop
per riprodurre manualmente in sequenza le tracce
audio residenti sulla memoria microSD del primo modulo audio, quello utilizzato per le tracce
riprodotte a comando. Questi pulsanti possono essere utilizzati dall’utente per verificare che
i file copiati sulla memoria microSD siano effettivamene riprodotti dal modulo.
-
Jumper
per impostare il tipo di modulo utilizzato, la velocità della porta seriale e la
modalità di funzionamento
-
Display a due cifre
(opzionale) per visualizzare il numero della traccia riprodotta e lo stato di funzionamento del circuito.
Lo stato di funzionamento è segnalato anche dalla modalità di lampeggio del led HeartBeat.
-
2 Potenziometri
(opzionali se è stato montato un unico modulo) per regolare singolarmente il segnale audio proveniente dai due moduli.
E’possibile utilizzare sia potenziometri doppi (audio stereo) che singoli (audio mono).
-
Uscita audio jack
da cui è possibile prelevare la miscelazione del
segnale audio (stereo o mono) proveniente dai due moduli. Per ascoltare questo
segnale audio è necessario collegare questa uscita ad
una coppia di casse amplificate (tipo computer) oppure ad un amplificatore esterno.
-
Interfaccia ingressi per pc
E’ possibile di utilizzare il circuito, senza nessun
modulo audio montato, per interfacciare ingressi di varia natura ad un pc
mediante una porta seriale di tipo talk-only: verrà
trasmesso ciclicamente lo stato degli ingressi ed eventualmente il numero
dell’ingresso su cui è stato rilevato il fronte positivo. La velocità di
trasmissione può essere impostata a 9600bps o a 115200bps.
-
Alimentazione
della scheda da 9 a 12V alternati o continui. L’assorbimento massimo è di 160mA
con il display ed entrambi i moduli montati ed in fase di riproduzione.
3 – Modalità di funzionamento
Il circuito può essere utilizzato in 2 modalità:
-
Riproduttore audio a comando
(JP2 aperto) che utilizza il modulo VS1000 (JP1
aperto) o il modulo MDFLY (JP1 chiuso). JP1 determina la velocità di
comunicazione (115200 per VS1000 e 9600bps per MDFLY) e il tipo di routine utilizzate.
Nella root della memoria SD del modulo audio devono essere presenti file audio (di
tipo OGG per VS1000 e MP3 per MDFLY) nominati da 01 a 30.
Quando viene rilevato un fronte positivo su uno dei 30 ingressi, viene riprodotto il
file audio associato. Nel caso di più fronti positivi rilevati
contemporaneamente, verrà scelto l’ingresso con numero inferiore; fronti
negativi non hanno nessun effetto. Se durante la riproduzione di un file
rilevato un fronte positivo su un altro ingresso,
verrà interrotta la riproduzione in corso e avviata la riproduzione del file
associato all’ingresso su cui è stato rilevato il nuovo fronte positivo.
I due pulsanti servono per testare la riproduzione dei file
senza utilizzare gli ingressi: con il pulsante Play/Next è possibile avviare la
riproduzione in sequenza di tutti i file o saltare a quello successivo; con il
pulsante Stop si arresta la riproduzione del file. I pulsanti sono sempre
attivi, anche nel caso in cui il file riprodotto sia stato avviato da un fronte
positivo rilevato sugli ingressi.
Sul display è visualizzato il numero di traccia e lo stato di funzionamento del
circuito.
-
Lettore di ingressi con uscita su porta seriale
(JP2 chiuso). Questa modalità, senza moduli audio
montati, serve per interfacciare ingressi di varia natura ad un pc mediante una
porta seriale talk-only. Sul pc potrà essere sviluppata un’applicazione che
intraprende azioni (avvia prorammi, file audio o video, presentazioni)
secondolo stato degli ingressi esterni. Mediante JP1 può
essere selezionata la velocità di comunicazione (aperto: 115200bps, chiuso:
9600bps); la cpu leggerà periodicamente gli ingressi ed invierà sulla seriale
ogni 1,2 secondi una stringa contenente lo stato degli ingressi ed eventuali
fronti rilevati. Nel caso di più fronti positivi rilevati
contemporaneamente, verrà scelto l’ingresso con numero inferiore; fronti
negativi non hanno nessun effetto. Sul display apparirà il numero di ingresso
su cui è stato rilevato il fronte positivo; i due pulsanti non sono utilizzati.
I dati stampati periodicamente sulla seriale hanno il seguente formato:
001122334455 10110 00010 00101 11100 11000 01011 CrLf (nessun fronte positivo rilevato)
001122334455 10110 00010 00101 11100 11100 01011 23 CrLf (rilevato fronte positivo su ingresso 23)
I primi 12 caratteri indicano la progressione della lettura della matrice, segue
lo stato (0/1) dei 30 ingressi ed eventualmente il numero dell’ingresso su cui è stato rilevato il fronte. La stringa è
terminata dai caratteri CrLf (13 + 10 Ascii).
Questa modalità può essere utilizzata anche per testare la funzionalità della matrice
di ingresso.
Nelle due immagini successive sono illustrate le due modalità di funzionamento del circuito:
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.
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.
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:
-
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.
-
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.
-
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.
-
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.
-
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.
-
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:
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:
-
15 + 15 ingressi optoisolati connessi su una matrice composta da 6 colonne x 5 righe.
I primi 15 ingressi sono situati sulla scheda madre e gli ulteriori
15 su una espansione opzionale. Su ciascuno di questi ingressi, separati
elettricamente fra di loro, è possibile applicare una tensione
alternata o continua anche di tipo variabile, ad esempio prelevata da una
uscita dissolvenza di una centralina esterna. La tensione massima applicata a
ciascun ingresso (da 12 a 220V) può essere impostata modificando il valore di
una sola resistenza sul circuito di ingresso.
Le 6 colonne sono attivate una alla volta dalla cpu mediante lo shift-register; le
5 righe sono inviate ad altrettanti ingressi a trigger di Schmitt della cpu su
cui è stata connessa una rete integratrice R/C per integrare tensioni di
ingresso alternate o parzializzate (nel caso in cui
all’ingresso è stata connessa un’uscita dissolvenza).
Ogni colonna è attivata con cadenza di 200ms per consentire alle reti RC di
caricarsi o scaricarsi; ne consegue che la lettura completa degli ingressi è
aggiornata ogni 1,2 secondi. Gli ingressi trigger di Schmitt della cpu rileveranno
i fronti positivi.
Di seguito è mostrato lo schema
elettrico esplicativo della matrice 5x6 ingressi: sono visibili solo i primi 5
stadi di ingresso e lo shift-register è stato
rappresentato come un commutatore a 6 uscite.
-
Shift register a 16 bit che pilotano gli ingressi della matrice e i segmenti
del display opzionale.
Sono stati utilizzati comuni 74HC595. Sul primo shift-register, 6 uscite comandano
le colonne della matrice di ingresso (di cui 3 sulla
scheda madre e 3 sulla scheda di espansione), 2 uscite comandano, mediante due
transistor buffer, il catodo dei 2 display a 7 segmenti. Le uscite del secondo
shift-register opzionale, sono utilizzate per pilotare in parallelo gli 8
segmenti dei display.
-
Display a due cifre opzionale che visualizza la traccia riprodotta e lo stato del riproduttore
-
Modulo audio VS1000 utilizzato in modalità file e comandato, attraverso la porta seriale della cpu,
dai 30 ingressi o dai due pulsanti utente situati sulla
scheda. I file audio in formato OGG sono residenti sulla microSD situata sul modulo stesso.
Al posto di questo modulo audio è possibile sostituire la scheda MDFLY AU5018 con piccoli
adattamenti elettrici.
-
Modulo audio VS1000 utilizzato in modalità continua opzionale per la riproduzione di eventuali
colonne sonore. Anche in questo caso i file audio in
formato OGG risiedono sulla memoria microSD situata sul modulo.
-
Mix audio opzionale per l’eventuale miscelazione e regolazione indipendente
di volume dei segnali audio provenienti dai due moduli
E’ realizzato molto semplicemente con 4 resistenze e
due potenziometri singoli (in caso di segnali mono) o doppi (in caso di segnali stereo).
-
Pulsanti Play/Next e Stop, 2 jumper di configurazione e led HeartBeat
-
Stadio trasmittente RS232 opzionale per utilizzare il circuito come lettore di ingressi,
senza nessun modulo audio.
-
Cpu che gestisce tutto il circuito espletando le seguenti funzioni:
- Lettura dei 30 ingressi della matrice
- Scrittura sullo shift-register per pilotare la matrice e i display
- Gestione dei pulsanti e dei jumper utente
- Comunicazione dati verso il modulo audio utilizzato in modalità file
- Trasmissione dati dello stato degli ingressi, nel caso in cui il circuito è utilizzato come
lettore di ingressi (senza moduli audio)
-
Alimentatore stabilizzato realizzato con un comune 7805. All’ingresso del
circuito può essere applicata una tensione continua o alternata da 9 a 12V.
La figura mostra lo schema a blocchi del circuito. I blocchi con il bordo tratteggiato sono opzionali oppure
da montare in alternativa ad altri.
7 – Firmware cpu
Il programma contenuto nella cpu, scritto in MPASM, provvede a gestire le varie funzoni richieste:
- inizializzare il modulo audio, se presente
- leggere la matrice di ingresso e rilevare il fronte positivo
- pilotare in multiplex le due cifre del display
- gestire i pulsanti utente e i jumper di configurazione
- gestire la comunicazione verso il modulo audio oppure
trasmettere lo stato degli ingressi nella modalità lettore di ingressi
Il firmware utilizza due routine di interrupt:
- tmr0_int: eseguita ogni 10ms, utilizzata per pilotare la
matrice di ingresso ed il multiplex delle due cifre del display mediante l’aggiornamento
dello shift-register a 16 uscite.
- rx_int: eseguita ogni volta che è stato ricevuto un carattere dalla porta seriale.
Se selezionato il modulo VS1000, viene utilizzata per
accodare i caratteri ricevuti dal modulo audio e confrontarli con le stringhe
attese (SD, !SD, play, done) per settare altrettanti 4 flag di acknowledge.
Se selezionato la scheda MDFLY, viene utilizzata per
verificare la ricezione di determinati caratteri ed impostare 3 flag di acknowledge.
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:
-
jumper JP1: se aperto viene impostata la velocità di
comunicazione a 115200bps (modulo VS1000); se chiuso a 9600bps (scheda MDFLY)
-
se premuto il pulsante Play/Next (o chiuso il jumper
JP2) si entra nella modalità lettore di ingressi, che non utilizza moduli
audio: ogni secondo circa verranno inviati sulla porta seriale lo stato degli
ingressi ed il numero dell’eventuale ingresso su cui è stato rilevato il fronte
positivo; sul display opzionale apparirà il numero dell’ultimo ingresso su cui
è stato rilevato il fronte positivo.
-
se premuto il pulsante Stop si entra nella modalità test
display, utile per testare il funzionamento dell’hardware: sul display e sulla
porta seriale verrà stampato un numero incrementale da 00 a 99.
-
se premuti contemporaneamente i pulsanti Play/Next e Stop
si entra in una modalità test per verificare il funzionamento dei caratteri
ricevuti dalla porta seriale.
-
se non premuti i pulsanti Play/Next e Stop si entra
nella modalità riproduttore a comado di file audio, che gestisce il modulo
audio mediante porta seriale.
In quest’ultima modalità, dopo aver inizializzato il modulo audio, si provvede ciclicamente a:
- verificare lo stato degli ingressi
- verificare lo stato dei pulsanti Play/Next e Stop
- inviare comandi al modulo audio mediante la porta seriale
- verificare che il comando inviato al modulo audio sia stato
effettivamente eseguito mediante i 4 flag di acknowledge settati nella routine
di interrupt rx_int
- aggiornare il display con i numeri di file riprodotti ed il simbolo di attesa.
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.
8 – Realizzazione pratica
Il progetto è stato sviluppato su tre circuiti stampati monofaccia che possono essere realizzati con la
fotoincisione:
- Scheda madre
: su di essa si trovano gli ingressi da 1 a 15, i due moduli audio ed i
relativi potenziometri per la regolazione del volume, la cpu, gli
shift-register, i pulsanti utente, i jumper di configurazione e l’alimentatore
stabilizzato a 5V. E’ stata realizzata su una scheda Eurocard (dimensioni 160 x 100 mm)
- Espansione
: su cui si trovano gli ingressi da 16 a 30. Questa scheda opzionale è utilizzata solo se si
desidera un numero di ingressi superiore a 15. Questa scheda ha le dimensioni di 160 x 50 mm
- Display
: su cui sono collocati due display a 7 segmenti. Anche questa scheda (33 x 28 mm è opzionale nel caso
che non è necessario visualizzare lo stato del circuito, il numero della
traccia riprodotta oppure l’ingresso su cui è stato rilevato il fronte positivo.
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.
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.
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:
-
Verificare (a occhio e con il tester) che non esistano corto-circuiti o falsi contatti sul
lato rame del circuito stampato.
-
Alimentare il circuito dalla morsettiera X31 con una tensione da 9 a 12V
continui o alternati. Verificare con il tester che la tensione dei 5V sia presente tra
i pin di alimentazione dei 3 circuiti integrati e dei due moduli audio.
-
Se è stato scelto di montare il display è necessario verificare che tutti i segmenti siano
connessi correttamente allo shift-register:
- Alimentare il circuito e verificare che nessun segmento sia acceso
- Fornire 5V (prelevati dal pin 16 di IC2) al pin 7 di IC2: in questo
modo Q2 è in conduzione ed il catodo di DISPL1 è connesso a massa.
- Fornire 5V (prelevati dal pin 16 di IC4) su tutte le 8 uscite dello
shift-register IC4 (pin 15, 1, 2, 3, 4, 5, 6, 7) e verificare che gli 8 segmenti
di DISPL1 si accendono uno alla volta.
- Ripetere le stesse operazioni sopradescritte fornendo 5V al pin 6
di IC2 (Q1 in conduzione), alimentando una alla volta le uscite dello
shift-register IC4 e verificare che gli 8 segmentidi DISPL2 si accendono uno alla volta.
-
Premere il pulsante Play/Next SW1 (o chiudere il jumper JP2) e
verificare che la tensione sul pin 6 della cpu IC3 scenda da 5V a 0V
-
Premere il pulsante Stop SW2 e verificare che la tensione sul pin 10 della cpu IC3 scenda
da 5V a 0V
- Chiudere il jumper JP1 e verificare che la tensione sul pin 9 della cpu IC3 scenda da 5V a 0V
-
Cortocircuitare a massa, mediante una resistenza da 100 ohm, il pin 17 della cpu IC3 e verificare
che il LED31 si accenda
-
Se è stato montato lo stadio trasmittente RS232, ponticellare con uno spezzone di filo JC1 e JC2;
quindi collegare a massa (prelevata dal pin 5 di IC3)
il pin 8 della cpu IC3 e verificare che il LED32 si accende.
-
Verificare la continuità e l’assenza di corto-circuiti delle piste TX_CPU e RX_CPU che
collegano la cpu IC3 al modulo audio MOD1.
-
Verificare la continuità e l’assenza di corto-circuiti tra le piste SR_DATA, SR_CLOCK e SR_STROBE
che collegano la cpu IC3 ai due shift-register
-
Per testare la matrice dei 30 ingressi (di cui 15 sulla scheda madre e altri 15 sulla scheda
di espansione) conviene:
- Montare tutti i fotoaccoppiatori degli ingressi
-
Collegare 5 diodi led con in serie una resistenza da 1k ai pin della cpu
4, 3, 2, 1, 18 (segnali MIN_R1…MIN_R5), che sono le uscite (le righe) della
matrice 5x6.
-
Fornire 5V (prelevata dal pin 16 di IC2), al pin 1 dello
shift-register IC2 (segnale MIN_C1): verrà alimentata la prima colonna.
-
Alimentare, uno alla volta, il primo gruppo di 5 ingressi sulla scheda madre
(morsettiere X1…X5) e verificare che i 5 led connessi alla cpu si accendono.
Per fare le prove si consiglia di alimentare gli ingressi con 12V per evitare scosse elettriche.
-
Fornire 5V al pin 2 dello shift-register IC2 (segnale MIN_C2): verrà
almentata la seconda colonna.
-
Alimentare, uno alla volta, il secondo gruppo di 5 ingressi sulla scheda madre
(morsettiere X6…X10) e verificare che i 5 led connessi alla cpu si accendono
-
Ripetere le stesse operazioni per testare il terzo gruppo di 5 ingressi X11…X15 sulla
scheda madre fornendo 5V al pin 15 di IC2 (segnale MIN_C3)
-
Se necessario, testare anche gli ulteriori 15 ingressi (5+5+5) sulla scheda di
espansione fornendo 5V ai pin 3, 4, 5 di IC2 (segnali MIN_C4, MIN_C5, MIN_C6).
-
Inserire i due shift-register IC2 e IC4 negli zoccoli
-
Programmare IC3, un PIC16F628, con il file music_box.hex
utilizzando un apposito programmatore (ad esempio pickit2), quindi inserirlo nell’apposito zoccolo.
-
Se è stato montato lo stadio trasmittente RS232 è possibile fare un ulteriore test della
seriale collegando il circuito alla porta seriale di un pc mediante la
morsettiera X32. Il pc deve essere munito di porta seriale (nativa o tramite un
adattatore USB/COM) e di un’applicazione terminale, come Hyperterminal. La
velocità di comunicazione può essere impostata a 9600 bps con JP1 chiuso (consigliata)
oppure a 115200 bps con JP1 aperto.
-
Mantenere premuto il pulsante SW2 ed alimentare il circuito: se tutto funziona correttamente si
vedrà LED31 lampeggiare veloce e sul display appariranno in
sequenza i numeri da 00 a 99, contemporaneamente inviati sulla porta seriale.
-
Disalimentare il circuito, chiudere il jumper JP2 (o mantenere premuto
SW1); quindi ri-alimentare il circuito. In questo modo verrà attivata la
modalità Lettore di ingressi.
-
Alimentare con 12V uno alla volta i 15 (o i 30) ingressi e verificare che
sul display appare il numero dell’ingresso su cui è stata applicata tensione.
Contemporaneamente sulla porta seriale verrà stampato
lo stato logico dei 30 ingressi ed il numero dell’eventuale ingresso su cui è
stato rilevato il fronte positivo.
-
Inserire nell’apposito zoccolo del circuito stampato il modulo audio MOD1.
-
Preparare una memoria microSD utilizzando un apposito lettore connesso al pc. Nella root
della memoria microSD, formattata in FAT32, dovranno essere scritti da 1 a 30 file audio di tipo OGG,
nominati da 01.OGG a 30.OGG. Il modulo audio accetta solo
file audio in formato OGG perché senza licenza: è possibile convertire
qualsiasi file mp3 o wav utilizzando appositi
convertitori in software audio-editor oppure anche on-line.
-
Inserire la memoria microSD nell’apposito alloggiamento situato
sull’estremità del modulo MOD1.
-
Collegare alla presa audio due casse da computer amplificate oppure un amplificatore audio.
-
Rimuovere la cpu IC3 dallo zoccolo ed alimentare il circuito. Se i file
copiati sulla microSD sono nel formato corretto ed il modulo funziona, verranno
riprodotti in sequenza tutti i file, nell’ordine in cui sono stati copiati
sulla memoria (e non in ordine alfabetico!).
-
Rimontare la cpu IC3, aprire entrambi i jumper JP1 (velocità 115200 –
modulo VS1000) e JP2 (modalità riproduttore audio comandato) ed alimentare il
circuito.
-
All’avvio, il modulo audio invia alla cpu 2 stringhe di testo: SD (presenza memoria SD) e play
(ingresso in modalità default continuous play). A questo punto la cpu invia al
modulo i comandi per modalità file (f) e per annullare la riproduzione del primo file (C).
Il modulo audio risponde con done e la cpu entra
nella stato‘Ready’, pronta per ricevere comandi da utente.
Se l’inizializzazione ha avuto successo, sul display appariranno due trattini (--) e il LED31 eseguirà
lampeggi corti.
In caso di errore sul display apparirà la scritta Er e il LED31 si spegnerà.
-
Premere il pulsante Play/Next: se sulla memoria è presente il file, sul display apparirà
01 fisso e verrà riprodotto il primo file audio nominato 01.OGG; il LED31 eseguirà lampeggi lunghi.
Premento nuovamente Play/Next verranno riprodotti in sequenza tutti i file da 02 a 30 trovati sulla memoria
SD. Il numero lampeggerà se il file OGG indicato non è stato trovato sulla
memoria oppure non è valido. Al termine della riproduzione di ogni file audio
verrà eseguito quello successivo; la sequenza si ripete all’infinito finchè non
si preme Stop.
-
Premere il pulsante Stop: la riproduzione verrà arrestata e il
circuito tornerà nella modalità pronto, indicato con due trattini sul display (--); il LED31 tornerà
ad eseguire lampeggi corti.
-
Alimentare uno alla volta i 30 ingressi (sempre con 12V per evitare di
prendere scosse) e verificare che vengano riprodotti i file audio associati. Se
durante la riproduzione viene rilevato un fronte
positivo su un altro ingresso, verrà interrotta la riproduzione in corso ed
avviata la riproduzione del nuovo file audio associato.
-
Se è stato scelto di utilizzare anche il secondo modulo audio MOD2 per riprodurre la colonna
sonora è necessario:
- Inserirlo nell’apposito zoccolo del circuito stampato.
-
Preparare una memoria microSD utilizzando un apposito lettore connesso al pc. Nella root
della memoria, formattata in FAT32, dovranno essere scritti i file audio di
tipo OGG che compongono la colonna sonora. I file su questa seconda memoria SD
verranno riprodotti continuamente dal primo all’ultimo, proprio come un
riproduttore a cassetta di tipo autoreverse. L’ordine di riproduzione dei file
audio dipende dall’ordine in cui sono stati copiati sulla memoria SD: non verrà
tenuto conto dell’ordine alfabetico! Per evitare problemi di lettura, conviene
utilizzare nomi file composti da 8 caratteri, come nei vecchi sistemi operativi DOS.
-
Inserire la memoria microSD nell’apposito alloggiamento situato sull’estermità del modulo.
-
Regolare i due potenziometri del volume (in questo caso è necessario montarli) al massimo.
-
Alimentare il circuito: se tutto funziona correttamente verrà riprodotto il primo file audio
della colonna sonora.
-
Premere il pulsante Play per riprodurre il primo file musicale ‘comandato’ dagli ingressi.
-
Regolare i due potenziometri del volume per ottenere una miscelazione corretta dei due segnali audio.
-
Se si utilizza la scheda esterna MDFLY, è necessario collegarla al circuito mediante il cavo
di adattamento e ponticellare il jumper JP1. Sulla memoria
SD dovranno essere presenti file audio nominati da 01.MP3 a 30.MP3.
Il test del funzionamento con questa scheda audio esterna è analoga al modulo audio VS1000.
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.
Infine si ricorda brevemente che:
-
I moduli audio utilizzati riproducono unicamente file di tipo OGG residenti nella root della memoria
microSD formattata in FAT32.
-
E’ possibile convertire qualsiasi file mp3 o wav utilizzando appositi
convertitori in software audio-editor oppure anche on-line.
-
Il modulo audio può riprodurre un file alla volta, quindi se si desidera avere la miscelazione
di più suoni, è necessario miscelarli con un apposito
software audio-editor e generare un unico file audio.
-
Sulla microSD del modulo audio MOD1, comandato dagli ingressi, dovranno essere scritti da 1 a 30 file audio,
nominati da 01.OGG a 30.OGG.
-
Sulla microSD dell’eventuale modulo audio MOD2 potranno essere scritti tutti
i file audio in formato OGG che compongono la colonna sonora. Per
evitare problemi di lettura, conviene utilizzare nomi file composti da 8 caratteri.
L’ordine di riproduzione dei file audio dipende dall’ordine in cui sono stati copiati sulla memoria microSD:
non verrà tenuto conto dell’ordine alfabetico! Se quindi è necessario
rispettare un ordine, conviene copiarli uno alla volta.
-
Per sfumare il volume all’inizio e alla fine della riproduzione è possibile modificare il file
audio con un apposito software audio-editor.
-
Gli ingressi di questo circuito possono essere connessi all’uscita di una centralina per la
generazione di effetti luminosi. Possono accettare
qualsiasi tipo di tensione, sia alternata che
continua, anche con tensione o pwm variabile (uscite di tipo dissolvenza).
-
La riproduzione dei vari file viene avviata quando l’ingresso
corrispondente passa da un livello basso ad un livello alto (fronte positivo).
Se durante la riproduzione viene rilevato un nuovo
fronte positivo, viene interrotta la riproduzione del file in corso ed avviato
il nuovo file. Quindi, nel caso del collegamento con
una centralina esterna temporizzata, se si vogliono evitare brusche
interruzioni della riproduzione, è sufficiente utilizzare file audio di durata
opportuna. La figura mostra che la riproduzione del file_02 è interrotta dal
sopraggiungere del fronte positivo sull’ingresso
Input3 che fa partire la riproduzione del file associato.
-
Per far partire la riproduzione allo spegnimento di una uscita è
possibile interporre un relè ed utilizzare il contatto NC. Per esempio le uscite Relè
della scheda Presepe6 sono già predisposte con il contatto NC. Lo schema di collegamento del singolo
ingresso sarà il seguente:
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
|
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.
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.
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