DAI VOCE - Futura Elettronica

annuncio pubblicitario
Audio
DAI VOCE
AI TUOI
PROGETTI
di MARCO LANDONI
Due moduli per sintesi vocale
realizzati con microcontrollori Microchip:
in questo articolo descriviamo
il circuito più performante
nonché la demoboard per la programmazione.
Seconda puntata.
N
ella precedente puntata abbiamo iniziato
a descrivere il nostro sistema modulare di
registrazione e riproduzione audio allo stato solido,
accennando al fatto che consta di due moduli (uno
con più memoria e più messaggi, l’altro più piccolo),
gestiti entrambi con micro della Microchip a cui
viene affidata la conversione del segnale audio ed
il controllo dei banchi di memoria. L’architettura si
basa su un’emulazione dell’apprezzata famiglia di
integrati per sintesi vocale della Winbond, proget-
tati specificatamente per memorizzare dell’audio
direttamente in un’apposita EEPROM; diversamente da tali chip, i nostri moduli vocali sono l’insieme
di un microcontrollore e di una Flash-EPROM
modulare: il micro campiona l’audio in arrivo e ne
colloca i dati in memoria, almeno in registrazione.
In lettura, il PIC legge la memoria e converte i dati
in segnale analogico. La durata disponibile dipende
dalla capacità della memoria presente, che il micro
identifica da sé giocando sul fatto che le memorie
Elettronica In ~ Novembre 2008
79
Figura 1. Schema a blocchi del modulo registratore vocale digitale
EEPROM
Configurazione e
selezione funzioni
EEPROM
EEPROM
EEPROM
I2C BUS
µC
8kHz IN
4kHz IN
Anti-alias
filter
ADC PWM
Low pass
filter
Anti-alias
filter
ADC PWM
Low pass
filter
8kHz OUT
4kHz OUT
SCHEDA TECNICA









Formato di registrazione: ADPCM 4bit
Durata di registrazione: 65s @ 16 ksps/130s @ 8ksps (4 memorie)
48s @ 16 ksps/98s @ 8ksps (3 memorie)
32s @ 16 ksps/65s @ 8ksps (2 memorie)
Frequenza di campionamento: 16 ksps/8 ksps selezionabile
Risoluzione effettiva: 8 bit
Dinamica d’ingresso: 1,5 Vpp max
Dinamica d’uscita: 4,5 Vpp max @ piena dinamica d’ingresso
Dinamica d’ingresso: 1,5 Vpp max
Comandi: PLAY/PAUSA, STOP, REC, TRACK SKIP
Funzioni: Beep end of track, Loop singola traccia, Loop su tutte le tracce,
accesso alle tracce sequenziale o ad indirizzamento,
cancellazione ultima traccia o cancellazione globale,
comandi e funzioni via porta seriale (RS-232),
LED rosso e verde di segnalazione.
Figura 2. Pinout (vista dall’alto) del modulo registratore vocale SPC01 .
utilizzano la tecnologia I²C-Bus:
interroga in sequenza i possibili
indirizzi e verifica la risposta.
Dopo aver descritto la filosofia
del progetto ed aver pubblicato
gli schemi a blocchi dei moduli,
in questa puntata proseguiamo
parlando degli Speech Module,
80
Novembre 2008 ~ Elettronica In
descrivendo in modo particolareggiato l’SPC01 ossia quello più
completo e complesso. Parleremo
anche della demoboard realizzata per esso e vi illustreremo come
utilizzare il modulo stesso.
Per pura comodità, nella Figura 1 è riproposto lo schema a
blocchi dell’SPC01 già illustrato
nella puntata precedente; come
certamente vi ricorderete, in
questa configurazione abbiamo
a disposizione due frequenze
di campionamento: 8 e 16 ksps.
Alla prima corrispondono una
maggiore durata di registrazione
e, come controparte, una minore
fedeltà di riproduzione; la seconda permette di registrare più
fedelmente, ma consuma più in
fretta la memoria disponibile.
Il segnale analogico digitalizzato
ed elaborato numericamente
dal micro (quest’ultimo è un
PIC18F2420) è salvato in tempo
reale nelle memorie EEPROM; si
possono installare da un minimo
di due ad un massimo di quattro
memorie seriali, per ottenere
tre diverse durate massime di
registrazione: a una frequenza
di campionamento di 8 ksps,
65 s con due sole memorie, 98
secondi con tre memorie e fino
a 130 s con quattro memorie. Le
memorie opzionali sono del tipo
a montaggio tradizionale, ed
utilizzano dei zoccolini a 8 pin.
SCHEMA ELETTRICO
Come avrete certamente notato,
lo schema del modulo registratore è praticamente un esploso
dello schema a blocchi riportato
in Figura 1: sono presenti il microcontrollore U1, che costituisce
il cuore di tutto il sistema, le
EEPROM seriali I2C U2, U3, U4
e U5 e, infine, la parte analogica
con filtro anti-aliasing, realizzato
con gli operazionali contenuti
all’interno di U7. L’altro doppio
operazionale, U6, è utilizzato per
filtrare il segnale generato dalle
periferiche PWM del micro.
Ma procediamo con ordine ed
iniziamo la descrizione dello
schema partendo dagli ingressi analogici: ciascuno di essi è
collegato ad una coppia di filtri
attivi passa-basso che costituisco-
fs/2
Filtro ideale
no una cella del quint’ordine. La
frequenza di taglio è fissata per
il ramo a 8 ksps a 3,1 kHz e per
quello a 16 ksps a 5,7 kHz.
Certamente qualcuno potrà
chiedersi per quale motivo è stata
introdotta, sul segnale d’ingresso,
un’operazione di filtro così netta:
il motivo è che, come formulato
nel teorema del campionamento
di Shannon, per poter elaborare
correttamente un segnale alla frequenza di campionamento fs, tale
segnale deve avere una banda B
minore di fs/2 (detta frequenza
di Nyquist). Se tale condizione
non fosse rispettata, nel momento in cui si volesse ricostruire
quanto campionato, si otterrebbe
un segnale molto distorto a causa
dell’effetto noto come aliasing.
Nel nostro caso, quindi, per
campionare correttamente, per
esempio ad 8 ksps, occorrerebbe
limitare la banda del segnale a 4
kHz.
Poiché non esistono, nella pratica,
filtri a pendenza infinita (o a
“rettangolo”) occorre iniziare a
tagliare prima dei 4kHz della frequenza di Nyquist e “accontentarsi” di arrivare a tale frequenza
con una sufficiente attenuazione.
In altre parole, il problema della
distorsione nasce dal fatto che,
sopra la frequenza di taglio, c’è
ancora segnale, seppure attenuato; tale segnale viene campionato
e dà origine a disturbo, perché
si trova fuori della frequenza
campionabile.
Usando un filtro a bassa pendenza di attenuazione bisogna
imporre una frequenza di taglio
molto bassa, mentre contando
su una cella ad elevata pendenza, possiamo portare la banda
passante del nostro registratore il
più in alto possibile, ovvero spostare la frequenza limite superiore vicino alla predetta frequenza
di Nyquist.
Con i filtri inseriti nel circuito
B
fs
f
fs
f
Filtro reale
Attenuazione fs/2
B’
A: c5_2
25.00 dB
fs/2
1
Figura 3. Per campionare
correttamente alla frequenza
fs occorre che il segnale abbia
banda B < fs/2. Se così non
fosse, si dovrà filtrare alla
frequenza B eliminando tutto
ciò che è al di sopra di fs/2.
Nel caso reale i filtri hanno
pendenza finita: occorre quindi
definire una banda B’ per
un dato filtro passa basso in
modo tale che alla frequenza
fs/2 si abbia una sufficiente
attenuazione.
2
13dB
0.000 dB
4kHz
-25.00 dB
-50.00 dB
-75.00 dB
-100.0 dB
-125.0 dB
100.0 Hz
Measurement Cursors
1 c5_2
X: 154.39
2 c5_2
X: 4.0732k
Cursor 2-Cursor 1 X: 3.9188k
25.00 dB
A: c10_2
1.000 Hz
Y: 10.194
Y: -2.7741
Y: -12.938
10.00 Hz
100.0 Hz
Figura 4. Trasferimento del filtro per il segnale
relativo all’ingresso 8ksps. Come si vede,
l’attenuazione stimata alla frequenza critica (4kHz)
è di 13 dB. Dalla frequenza di taglio (3,1kHz) si
perdono 10 dB in meno di 1kHz.
1
2
17dB
0.000 dB
8kHz
-25.00 dB
-50.00 dB
-75.00 dB
-100.0 dB
-125.0 dB
100.0 Hz
Measurement Cursors
1 c10_2
X: 154.39 Y: 10.237
2 c10_2
X: 8.0238k Y: -6.5508
Cursor 2-Cursor 1 X: 7.8694k Y: -16.788
1.000 Hz
10.00 Hz
100.0 Hz
Figura 5. Trasferimento del filtro per il segnale
relativo all’ingresso 16 ksps. Vedete che
l’attenuazione stimata alla frequenza critica (8 kHz)
è di 17dB. Dalla frequenza di taglio (5,7 kHz) si
perdono 15 dB in meno di 2 kHz.
Elettronica In ~ Novembre 2008
81
[schema ELETTRICO SPC01]
riusciamo ad ottenere un’attenuazione alla frequenza critica di
almeno 13 dB, sufficienti per la
nostra applicazione (figura 4 e 5).
La stessa catena di filtro, essendo attiva, fornisce un guadagno
complessivo di 10 dB, il che ci
permette di limitare la massima
tensione applicabile agli ingressi
a circa 1,5 Vpp.
Il partitore R25-R26 serve per
82
Novembre 2008 ~ Elettronica In
creare una tensione di riferimento a metà dinamica con la quale
polarizzare, tramite le resistenze R10 ed R8, gli ingressi degli
operazionali; questi ultimi sono
di tipo rail-to-rail, allo scopo di
sfruttare a pieno la dinamica
d’ingresso dei convertitori AD
del micro. Infatti tali convertitori
hanno una risoluzione di 10 bit
e quindi convertiranno come
codice “0” una tensione di zero
volt e come codice “1023” un
potenziale pari a Vdd (5 volt nel
nostro caso).
Se la tensione d’uscita degli
operazionali non fosse in grado
di raggiungere l’ampiezza di
quella d’alimentazione (5 V) ma
solo i 3,5÷4 V, come accadrebbe
utilizzando un comune operazionale (ad esempio un TL082),
l’ADC non potrebbe mai convertire fino al codice “1023”, ma si
fermerebbe ai valori compresi
fra 700 e 800. Ciò significherebbe
perdere circa il 20% in termini di
dinamica di conversione. Invece,
impiegando operazionali con
uscita rail-to-rail, siamo in grado
di fornire ai pin 2 e 3, utilizzati
come ingressi analogici, una tensione che va da 0 a 5 V (a meno
di un centinaio di mV) e quindi
di utilizzare praticamente tutto il
range dinamico dei convertitori
A/D.
Proseguendo con la descrizione
della parte analogica, passiamo
alle uscite delle due periferiche
PWM ossia ai pin 12 e 13 del microcontrollore. Anche in questo
caso i percorsi dei segnali sono
distinti per il ramo a 8 ksps e 16
ksps. In entrambi i casi troviamo
un primo stadio con un filtro passa-basso passivo (R30, C3 e R31,
C30) il quale ha lo scopo di eliminare il segnale di 5V ad onda rettangolare di 156 kHz modulato in
PWM estraendone solamente la
componente modulante; tale rete
passiva è dunque seguita da un
filtro attivo del secondo ordine
utilizzato come circuito ricostruttore per il segnale analogico
campionato in partenza.
Un altro blocco fondamentale è
costituito dal banco di memorie
U2÷U5; si tratta di EEPROM di
tipo ad accesso seriale, prodotto
da Microchip, che utilizzano
un’interfaccia I²C-Bus per comunicare con un microcontrollore.
Le resistenze R5 e R6 servono
proprio come pull-up per il
bus seriale. Come noterete, alle
memorie è assegnato un indirizzo tramite i pin 1 e 2, indirizzo
indispensabile affinché il micro
possa scrivere e leggere ogni
volta i dati in quella giusta; lo
stesso address serve per contare
le memorie presenti (il micro
interroga i chip uno alla volta e
determina la quantità di memoria in base a quanti rispondono).
Il bus I²C permette di connettere
fino a quattro chip di memoria in
parallelo, estendendo la capacità massima a 4 Mbit. Facciamo
presente che il numero minimo
di memorie è due (il perché è stato spiegato
nella puntata
precedente),
pertanto,
Elettronica In ~ Novembre 2008
83
[piano di MONTAGGIO SPC01]
Elenco
Componenti:
R1: 27 kohm 5% (0805)
R32÷R35: 27 kohm 5% (0805)
R2, R20: 100 kohm 5% (0805)
R24, R27: 100 kohm 5% (0805)
R37: 100 kohm 5% (0805)
R3, R4: 1 kohm 5% (0805)
R5, R6: 1,5 kohm 5% (0805)
R7: 10 kohm 5% (0805)
R8, R10: 47 kohm 5% (0805)
R9: 56 kohm 5% (0805)
R11, R25, R26: 22 kohm 5% (0805)
R12, R22: 27 kohm 5% (0805)
R13, R14, R17: 47 kohm 5% (0805)
R18, R39: 47 kohm 5% (0805)
R15: 68 kohm 5% (0805)
R18, R21: 33 kohm 5% (0805)
R19, R23: 150 kohm 5% (0805)
R28, R29: 56 kohm 5% (0805)
R30, R31: 3,3 kohm 5% (0805)
R36, R38: 2,2 kohm 5% (0805)
C1, C2: 15 pF ceramico (0805)
C3: 4,7 nF ceramico (0805)
C4: 47 µF 6,3 VL tantalio (A)
C5: 10 µF 6,3 VL tantalio (C)
C6: 100 nF ceramico (0805)
C7: 10 µF 6,3 VL tantalio (A)
C8: 1 nF ceramico (0805)
C9÷C12: 100 nF ceramico (0805)
C13, C14: 1 nF ceramico (0805)
C15: 2,2 nF ceramico (0805)
C16: 1 nF ceramico (0805)
C17: 470 pF ceramico (0805)
C18, C26: 2,2 nF ceramico (0805)
C31, C34: 2,2 nF ceramico (0805)
C19, C20: 220 nF ceramico (0805)
C36, C39: 220 nF ceramico (0805)
C21, C23: 100 nF ceramico (0805)
C27÷C29, C33: 100 nF ceramico (0805)
C22, C24, C25: 1 nF ceramico (0805)
C32, C35: 1 nF ceramico (0805)
C37, C38: 1 nF ceramico (0805)
C30: 4,7 nF ceramico (0805)
LD1: led rosso (0805)
LD2: led verde (0805)
U1: PIC18F2420 (SOIC28)
U2, U3: 24LC1025-I/SM (SOIC8)
U4, U5: 24LC1025-I/P (DIP8)
U6: MCP6002 (SOIC8)
U7: MCP6004 (SOIC14)
Q1: Quarzo 10 MHz (HC49/4H)
Varie:
- Strip maschio 12 poli (2 pz.)
- Zoccolo 4+4 (2 pz.)
- circuito stampato
Durata di registrazione in rapporto alle memorie montate.
N° memorie
Durata [s]
U2
U3
U4
U5
2
32/65
X
X
-
-
3
48/98
X
X
X
-
4
65/130
X
X
X
X
per ridurre al minimo le dimensioni del circuito, le due memorie
di base (U2 e U3) sono di tipo
SMD, montate direttamente sulla
scheda; le altre due, il cui utilizzo
è opzionale (U4 e U5), sono di
tipo dual-in-line e quindi montate su zoccolini tradizionali. Potranno essere inserite o meno nel
circuito, a seconda delle vostre
necessità.
Ai pin 17 e 18 del micro fa capo la
periferica UART interna men-
84
Novembre 2008 ~ Elettronica In
tre i LED di segnalazione sono
connessi ai pin 4 e 5. Tutti gli altri
pin (21 – 28) sono utilizzati come
ingressi digitali per il controllo
delle funzioni del registratore: la
possibilità di attivare delle resistenze di pull-up interne su tutta
la porta B del micro consente di
non impiegarne di esterne.
Il circuito richiede un’alimentazione di 5V stabilizzati e necessita di una corrente continua di
50mA.
SCHEMA ELETTRICO
DEMOBOARD
La demo board è pensata allo
scopo di fornire allo Speech
Module dei segnali analogici
di livello adeguato e di consentire all’utente di provare tutte
le funzioni del modulo SPC01.
Infatti, osservandone lo schema
elettrico, notiamo che l’integrato
U1b è utilizzato come preamplificatore per l’ingresso microfonico
MIC IN; allo stesso tempo, però,
è presente anche un ingresso a
livello di linea LINE IN. I due
segnali sono miscelati dalle resistenze R10 ed R14 ed inviati agli
ingressi analogici del modulo
SPC01. Quindi potrete scegliere
[schema ELETTRICO Demoboard]
da voi se utilizzare come sorgente un microfono oppure l’uscita
di un preamplificatore oppure
entrambe lasciando miscelare il
segnale direttamente alla demo-
board. I pin 17 e 18 del modulo
SPC01 costituiscono le due uscite
analogiche che saranno sempre attive alternativamente. Le
resistenze R13 ed R14 servono
per prelevare e sommare tra loro
questi due segnali per poi inviarli
al buffer di tensione U1a: questo
fornirà sul connettore LINE OUT
un segnale a bassa resistenza
Elettronica In ~ Novembre 2008
85
[piano di MONTAGGIO Demoboard
Demoboard]
La demoboard deve
disporre di due strip femmina da 12 poli ciascuna,
nelle quali inserire il
modulo SPC01. In basso
a sinistra sono previsti i
contatti della seriale.
Elenco
Componenti:
R1: 150 ohm 5% (0805)
R2, R3: 100 kohm 5% (0805)
R5, R7: 100 kohm 5% (0805)
R4, R6: 10 kohm 5% (0805)
R9, R10: 10 kohm 5% (0805)
R16: 10 kohm 5% (0805)
R8: 1 kohm 5% (0805)
R11: 1 Mohm 5% (0805)
R12: 27 kohm 5% (0805)
R13: 47 kohm 5% (0805)
R14: 47 kohm 5% (0805)
R15: 12 kohm 5% (0805)
R17: Trimmer MO 10 kohm
C1, C7: 470 nF ceramico (0805)
C2: 220 nF ceramico (0805)
C3÷C6: 100 nF ceramico (0805)
C8, C9: 100 nF ceramico (0805)
d’uscita e, contemporaneamente,
piloterà l’ingresso dell’amplificatore audio U2. Tale integrato,
un TDA7052A prodotto da NXP
Semiconductors, è un amplificatore audio in grado di pilotare
altoparlanti da 1 W; il suo stadio
d’uscita a ponte permette di
accoppiare il carico direttamente
(in continua) risparmiando al
progettista l’onere di inserire
grosse capacità di disaccoppiamento, tipicamente necessarie
utilizzando amplificatori alimentati da una tensione singola.
Agendo sulla tensione continua
applicata al pin 4, è possibile
variare il guadagno interno
dell’amplificatore (il TDA7052A
dispone della funzione Voltage
Controlled Gain); noi abbiamo
utilizzato tale regolazione per
effettuare il controllo di volume,
che viene ottenuto tramite il trimmer R17, cui è affidato il compito
86
Novembre 2008 ~ Elettronica In
C10: 22 µF 10 VL tantalio (D)
C11: 220 µF 10 VL tantalio (D)
U1: MCP6002 (SOIC8)
U2: TDA7052A (SOIC8)
SW1: Dip switch 4 vie
P1÷P4: Microswitch
Varie:
- Strip maschio 2 poli (6 pz.)
- Strip maschio 3 poli
- Strip maschio 10 poli (2 pz.)
- Strip femmina 12 poli (2 pz.)
- circuito stampato
di definire il potenziale applicato
al predetto piedino.
I segnali analogici inviati o
prelevati dal modulo SPC01 sono
riportati anche sul bus disegnato
nella parte alta dello schema tramite le resistenze R9 ed R16.
Al bus, ma chiaramente anche
agli ingressi relativi sul modulo,
sono connessi i pulsanti P1÷P4,
che vengono impiegati per generare i segnali di PLAY/PAUSE,
STOP, REC e SKIP. Come potete
constatare, non ci sono resistenze di pull-up poiché vengono
utilizzate quelle presenti internamente nel micro. Un selettore dipswitch a quattro poli e un jumper
consentono di configurare i
parametri di funzionamento del
registratore. Infine, sono presenti
un connettore per la programmazione ICSP del microcontrollore e
un altro connettore per un’eventuale interfaccia seriale, al quale
può essere applicato un converter seriale/USB.
REALIZZAZIONE PRATICA
Sia la scheda SPC01 che la
relativa demo board, andranno montate con componenti in
tecnologia SMD. Ormai l’utilizzo
di questo tipo di montaggio va
sempre più diffondendosi anche
a livello hobbystico, vuoi perchè
anche in tale contesto si cerca di
miniaturizzare quanto più possibile le dimensioni del circuito
stampato, vuoi perché alcuni
circuiti integrati sono reperibili
solamente in tecnologia a montaggio superficiale.
Montare un circuito in SMD
richiede solamente un po’ più di
pazienza rispetto ad un montaggio tradizionale, dato che si
devono maneggiare componenti
minuscoli ed effettuare saldature
di pin tra loro vicinissimi, tra
Una voce nel buio
Se è vero che l’alfabeto Brail ha permesso ai
non vedenti di leggere, molto va ancora fatto per
dare autonomia alle persone prive di quello che
tra i cinque sensi è il più importante. Come fare
in modo che uscendo per strada, i ciechi possano
conoscere gli orari degli autobus e leggere i
cartelli? E ancora: come si può permettere loro di
mettere la giacca del colore desiderato o aprire
la bottiglia giusta? Sono solo alcune fra le tante
difficoltà quotidiane di chi vede poco o nulla.
È proprio per aiutare un amico non vedente che
un informatico e un ingegnere microelettronico,
Massimo Columbu di Cagliari e Marco Gregnanin
di Roma, hanno deciso di creare e brevettare
un apparato in grado di assistere chi ha perso il
dono della vista. È nato così SiRecognizer, il primo
sistema portatile al mondo in grado di riconoscere
oggetti solidi e piani. Un computer, usando una
macchina fotografica digitale, uno scanner, un
cubo fotografico, un microfono e vari accessori,
mediante un apposito software riconosce qualsiasi
oggetto noto, di qualunque forma e prospettiva,
dalla sua immagine ottenuta mediante una
fotocamera o uno scanner, quindi ne dice il nome
attraverso la sintesi vocale.
SiRecognizer sa anche distinguere i colori, leggere
etichette, foglietti illustrativi di medicinali, estratti
conto, bollette, libri e giornali. Basta solo un clic
sulla macchina fotografica e in pochi secondi
il computer dice di cosa si tratta o legge il testo
ripreso; e se non riesce a focalizzare l’oggetto,
SiRecognizer guida la mano con indicazioni verbali
fino a riuscire nello scopo. Lo strumento può anche
insegnare a scrivere ai non vedenti dalla nascita.
l’altro senza provocare sbavature
di stagno.
Una volta in possesso dei circuiti stampati, vi consigliamo di
iniziare il montaggio partendo
dai circuiti integrati: come al
solito controllate più volte di non
saldarli al contrario. Proseguite
poi con tutti i componenti passivi
Con una penna
ottica si può
scrivere a mano
sul
monitor
mentre
il
computer legge
le lettere e le
parole anche
se scritte male
o in corsivo;
legge, inoltre,
in 25 lingue, inclusi greco antico, latino e russo.
Una vera rivoluzione dunque, non solo per i ciechi e
gli ipovedenti ma anche per i dislessici (la dislessia
è una sindrome classificata tra i Disturbi Specifici
di Apprendimento e si manifesta nella difficoltà
dei soggetti colpiti a leggere velocemente e
correttamente ad alta voce) che, grazie alla sintesi
vocale, possono leggere correttamente un testo.
Le sorprendenti capacità del SiRecognizer hanno
spinto il consigliere regionale sardo Raffaele
Farigu, anch’egli non vedente, a presentare
un’istanza all’assessorato alla Sanità e al
Ministero del Welfare, per ottenere l’inserimento
dell’apparecchio nel Nomenclatore Protesico
Regionale e in quello Nazionale (il prontuario
degli ausili protesici dispensabili dal Servizio
Sanitario Nazionale). Gli oculisti però potrebbero
già prescrivere lo strumento avvalendosi della
“riconducibilità”, ossia una dichiarazione di
equivalenza a qualcosa che è già mutuabile. Il
costo del sistema completo si aggira intorno ai
3.500 Euro ma per il solo software si scende a
circa 700. Ora dobbiamo solo attendere.
seguendo la regola generale che
consiglia di montare dapprima
tutti i componenti con profilo
più basso e proseguendo mano
a mano con i componenti dal
profilo sempre più alto; facciamo
notare che nei condensatori al
tantalio la banda colorata indica
sempre il terminale positivo. In-
fine potete montare i connettori a
pettine, gli zoccoli per gli integrati, il trimmer e i pulsanti.
Potrebbe risultare difficoltoso riconoscere l’anodo e il catodo dei
led, giacché non sono chiaramente indicati: per individuarli potreste aiutarvi alimentandone uno
alla volta con un alimentatore a
Elettronica In ~ Novembre 2008
87
V
5V ed una resistenza da 560 ohm
messa in serie al led stesso. Nel
verso in cui il diodo si illuminerà,
il terminale collegato al positivo
dell’alimentatore corrisponderà
all’anodo.
Nel caso realizzaste anche la
demoboard dovrete scegliere
che tipo di ingresso e di uscita
prevedere. Se utilizzate le prese
di linea è conveniente effettuare i
collegamenti del caso adottando
degli spezzoni di cavetto schermato: saldate il conduttore centrale alle piazzole contrassegnate
con il simbolo “+” e collegate la
calza alla piazzola adiacente.
Allo stesso modo, utilizzando un
microfono, dovrete impiegare
un cavetto schermato e, anche
in questo caso, il conduttore
centrale andrà connesso alla
piazzola “+” sia sullo stampato
che sul trasduttore; l’alimentazione per il microfono electret è
fornita dal circuito di polarizzazione integrato nella demoboard.
Nel caso vogliate utilizzare un
altoparlante per ascoltare i brani,
dovrete collegarne i terminali alle
relative piazzole presenti sullo
stampato, anche senza badare
alla polarità; potrete utilizzare un
elemento qualsiasi, con impeden-
88
Novembre 2008 ~ Elettronica In
t
MAX 200ms
U3
U4
U5
Figura 7. Sugli ingressi PLAY, SKIP,
STOP e REC è ammesso un comando
impulsivo attivo a livello basso, di
durata non superiore a 200ms.
Figura 8. Verso corretto di montaggio
del modulo SPC01 sulla demoboard e
identificazione dei chip della memoria
opzionale.
Figura 6. Nelle capsule
microfoniche electret il terminale
di massa M si può facilmente
individuare perché è quello che è
sempre connesso con la carcassa
metallica.
za nominale maggiore di 4 ohm e
potenza di almeno 1 watt.
UTILIZZO DEL REGISTRATORE
Il modulo SPC01 è del tutto indipendente e funziona anche senza
essere montato sulla demo board;
tuttavia, solamente per comodità
d’esposizione, in questa sede
vi illustreremo le funzioni del
dispositivo facendo riferimento
al modulo montato sulla scheda
demo. Prima, però, vorremmo
darvi alcune indicazioni circa
l’utilizzo indipendente dell’SPC01. Partiamo dicendo innanzitutto che se intendete utilizzare uno solo
dei due ingressi analogici a
disposizione, quello non utilizzato va obbligatoriamente
collegato a massa onde evitare
che capti interferenze che poi
registrerebbe insieme al segnale.
Qualunque sia l’applicazione,
l’alimentazione del circuito deve
necessariamente provenire da
una fonte stabilizzata in grado
di erogare una tensione continua
di 5 volt esatti. Gli ingressi per
pulsanti PLAY, STOP, REC e
SKIP sono attivi bassi e, nel caso
non colleghiate dei pulsanti, il segnale di pilotaggio dovrà essere
di tipo impulsivo di durata non
superiore a 200ms.
Tutti gli altri ingressi (Beep, AL,
LL, fs e FUNC) sono invece levelsensitive, ossia possono rimanere
a livello logico alto o basso per
un tempo indefinito; anche questi
sono attivi bassi.
L’ingresso MCLR, se collegato a
massa, resetterà il micro e lo terrà
in tale stato fino a quando permarrà un livello logico zero su
tale pin. Nella memoria del registratore possono essere registrate
fino a 64 tracce differenti senza
limiti di lunghezza a patto che
non si superi la capacità totale di
registrazione. Ogni nuova traccia
viene accodata all’ultima esistente. Tutto ciò è gestito dal microcontrollore tramite una tabella
delle tracce collocata in memoria;
la prima volta che si utilizza il
registratore oppure ogni qualvolta viene variata la configurazione
delle EEPROM, passando per
esempio da due a tre memorie, è
necessario seguire una procedura
d’inizializzazione: ciò si compie
effettuando una cancellazione
totale delle tracce e pertanto vi
rimandiamo al relativo paragrafo.
Supponiamo adesso di utilizzare
il modulo SPC01 montato sulla
demo board: notate che il giusto
verso di montaggio prevede che
gli integrati U3, U4 e U5 siano
rivolti verso i pulsanti come è
indicato in Figura 8.
REGISTRAZIONE
La modalità di registrazione può
essere attivata, sulla demo board,
premendo il pulsante REC, oppure fornendo un impulso logico
basso al pin REC del modulo
SPC01. Così facendo, il led rosso
si accenderà, mentre il led verde
inizierà a lampeggiare indicando che il sistema è in modalità
di registrazione ed in attesa del
comando di start: la registrazione
vera e propria inizierà nell’istante in cui premerete il tasto PLAY/
PAUSE (oppure verrà fornito un
impulso negativo allo stesso pin),
in questa fase il led verde rimarrà
acceso ma smetterà di lampeggiare segnalando che la registrazione è in corso.
Se premerete nuovamente il tasto
PLAY/PAUSE, il dispositivo
entrerà di nuovo in pausa interrompendo momentaneamente
la registrazione: questo stato è
segnalato tramite il led verde
che riprenderà a lampeggiare.
Per continuare la registrazione
basterà premere un’altra volta il
tasto PLAY/PAUSE ed anche il
led verde smetterà di lampeggiare. La registrazione può essere
interrotta solamente tramite la
pressione del tasto STOP; in tal
caso tutto ciò che è stato registrato verrà salvato, tutti i led
si spegneranno e il dispositivo
si porterà in attesa di un nuovo
comando. È possibile interrompere la registrazione in qualsiasi
momento, anche durante una
pausa.
Tutto ciò che viene registrato fino
alla pressione del tasto STOP verrà salvato come un’unica traccia.
Tutte la eventuali nuove registrazioni verranno automaticamente
Figura 9. Premendo il pulsante REC si entrerà in modalità registrazione
(a sinistra): il LED rosso si accenderà fisso, mentre il LED verde lampeggerà;
la registrazione, segnalata dall’accensione del LED verde fisso, inizierà nel
momento in cui verrà premuto il pulsante PLAY (a destra).
Figura 10. Il pulsante STOP terminerà la registrazione e i led si
spegneranno. La frequenza di campionamento va selezionata tramite
l’apposito dip-switch.
Figura 11. La riproduzione viene attivata tramite il pulsante PLAY;
lo stesso, premuto durante la lettura di un brano, effettua una pausa.
Una ulteriore pressione riavvia la riproduzione da dove è stata sospesa.
accodate all’ultima presente in
memoria e salvate come tracce
diverse.
L’unico parametro configurabile
in registrazione è la frequenza di
campionamento, selezionabile tra
le due disponibili tramite il pin
fs: portando questo a livello logico zero verrà selezionato un campionamento a 8 ksps e l’ingresso
che verrà effettivamente campio-
nato è quello che riporta la stessa
dicitura. Viceversa, lasciando
scollegato il pin o portandolo a
Vcc, verrà selezionata la frequenza di 16 ksps; anche in questo
caso sarà campionato solamente
l’ingresso corrispondente.
RIPRODUZIONE
Ipotizziamo di aver chiuso il
jumper J1 (pin FUNC a massa)
Elettronica In ~ Novembre 2008
89
Figura 12. Il pulsante STOP consente di interrompere la riproduzione in
qualsiasi condizione. Una pressione del pulsante SKIP consente di
saltare immediatamente alla traccia successiva.
Figura 13. Settaggio delle funzioni in riproduzione: frequenza di
campionamento, loop locale, loop globale e beep.
Figura 14. La cancellazione delle tracce avviene premendo e tenendo premuto
STOP, quindi premendo anche il tasto REC; un lampeggio simultaneo dei LED
indicherà che l’operazione è compiuta. A destra, esecuzione della cancellazione
della singola traccia e, a sinistra, di quella di tutte le tracce (inizializzazione).
in modo da disabilitare l’accesso diretto alle tracce: in questo
caso la riproduzione avviene in
modo sequenziale ed è attivata
semplicemente premendo il
pulsante PLAY/PAUSE; verrà
acceso il led verde, segnalando
così la riproduzione della traccia
in corso. Un’ulteriore pressione
dello stesso pulsante durante la
riproduzione, metterà in pausa
90
Novembre 2008 ~ Elettronica In
il sistema e il led verde inizierà
a lampeggiare. Per riprendere la
riproduzione dal punto in cui è
stata interrotta basterà premere
nuovamente il pulsante PLAY/
PAUSE.
Invece, se durante la riproduzione di una traccia premiamo
il pulsante STOP in un qualsiasi
momento, la lettura verrà interrotta. A questo punto, premendo
nuovamente il pulsante PLAY/
PAUSE la riproduzione riprenderà dall’inizio della traccia interrotta. Il registratore è in grado
di fermarsi automaticamente al
termine di ogni traccia; quindi, se
si ferma al termine di una traccia,
premendo nuovamente PLAY/
PAUSE la riproduzione partirà
dall’inizio della traccia successiva a quella appena riprodotta.
Premendo il bottone SKIP durante la lettura di una traccia è
possibile saltare immediatamente all’inizio della successiva se
questa sarà presente, altrimenti
si ritornerà automaticamente alla
prima.
In fase di riproduzione è possibile settare alcune utili funzioni (figura 13): portando a massa il pin
siglato BEEP, possiamo inserire
in coda ad ogni traccia una nota
(“beep”) di segnalazione; ciò
serve, ad esempio, per indicare
la fine di un messaggio oppure
l’inizio del successivo.
Collegando a massa il pin LL,
verrà attivato il “loop” automatico sulla traccia corrente: non
appena la traccia correntemente
in lettura giungerà alla fine verrà
fatta ricominciare da capo ripetendola all’infinito finché non si
premerà il pulsante STOP.
Analogamente, portando il pin
AL a massa, verrà attivato un
“loop” su tutte le tracce presenti: partendo da quella corrente
verranno riprodotte in sequenza
tutte le tracce fino all’ultima
terminata la quale il registratore
si fermerà automaticamente.
Collegando a massa entrambi i
pin LL e AL si abiliterà ancora
il “loop” su tutte le tracce ma, a
differenza della modalità precedente, quando il dispositivo sarà
giunto alla fine dell’ultima traccia
memorizzata ripartirà immediatamente dalla prima, entrando in
un ciclo infinito.
In tutti questi tre casi è sempre
possibile fermare in qualsiasi momento il registratore, premendo
STOP; allo stesso modo, saranno
attive anche le funzioni PAUSE
e SKIP.
La selezione della frequenza di
campionamento rimane attiva
anche in fase di lettura delle
tracce: normalmente una traccia
registrata a 8 ksps dovrebbe
venire riprodotta alla stessa velocità di campionamento; tuttavia,
potrete decidere di riprodurre e
8 ksps una traccia registrata a 16
ksps, ottenendo così una tonalità
più grave.
Facendo il contrario, ossia riproducendo a 16 ksps una traccia
registrata a 8ksps, otterrete una
tonalità più acuta. Questa caratteristica può essere utilizzata per
creare semplici effetti sonori.
Portando a livello logico alto il
pin FUNC o lasciando sconnesso
il jumper J1, abiliterete la funzione di indirizzamento esplicito
delle tracce: in questo caso i
pin BEEP, fs, LL e AL verranno
utilizzati come quattro linee
dati (A3÷A0) su cui impostare
in formato binario il numero di
traccia (da 0 a 15) che vorrete
riprodurre alla pressione del tasto PLAY. Così, se imposterete il
numero 6 (0110), alla pressione di
PLAY verrà riprodotta la traccia
memorizzata al posto numero 6,
impostando 0 (0000) verrà riprodotta la prima traccia presente in
memoria e così via.
Nel caso tentiate di riprodurre
una traccia non presente in memoria il comando di PLAY verrà
ignorato.
La configurazione delle funzioni
associate ai dip-switch (ripetizione tracce, beep e frequenza di
campionamento) viene memorizzata nel momento in cui il jumper
J1 viene rimosso.
CANCELLAZIONE DELLE TRACCE
Sono previste due modalità di
cancellazione delle tracce salvate nella memoria EEPROM: la
prima consiste nella rimozione
dell’ultima traccia presente, la
seconda consente di cancellare
completamente tutta la memoria
e quindi tutte le tracce.
Per rimuovere solo l’ultima
traccia (modalità 1) in memoria
occorre inserire il jumper J1 (pin
FUNC a livello logico zero) quindi assicurarsi che il dip-switch
AL sia aperto (AL a livello logico
alto). A questo punto premete e
tenete premuto il pulsante STOP,
quindi agite anche sul pulsante
REC; immediatamente vedrete
i led rosso e verde lampeggiare
per un istante a conferma dell’avvenuta rimozione della traccia.
Potete ora decidere se rimuovere
altre tracce oppure riprendere ad
utilizzare il registratore normalmente. Nel caso vogliate procedere rimuovendo altre tracce,
basterà che ripremiate il pulsante
STOP e poi il pulsante REC; il
lampeggio dei led confermerà
sempre il buon esito dell’operazione richiesta.
Se invece preferite cancellare tutta la memoria in un solo istante
(modalità 2) dovrete impostare J1
esattamente come per la modalità
1, ma il pin AL, anziché forzarlo
a livello logico alto, dovrete portarlo a livello logico basso (dipswitch inserito). Quindi procedete come sopra ossia premete e
tenete premuto il pulsante STOP,
quindi premete REC.
Anche in questo caso un lampeggio dei led vi avviserà del
completamento dell’operazione.
Tenete presente che la cancellazione (sia totale che parziale) delle tracce non va effettivamente a
svuotare il contenuto di tutte le
memorie EEPROM, ma modifica
solamente la tabella d’allocazione
delle tracce presente in una delle
memorie EEPROM; corrisponde,
insomma, a una formattazione
Stato
J1
Corrispondenza
dip-switch
APERTO
Fs
LL
AL
Beep
CHIUSO
A0
A1
A2
A2
del banco di memoria. Per questo
motivo, l’operazione di cancellazione totale della memoria è
utilizzata anche come procedura
d’inizializzazione.
Per questa puntata è tutto;
avrete notato che non si è ancora parlato della porta seriale:
questo volutamente e solamente
per questioni di spazio. Siccome,
però, le funzioni svolte dalla
porta seriale sono molto simili
per entrambi i moduli SPC01 ed
SPC02, troverete tutto quello che
vi serve sapere nella prossima
puntata, quando descriveremo
il circuito e spiegheremo come
utilizzare lo speech module più
piccolo, ossia il riproduttore

vocale digitale SPC02.
per il MATERIALE
Il modulo vocale SPC01 è disponibile già montato e collaudato al
prezzo di 34,00 Euro. Questa versione viene fornita con le due memorie da 1 Mbit in versione SMD
già montate sulla scheda. Le memorie supplementari da 1 Mbit (in
versione DIP) costano 7,20 Euro
cadauna. La demoboard (cod.
SPC-DK) è anch’essa disponibile già montata e collaudata al
prezzo di 22,00 Euro. Il dispositivo comprende tutte le minuterie,
il microfono e l’altoparlante. Non
è compreso l’alimentatore né il
modulo SPC01. Tutti i prezzi si
intendono IVA compresa.
Il materiale va richiesto a:
Futura Elettronica, Via Adige 11,
21013 Gallarate (VA)
Tel: 0331-799775 • Fax: 0331-792287
http://www.futurashop.it
Elettronica In ~ Novembre 2008
91
80
Ottobre 2009 ~ Elettronica In
Audio
DAI
VOCE
AI TUOI
PROGETTI
di MARCO LANDONI
Concludiamo la descrizione dei nostri
Sintetizzatori Vocali con PIC analizzando
il registratore più semplice, il software
di gestione ed anche l’interfaccia seriale
necessaria per il collegamento al PC.
N
el fascicolo 131 abbiamo introdotto e iniziato
a descrivere una nostra nuova idea: realizzare, con l’aiuto di un microcontrollore Microchip,
dei moduli per sintesi vocale (Speech
Speech Module)
comandabili da segnali elettrici o pulsanti, esattamente come gli ormai famosi DAST e ChipCorder
della ISD e della Winbond. Il perché di questo progetto è presto detto: i vecchi circuiti integrati (che in
ogni caso richiedevano un certo numero di componenti esterni) sono sempre più difficili da reperire
sul mercato; abbiamo dunque pensato di riprodurre
le funzioni di questi chip con dei modulini semplici
ed economici che sicuramente troveranno un vasto
impiego in tutti i dispositivi elettronici “parlanti”:
il tutto facendo ricorso a componenti comunissimi,
microcontrollori Microchip PIC e memorie I²C-Bus.
Dopo aver introdotto, nello stesso fascicolo, la
filosofia di progetto e la struttura dei dispositivi ed
aver descritto dettagliatamente il primo della serie,
ossia l’SPC01, nel numero 132, è venuto il momento,
Elettronica In ~ Dicembre 2008 / Gennaio 2009
31
in questa terza e ultima puntata,
di occuparci dell’ultimo dei nostri moduli: il registratore/lettore
miniatura SPC02. Dapprima ne
vedremo lo schema elettrico, poi
ne illustreremo le modalità di utilizzo; concluderemo poi parlando della porta seriale, interfaccia
comune al modulo SPC01 e la cui
spiegazione abbiamo rimandato
dalla seconda a questa puntata.
Riportiamo per chiarezza d’esposizione lo schema a blocchi
dell’SPC02 e le relative caratteristiche; notiamo subito che il
modulo è più semplice rispetto al
più completo SPC01 già descritto.
L’hardware di questo modulo
non è personalizzabile come
nell’SPC01, perché è dedicato ad
un uso specifico e non generico
come il precedente; tuttavia la
struttura e il funzionamento sono
inevitabilmente affini a quelli
del “fratello maggiore”, poiché
una capacità di registrazione
massima di 65 s, campionando ad 8 ksps (la frequenza di
campionamento dell’SPC02 non
è modificabile). Dall’altro canto,
però, abbiamo integrato nel modulo un front-end microfonico
ed uno speaker driver: a voi non
resterà altro da fare che collegare
un microfono, uno speaker, tre
pulsanti ed alimentare il circuito
per cominciare ad utilizzarlo.
Tutto questo si può collegare ad
un apposito strip di pin a passo
2,54 mm che è stato previsto su
un lato del circuito stampato
per consentire il montaggio del
modulo inserendolo su un altro
circuito, quale ad esempio un
controllore elettronico per un tornello che debba anche riprodurre
un messaggio vocale, un rilevatore di passaggio con avviso vocale,
un promobox o un impianto si
sicurezza.
Fig.1 - Schema a blocchi del Mini Speech Module SPC02.
EEPROM
Configurazione
e selezione
funzioni
EEPROM
I²C BUS
µC
LED
Anti-alias
filter
ADC
PWM
Low pass
filter
4 kHz OUT
4 kHz IN
MIC
MIC
preamp
il micro, le memorie, gli stadi di
filtraggio analogici e la struttura
del firmware, sono praticamente
identici per i due modelli.
In questa configurazione minima
troviamo montate solamente due
memorie EEPROM, che danno
32
Speaker
driver
SPK
SCHEMA ELETTRICO
Quanti di voi hanno già avuto
modo di leggere la puntata relativa al modulo SPC01, noteranno
immediatamente una grande
similitudine tra i due circuiti;
non si tratta, ovviamente di un
Dicembre 2008 / Gennaio 2009 ~ Elettronica In
Fig.1 - Il nostro speech
processor digitale consta
di un microcontrollore
Microchip che in
registrazione digitalizza
il segnale microfonico
opportunamente filtrato
(per evitare distorsioni) e in
lettura converte, mediante
l’uscita PWM, i dati
campionati in componente
audio, amplificata da un
finale BF integrato (U4).
caso: i blocchi funzionali sono
infatti molto simili tra loro. Il
modulo SPC02 è infatti una via di
mezzo tra il modulo più complesso SPC01 e la relativa demoboard
SPC-DK .
Partendo dall’ingresso MIC
[schema ELETTRICO]
troviamo un primo amplificatore in configurazione invertente
(U5a) che serve ad amplificare di
circa 25 dB il segnale captato dal
microfono; seguono tale stadio
gli altri due operazionali (U5c e
U5d) che formano due celle di
Sallen-Key in cascata utilizzate
come filtri passa-basso attivi,
caratterizzati ciascuno da una
frequenza di taglio di 3,1 kHz.
Le due celle, unitamente al filtro
passa-basso passivo costituito da
R27 e C13, formano, esattamente
come per il modulo SPC01, un
efficiente filtro passa-basso antialiasing del quint’ordine.
Il segnale così filtrato viene prelevato ai capi di C13 dall’ingresso
del convertitore AD interno al
micro, anche in questo caso un
Elettronica In ~ Dicembre 2008 / Gennaio 2009
33
Fig. 2 - Pinout del modulo SPC02 vista
dall’alto (lato trimmer e quarzo).
PIC18F2420, il quale si occuperà
di campionare il segnale, elaborarlo, salvare i dati in memoria
ed effettuare anche tutte le operazioni del procedimento inverso (lettura) ossia estrarre i dati,
convertirli in analogico e inviarli
all’uscita audio.
Durante la riproduzione di una
traccia, il micro utilizzerà la periferica PWM #2 per generare un
segnale analogico: sul pin 12 di
U1 sarà sempre presente un’onda
quadra a frequenza fissa di 195
kHz e, a tale segnale, il firmware
varierà il duty-cycle D in modo
proporzionale all’ampiezza del
segnale vocale decompresso che
si deve riprodurre, campione per
campione.
Per poter estrarre il segnale modulante (in questo caso la traccia
registrata) da un’onda PWM è
necessario effettuare una media
del segnale stesso, ossia filtrare
1
MCLR
P1 / PGD
P2 / PGC
TX
RX
Vcc
GND
REC
MIC+
MICSPK
SPK
12
stesso si riduce. Delle operazioni
di filtro si occupano le reti che
fanno capo ad R18 e C3 e all’operazionale U5b, passivo il primo
e attivo il secondo. Notate che è
indispensabile anteporre al filtro
attivo U5b uno stadio passivo per
limitare la dinamica di tensione
del segnale PWM (che è, elettricamente parlando, un segnale
digitale a tutti gli effetti poiché
varia tra soli due livelli ossia 0 e
Vcc); in caso contrario, si saturerebbe senza dubbio l’ingresso
dell’operazionale.
Il filtro passivo R17/C14 è utilizzato per rimuovere eventuali
residui della frequenza portante
mediante una cella passa-basso;
infatti esiste una relazione
di proporzionalità diretta
SCHEDA TECNICA
tra duty-cycle D e valore
medio per un segnale ad
 Formato di registrazione: ADPCM 4 bit
onda rettangolare. In altre
 Durata di registrazione: 65s @ 8 ksps
parole, filtrando il segnale
 Frequenza di campionamento: 8 ksps
si sopprime la portante
 Risoluzione effettiva: 8 bit
 Ingresso analogico: microfono (40 mVppMAX)
o, se preferite, si sfrutta il
 Uscita analogica: Speaker (500 mW @ 16 Ω)
fatto che il condensatore
 Comandi: PLAY track 1, PLAY track 2, REC
verrà istantaneamente
 Funzioni: comandi e funzioni via porta seriale
caricato ad un livello di
(RS232), LED rosso e verde di segnalazione.
tensione proporzionale
alla durata di ogni singolo
impulso. Quindi, quando
dell’onda PWM. Quindi, ai capi
l’onda PWM ha un duty-cycle
di C14, ritroveremo il segnale
alto (impulsi lunghi rispetto alle
memorizzato nelle EEPROM
pause) il condensatore assume
decompresso e ricostruito; il
un livello di tensione più elevato
condensatore C19 lo preleverà
di quando, invece, il duty-cycle
e lo trasferirà all’ingresso dello
speaker driver U4, un TDA7052A
costruito da NXP Semiconductors, che è in grado di pilotare un piccolo altoparlante da
1W con un’alimentazione singola,
senza per questo impiegare grosFig. 3 - Il duty-cycle di un segnale ad onda
se ed ingombranti capacità di direttangolare è definito dal rapporto D=TON/T.
saccoppiamento. Inoltre, lo stesso
La media del segnale VPWM è proporzionale a D,
integrato
dispone di un controllo
pertanto, variando D, è possibile variare nel tempo
di
volume
esterno: variando la
il valore medio di VPWM. Per ricavare da VPMW il
tensione
sul
pin 4 è possibile
relativo valore medio è sufficiente filtrare con una
variare il guadagno di tensione
cella passa-basso e si otterrà il segnale VOUT.
entro un range di 80 dB.
L’interfacciamento con le EEPROM avviene anche in questo
caso su bus bifilare SPI e, come è
34
Dicembre 2008 / Gennaio 2009 ~ Elettronica In
Attendi TIMER0
IL FIRMWARE
Vi parleremo ora, in maniera più
ampia di quanto si è fatto fino
ad adesso, del firmware implementato nel µC; descriveremo
solamente la sequenza di operazioni effettuate durante la fase di
registrazione (poiché quella di
riproduzione è molto simile) ed
illustreremo, seppure in breve,
piccoli stratagemmi che consentono di velocizzare l’esecuzione
del programma, poiché in quest’applicazione è fondamentale
eseguire il maggior numero di
operazioni (non istruzioni!) nel
minore tempo possibile.
Faremo riferimento a concetti
espressi nella prima puntata,
quindi potrebbe risultare utile
dare un’occhiata all’articolo
corrispondente; allo stesso modo
potrebbe agevolarvi seguire il
codice sorgente.
Innanzitutto occorre precisare
che si è utilizzato un timer interno al µC (TIMER0) per scandire
con precisione la successione
delle operazioni: questo è impostato per generare un evento ogni
scadere di un intervallo pari a:
ts = 1/fs
ossia ogni volta che si debba
acquisire un campione audio.
Si è scelto di non associare al timer una routine di interrupt, ma
di andare in polling software sul
FLAG di interrupt: questo perché, scrivendo il programma in
linguaggio C, ogni volta che fosse
stato chiamato l’interrupt sareb-
Lettura ADC
be stato necessario
START nuova conversazione
eseguire parecchie
istruzioni inserite in
ENCODING
modo automatico
dal compilatore per
Aggiorna page_buffer [n]
n
la gestione dello
stack, istruzioni che
N
n>60
avrebbero sottratto
tempo all’esecuzione
del programma.
S
sel = sel <<1
sel=0b00000001
Fine memoria?
Dopo che è stata verificata la condizione
S
di START di regiS
START
sel=0b00000010
sel = sel <<1
strazione, il ciclo di
operazioni eseguite
S
durante la registraCONTROL_BYTE
sel=0b00000100
sel = sel <<1
zione è rappresentato
dal flow-chart riporS
ADDRESS_H
tato qui a lato. Il ciclo
sel=0b00001000
sel = sel <<1
principale viene attivato ad ogni istante
S
ADDRESS_L
di campionamento ts
sel=0b00010000
sel = sel <<1
tramite il TIMER0 e,
come prima operaS
DATA
sel=0b00010000
zione, viene letto
il dato convertito
N
dall’ADC. Lo stesso
Fine memoria?
viene fatto ripartire
subito dopo per una
STOP
nuova acquisizione:
sel = sel <<1
in tal modo l’ADC
S
Reset puntatori
potrà effettuare
sel=0b01000000
Usa la prossima EEPROM
la conversione in
background rispetto
all’esecuzione del
S
Interrompi registrazione
sel=0b01000000
programma, poiché il
dato gli sarà richiesto
solamente all’inizio
quindi, ogni 256 campioni vocali
del prossimo ciclo. Il campione
acquisiti verrà scritta una pagina
prelevato dall’ADC viene quindi
di EEPROM (di 128 byte).
compresso ed accodato al buffer
Fintanto che il livello dei dati nel
di memoria interno al µC denobuffer (intesi su 8 bit) è inferiore
minato page_buffer; vi ricordiamo
a 60, cioè poco meno di metà,
che nel page_buffer ogni campione
effettuate le operazioni sopra
è rappresentato su 4 bit, pertanto,
descritte il programma tornerà
nei suoi 128 byte prendono posto
all’inizio del ciclo ed aspetterà
256 campioni vocali.
l’istante esatto per effettuare una
La dimensione di 128 byte per
nuova conversione; viceversa,
il page_buffer non è stata scelta
se il numero di byte nel buffer
a caso: infatti questa è proprio
è superiore a 60, il programma
la dimensione delle pagine di
inizierà a disporre la memoria
memoria interne alle EEPROM
EEPROM opportuna per riceveche è possibile scrivere in blocco;
++
Inizializzazione EEPROM
ben visibile dallo schema elettrico, le memorie connesse sono
solamente due, ossia U2 e U3.
I pulsanti di controllo sono
collegati direttamente ai pin del
microcontrollore e vengono sfruttati i pull-up interni per forzare
lo stato logico di riposo dei pin.
Tutto il circuito necessita di
un’unica tensione d’alimentazione di 5V stabilizzati.
Flow-chart della sezione
di firmware che gestisce
il ciclo di registrazione:
oltre alla routine di
compressione dati
(ENCODING) comprende
anche la gestione della
EEPROM I²C-Bus.
{
Elettronica In ~ Dicembre 2008 / Gennaio 2009
35
Gestione
EEPROM
Le memorie utilizzate nei registratori SPC01 ed SPC02 sono
di tipo seriale con interfaccia
I2C-Bus; tale interfaccia utilizza
solamente due fili, uno per il
clock (SCL) che scandisce la
comunicazione, ed uno per i
dati veri e propri (SDA); si tratta
di un bus sincrono indirizzabile,
nel senso che le stesse linee
possono essere condivise da
più dispositivi, ognuno dei quali
è contraddistinto da un proprio
indirizzo. Le unità affacciate
al bus possono essere master
o slave: il master è quello che
decide quando iniziare una
Fig. A- Il bus I2C utilizzato nel registratore SPC01.
ze dovranno essere piccole,
altrimenti, causa le capacità
parassite delle strutture MOS
che realizzano i chip, rallenteranno la commutazione. Il
bus viaggia nominalmente fino
ad un massimo di 400 kHz
Listato 1
// +-------------I2C bus ------------+
SSPCON1 = 0b00101000;
// set MASTER, enable I2C
SSPCON2 = 0b00000000;
// idle...
SSPADD = 0x18;
// fbus = 400kHz
sessione di comunicazione
ed è normalmente uno solo;
lo slave si limita a rispondere alle richieste del master,
ovvero esegue i comandi
e riceve o trasmette i dati
richiesti. A livello elettrico tutti
i dispositivi sono connessi con
porte bidirezionali che, quando
configurate come uscite, devono essere del tipo open-drain
(pertanto sono necessarie
delle resistenze di pull-up
comuni a tutto il bus). Tanto
più sarà elevata la velocità del
bus, tanto più queste resisten-
(velocità del clock SCL) anche
se, sotto particolari condizioni,
è possibile raggiungere anche
1 MHz. Giacché la linea dati è
unica, è possibile far transitare un dato per volta ed in
modo sincrono con il segnale
di clock. Inoltre il protocollo
prevede l’invio di segnali di
acknowledge (ACK) e delle
particolari temporizzazioni
che segnalano l’inizio di una
trasmissione, il proseguimento e la fine. Fortunatamente, utilizzando gli attuali
microcontrollori, parecchie
funzioni sono praticamente trasparenti per il programmatore
e si riducono a dei semplici set
o reset di specifici FLAGS.
Vediamo ora come avviene
la lettura/scrittura di celle o
banchi di memoria nel progetto
in questione (vi consigliamo di
tenere sott’occhio i data sheet
del PIC18F2420 e della memoria 24XX1025). Innanzi tutto
occorre inizializzare la porta
MSSP (Master Synchronous
Serial Port) del PIC in modo
adeguato. La prima istruzione
setta l’uso dei pin specifici,
abilita la periferica e la configura come master; la seconda
istruzione mette la porta in condizione di IDLE mentre la terza
setta la frequenza di lavoro del
bus. A questo punto la porta è
operativa.
Per poter andare a scrivere
un dato su una delle EEPROM
presenti sul bus dovremo
eseguire delle operazioni di
lettura/scrittura dati sul bus
Listato 2
// START ----------------------------------------------SSPCON2bits.SEN = ENABLE; // START bit
while(SSPCON2bits.SEN);
// wait slave...
// set write mode -------------------------------------SSPCON2bits.ACKDT = ZERO; // rispondi con ACK
PIR1bits.SSPIF = ZERO;
SSPBUF = 0xA0 | (M << 1); // control byte,
// M = memoria da indirizzare
while(!PIR1bits.SSPIF);
//
while(SSPCON2bits.ACKSTAT);
// wait ACK
// set address to write -------------------------------PIR1bits.SSPIF = ZERO;
SSPBUF = ADR_H;
// b15 – b8
while(!PIR1bits.SSPIF);
while(SSPCON2bits.ACKSTAT);
// wait ACK
PIR1bits.SSPIF = ZERO;
SSPBUF = ADR_L;
while(!PIR1bits.SSPIF);
while(SSPCON2bits.ACKSTAT);
// b7 – b0
// wait ACK
// write data -----------------------------------------PIR1bits.SSPIF = ZERO;
SSPBUF = DATA;
// scrivi la cella
while(!PIR1bits.SSPIF);
while(SSPCON2bits.ACKSTAT);
// wait ACK
Fig. B - Comandi e dati da inviare per effettuare una
scrittura in memoria. La scrittura vera e propria inizia nel
momento in cui si presenta il segnale di STOP.
re un banco di dati. Poiché non
sarebbe possibile trasferire alla
memoria 128 byte in maniera
consecutiva senza interferire
temporalmente con l’operazione
36
// STOP -----------------------------------------------SSPCON2bits.PEN = ENABLE; // STOP bit
while(SSPCON2bits.PEN);
// wait slave…
di campionamento, il trasferimento dati è stato “splittato” in
tanti “step” gestiti da una piccola
macchina a stati: in altre parole,
ad ogni ciclo della routine di
Dicembre 2008 / Gennaio 2009 ~ Elettronica In
registrazione viene effettuato il
trasferimento di un singolo dato
(di 8 bit). Non va però dimenticato che per poter scrivere nella
EEPROM è necessario asserire
Fig. C - Comandi e dati da inviare per effettuare una lettura della memoria.
secondo quanto indicato nel
data-sheet della memoria. In
particolare, volendo scrivere
un singolo byte in una specifica locazione di memoria, è
necessario:
- inviare una segnalazione di
START;
- inviare un CONTROL BYTE
nel quale è specificato
l’integrato a cui si vuole
accedere;
- inviare due byte di indirizzo;
- inviare il byte da scrivere;
- inviare una segnalazione di
STOP.
Il control byte (c8 ÷ c0) è strutturato nel seguente modo:
i primi 4 bit c7 ÷ c4 sono
sempre fissi e sono costituiti
da una sequenza fissa di 1 e 0
alternati, il bit c3 è il 17° bit di
indirizzamento che, assieme
ai sedici bit specificati nei due
byte indirizzi, permette di indirizzare 217 celle per un totale
di 128 kbyte (1 Mbit) ossia
tutta la memoria.
I due bit c2 e c1 specificano
l’indirizzo assegnato alla EEPROM tramite i pin A0 e A1 (il
pin A2 va sempre mantenuto
a Vdd); infine, il bit c0 se resettato segnala alla memoria
la modalità lettura, viceversa indicherà la modalità di
scrittura.
Il codice che realizza tutto
questo si riduce a poche
righe grazie all’integrazione
tecnologica effettuata nel
microcontrollore (vedi Listato
2). Dall’istante in cui viene
prodotto il segnale di STOP, è
necessario attendere almeno 5 ms per lasciare alla
memoria il tempo di salvare il
dato prima di poter accedere
allo stesso integrato; è invece
possibile accedere immediatamente ad uno qualsiasi degli
altri integrati presenti sul bus.
La lettura di una cella di
memoria è leggermente più
complicata poiché è necessario specificare due control byte
per ogni cella letta: il primo
serve per scrivere nel buffer
della memoria l’indirizzo che
si vuole leggere, mentre il
secondo è necessario per far
entrare la memoria in modalità “lettura”.
Anche in questa sequenza
di comandi su bus I2C è
necessario specificare le
condizioni di START, STOP e
ACK. La condizione contrassegnata come START prima del
secondo control byte in Fig. C
è in realtà una condizione di
RESTART, poiché interviene tra
uno START dato in precedenza
ed uno STOP finale.
È possibile leggere o scrivere
più dati in sequenza senza
dover accedere ogni volta
ad ogni singola cella; per la
scrittura si procede esattamente come esposto, con una
differenza: il blocco di codice
write data andrà ripetuto tante
volte quante sono le celle da
scrivere.
La scrittura dovrà terminare
comunque sempre inviando
il comando di STOP. Facciamo presente che è possibile
scrivere in sequenza a patto
che non si sbordi dalla singola
pagina di memoria: partendo
dall’indirizzo 0x0000 la prima
pagina finirà all’indirizzo
0x007F, la seconda inizie-
prima alcuni byte di controllo e
specificare l’indirizzo cui accedere (vedere Gestione EEPROM,
in queste pagine), pertanto
anche queste operazioni sono
rà dall’indirizzo 0x0080 e
terminerà all’indirizzo 0x00FF
e così via a passi di 128 byte
per tutto lo spazio d’indirizzamento. Anche in lettura è
possibile leggere in sequenza;
analogamente a prima sarà
necessario ripetere quanto
racchiuso nel blocco read data
tante volte quante sono le celle da leggere. L’unica accortezza da adottare è che ad ogni
byte letto va asserito un ACK,
mentre al termine della lettura
dell’ultimo byte va previsto
un NACK (come nell’esempio
sopra riportato). La lettura
contigua è possibile dall’indirizzo 0x00000 all’indirizzo
0x0FFFF senza interruzioni e
da 0x10000 a 0x1FFFF.
Listato 3
// START ----------------------------------------------SSPCON2bits.SEN = ENABLE;
// START bit
while(SSPCON2bits.SEN);
// wait slave...
// set write mode -------------------------------------SSPCON2bits.ACKDT = ZERO;
// rispondi con ACK
PIR1bits.SSPIF = ZERO;
SSPBUF = 0xA0 | (M << 1);
// control byte,
// M = memoria da indirizzare
while(!PIR1bits.SSPIF);
//
while(SSPCON2bits.ACKSTAT); // wait ACK
// set address to start read --------------------------PIR1bits.SSPIF = ZERO;
SSPBUF = ADR_H;
// b15 – b8
while(!PIR1bits.SSPIF);
//
while(SSPCON2bits.ACKSTAT);// wait ACK
PIR1bits.SSPIF = ZERO;
SSPBUF = ADR_L;
// b7 – b0
while(!PIR1bits.SSPIF);
//
while(SSPCON2bits.ACKSTAT); // wait ACK
// set read mode --------------------------------------SSPCON2bits.RSEN = ENABLE; // RE-START bit
while(SSPCON2bits.RSEN);
// wait start asserted
PIR1bits.SSPIF = ZERO;
SSPBUF = 0xA1 | (M << 1);
// re-assert control byte
// in read mode
while(!PIR1bits.SSPIF);
while(SSPCON2bits.ACKSTAT); // wait ACK
SSPCON2bits.ACKDT = ONE;
// rispondi con NO-ACK
// read at address ------------------------------------PIR1bits.SSPIF = ZERO;
SSPCON2bits.RCEN = ENABLE; // enable read
SSPSTATbits.BF = ZERO;
while(SSPCON2bits.RCEN);
// aspetta completamento lettura
DATA = SSPBUF;
// leggi dato
SSPCON2bits.ACKEN = ENABLE; // assert NACK
while(SSPCON2bits.ACKEN);
// wait…
// STOP -----------------------------------------------SSPCON2bits.PEN = ENABLE;
// STOP bit
while(SSPCON2bits.PEN);
SSPCON2bits.ACKDT = ZERO;
// rispondi con ACK
state tra loro
separate ed eseguite una per
volta ad ogni ciclo della routine
principale. In pratica, dopo che
nel page_buffer è stato scritto il
sessantesimo byte, il programma
inizierà a dialogare anche con la
EEPROM, inviandole, ad ogni
ciclo della routine di registrazio-
Elettronica In ~ Dicembre 2008 / Gennaio 2009
37
[piano di MONTAGGIO]
Elenco Componenti:
R1: 27 kohm 5% (0805)
R2: 100 kohm 5% (0805)
R3, R4: 1 kohm 5% (0805)
R5, R6: 1,5 kohm 5% (0805)
R7: 10 kohm 5% (0805)
R8: Trimmer MO 10 kohm
R9: 56 kohm 5% (0805)
R10: 150 ohm 5% (0805)
R11: 22 kohm 5% (0805)
R12: 12 kohm 5% (0805)
R13, R14: 47 kohm 5% (0805)
R15, R16: 27 kohm 5% (0805)
R17: 2,2 kohm 5% (0805)
R18: 3,3 kohm 5% (0805)
R19: 27 kohm 5% (0805)
R20: 1 Mohm 5% (0805)
R21: 10 kohm 5% (0805)
R22: 27 kohm 5% (0805)
R23: 150 kohm 5% (0805)
R24÷R26: 100 kohm 5% (0805)
R27: 56 kohm 5% (0805)
C1, C2: 15 pF ceramico (0805)
C3: 4.7 nF ceramico (0805)
C4: 22 µF 6,3 VL tantalio
C5: 10 µF 6,3 VL tantalio
ne, un byte oppure un comando.
Così facendo, quando si inizierà
a riempire la seconda metà del
page_buffer, contemporaneamente
si inizierà ad inviare il primo
byte dello stesso buffer verso
la EEPROM. A tal punto, per
38
C6: 100 nF ceramico (0805)
C7: 10 µF 6,3 VL tantalio
C8: 1 nF ceramico (0805)
C9: 100 nF ceramico (0805)
C10: 100 nF ceramico (0805)
C11, C12: 2,2 nF ceramico (0805)
C13, C14: 1 nF ceramico (0805)
C15: 2,2 nF ceramico (0805)
C16: 1 nF ceramico (0805)
C17: 47 µF 6,3 VL tantalio
C18: 2,2 nF ceramico (0805)
C19÷C25: 100 nF ceramico (0805)
C26: 2,2 nF ceramico (0805)
LD1: led rosso (0805)
LD2: led verde (0805)
U1: PIC18F2420 (SOIC28)
U2, U3: 24LC1025-I/SM (SOIC8)
U4: TDA7052A (SOIC8)
U5: MCP6002 (SOIC8)
Q1: Quarzo 10 MHz (HC49/4H)
Varie:
- Strip maschio 12 poli
- circuito stampato
- circuito stampato
completare il buffer, resteranno
da acquisire 128 campioni audio
(64 byte compressi) e verso
la memoria dovranno essere
trasferiti proprio 128 byte. Ora,
trasferendo un byte ad ogni ciclo
di acquisizione AD otterremo
Dicembre 2008 / Gennaio 2009 ~ Elettronica In
che l’ultimo campione compresso
verrà aggiornato appena prima
di essere trasferito alla memoria
(ciò accadrà nello stesso ciclo
della routine di registrazione);
in pratica, l’acquisizione ed il
posizionamento dei 256 campioni
vocali nel page_buffer termina in
corrispondenza del trasferimento
verso la EEPROM del 128° byte
dello stesso buffer.
A questo punto verrà chiusa la
comunicazione con la memoria, la quale registrerà la pagina
appena trasferita; il prossimo
ciclo di routine principale
ricomincerà a riempire il buffer
partendo dall’inizio. Tale procedura continuerà fintanto che
non verrà premuto il pulsante
STOP o il µC si accorgerà che la
memoria disponibile è terminata.
Qualcuno, osservando il codice
sorgente, potrebbe domandarsi
perché la struttura della macchina a stati non è stata realizzata
utilizzando un costrutto case
ed incrementando una variabile, come sarebbe più naturale
fare, ma, piuttosto, utilizzando
una serie di if ed una variabile
inizializzata a 0x01 che ad ogni
passo viene “shiftata” di un bit.
Ebbene, il motivo è che un test
del tipo if(sel & 0b00000100) è
compilato con una sola istruzione di test sul bit b2 della variabile
sel (1 istruzione), viceversa, per
effettuare la stessa operazione un
costrutto case richiede almeno 5 o 6 istruzioni macchina. Il
fatto di shiftare la variabile sel
anziché incrementarla, permette
di effettuare sempre e solo test su
singolo bit; il prezzo da pagare è
che non si può spezzare il flusso
del programma in più di otto vie.
REALIZZAZIONE PRATICA
Per contenere le dimensioni del
modulo abbiamo optato per un
montaggio SMD, scegliendo
componenti di taglio 0805, in
modo da limitare le difficoltà che
incontrerete nel montaggio.
Vi consigliamo, una volta in
possesso del circuito stampato, di cominciare saldando il
microcontrollore U1, già programmato; utilizzate al solito una
buona dose di flussante e possibilmente dello stagno da 0,25
mm. Procedete quindi montando
tutti gli altri integrati: le memorie,
i due operazionali e l’amplificatore audio per l’altoparlante.
Montate quindi tutti i componenti passivi, facendo attenzione
ad inserirli al posto corretto, poi
montate i condensatori al tantalio,
il diodo luminoso e, per ultimo, il
quarzo SMD da 10 MHz.
Inserite quindi anche il trimmer
per la regolazione del volume
e, nel caso vogliate utilizzarli,
saldate i pin strip alle relative
piazzole sullo stampato.
Il circuito a questo punto è
pronto e, non necessitando di
taratura, se non avete commesso
errori sarà anche già funzionante; dovrete solamente collegare
ai relativi pin un microfono, un
altoparlante, i pulsanti e alimentare il tutto come schematizzato
in Fig. 4.
I pin 4 (TX) e 5 (RX) andranno
utilizzati nel caso vogliate sfrut-
Fig. 4 - Schema
di collegamento
del modulo
SPC02: oltre
all’alimentazione
stabilizzata
di 5V, occorre
collegare una
coppia di pulsanti
P1 e P2 per il
PLAY delle tracce,
un pulsante per
la registrazione
REC, un microfono
e un piccolo
altoparlante.
Dopo vinile
e CD, ecco
l’album su SD
Sono passati 25 anni da quando,
con meraviglia e stupore, abbiamo
ascoltato per la prima volta la musica
uscire da quei dischetti lucenti che
un po’ ci portavano ai film di fantascienza; eppure l’era del compact
disc sembra stia per finire. Infatti
SanDisk, leader nel settore delle SDCard ha annunciato la distribuzione
delle Slot Music, album musicali in
formato mp3 memorizzati in memory
card di tipo microSD (quelle utilizzate
anche nei cellulari) che saranno in
vendita negli Stati Uniti forse già a
Natale, anche se c’è un precedente
europeo: l’album e2 (Eros al quadrato) di Eros Ramazzotti è disponibile
come SD Card da 1 giga precacaricata su cellulari abilitati. La qualità
sarà migliore di quella di un CD, dato
che è prevista una codifica a 320
kb/s contro i 44,1 kb/s del CD, che
con il quadruplo sovracampionamento (four time oversampling) arrivano
a 160. L’idea di proporre gli album
musicali su memory card nasce da
una considerazione: ormai moltissime persone usano i lettori mp3 per
ascoltare musica in cuffia, perché
permettono di beneficiare dell’elevata capienza dei supporti digitali, che
consente di ascoltare ore di musica
con dispositivi di dimensioni paragonabili a quelle di un accendino: infatti
in mp3 un minuto di brano consuma
dirca 1 MB di memoria. Per ascoltare
la musica su un mp3, chi compera
un disco deve leggerlo, convertirlo in
mp3 e scaricare i file corrispondenti
nella memoria del lettore o su una
memory card; qualcuno ha dunque
pensato di far risparmiare questa
fatica e, proprio per questo è previsto
che le Slot Music siano prive di Drm,
i lucchetti digitali che impediscono
la copia delle canzoni scaricate da
alcuni store come iTunes. Infatti oggi
come oggi hanno poco senso, perché
esistono fior di programmi per copiare anche i dischi protetti. Al momento
le Slot Music sono un’alternativa ai
CD: verranno offerte da quattro grandi produttori come Sony, Warner, Emi
e Universal. Grazie a piccoli adattatori USB, potranno essere lette anche
su un normale PC o su lettori che
dispongono della sola USB. Il prezzo
di vendita negli USA è stimato sia tra
i 7 e i 10 dollari; la capacità sarà di
almeno 2 GB, considerato che per un
album della durata di un’ora serve
una capacità di almeno 1,2 Gb.
tare le funzioni controllate da PC
per la gestione della memoria
del registratore (vedi il relativo
paragrafo).
UTILIZZO DEL REGISTRATORE
Come già accennato, questo modello di registratore non dispone
volutamente di tutte le funzioni
del modulo più grande; quindi
non potremo variare la frequenza
di campionamento, ripetere le
tracce, saltare da una all’altra e
così via. Al contrario, avremo
la possibilità di registrare solamente due messaggi di durata
qualsiasi.
Elettronica In ~ Dicembre 2008 / Gennaio 2009
39
Fig. 7
Fig. 5 - Alla pressione del pulsante REC
si entrerà in modalità registrazione ma la
memorizzazione del messaggio avverrà
solamente alla pressione di P1 o P2.
Per registrare il primo messaggio
è sufficiente premere il pulsante
REC: il led rosso si accenderà
segnalando che è in corso una
registrazione e, contemporaneamente, lampeggerà il led verde,
indicando che il registratore è in
attesa del segnale d’inizio registrazione. Tale segnale viene dato
premendo uno dei pulsanti P1 o
P2: da quell’istante, tutto ciò che
verrà captato dal microfono sarà
memorizzato. Consigliamo di
parlare ad una distanza compresa tra 50 cm e 1m dal microfono,
con voce ferma. Per terminare la
registrazione dovrete premere
nuovamente REC; allora i led si
spegneranno. I pulsanti P1 e P2,
Fig. 6 - La riproduzione avviene
semplicemente premendo il pulsante
relativo alla traccia da riprodurre (P1 per
la prima, P2 per la seconda). Gli stessi
pulsanti sono utilizzati per mettere la
riproduzione in pausa.
durante la registrazione, servono
anche per inserire una pausa ossia, premendone uno, la registrazione verrà sospesa e riprenderà
ad una nuova pressione di uno
degli stessi. A questo punto, se
premerete il pulsante P1 potrete
ascoltare quanto registrato nella
posizione 1: la riproduzione è
indicata dall’accensione del solo
led verde. Durante la riproduzione una pressione di un o dei
due pulsanti di PLAY (P1 o P2)
metterà il registratore in pausa;
per riprendere la traccia sarà sufficiente ripremere uno tra P1 o P2.
Per registrare anche la seconda
traccia, sarà sufficiente ripetere le
stesse operazioni appena descritte per la registrazione della prima: sarà il micro che si occuperà
di accodare la nuova traccia a
quella già esistente.
Nel caso in cui abbiate registrato
entrambi i brani disponibili e
tentiate di registrarne un altro,
il registratore automaticamente
cancellerà tutta la memoria e
inizierà la registrazione di una
nuova traccia #1. Il potenziometro R8 vi servirà per regolare il
volume durante la riproduzione.
FUNZIONI GESTITE
DAL COMPUTER
In questa sezione descriveremo
come utilizzare il programma per
PC espressamente realizzato per
leggere e scrivere nella memoria dei due moduli registratori
40
Dicembre 2008 / Gennaio 2009 ~ Elettronica In
SPC01 ed SPC02, con la premessa
che tutte quante le procedure
che andremo a descrivere sono
identiche per entrambi i moduli.
Il programma per PC consente,
tramite porta seriale, di leggere
e scrivere il contenuto dell’intera
memoria del registratore: questa
funzione risulta utile ad esempio
per creare una sorta di libreria
di frasi per il vostro modulo
registratore, nella quale potrete
scegliere di volta in volta quale
utilizzare.
Un’altra possibilità è quella di
creare una serie di moduli che
riproducano tutti la stessa frase,
senza dover ripetere per ogni registratore le stesse frasi. In questa
evenienza, una volta che avrete
registrato tutto quanto vi occorre
su uno dei moduli, potrete leggere e salvare il contenuto di tutta
la memoria in un file su PC; fatto
ciò potrete copiare l’intero file
nella memoria ancora non programmata di tutti gli altri moduli
che vorrete, per così dire, clonare.
Ma vediamo subito come procedere: dopo aver alimentato e
connesso il modulo al PC tramite
una porta seriale, la prima cosa
da fare sarà quella di installare
il software che potrete scaricare
dal nostro sito. La procedura
d’installazione automatica vi
guiderà passo-passo. Al termine
dell’installazione potrete cercare
il programma Audio Transfer dal
menu Programmi di Windows e
Fig. 10
Fig. 8
cliccare sul suo nome o icona (Fig.
7). Immediatamente vi comparirà
una finestra come quella illustrata nella Fig. 8.
Selezionate quindi la porta COM
alla quale avete connesso il registratore ed impostate la velocità
di comunicazione a 115,2 kbaud;
cliccate, infine, sul bottone “connetti”. Se la porta selezionata è
corretta, verranno sbloccati tutti
gli altri pulsanti, altrimenti un
messaggio di errore vi segnalerà
di provare con un’altra porta.
Nel caso vogliate uscire dal programma, vi consigliamo sempre
di disconnettere prima il dispositivo tramite l’apposito pulsante. Dopo che avrete aperto la
porta COM, potrete fare clic sul
pulsante Richiesta ID Modulo: tale
comando vi consentirà di sapere
che tipo di modulo avete collegato al PC (se SPC01 o SPC02) e
il numero di memorie installate
nel modulo stesso (Fig. 9). Lo
stesso comando serve allo stesso
tempo anche per controllare che
la comunicazione seriale funzioni
correttamente.
Tramite i due pulsanti posti sulla
destra della finestra di dialogo,
potrete scegliere se cancellare
completamente la memoria del
registratore oppure solamente
l’ultima traccia registrata. In
entrambi i casi un messaggio vi
avviserà della corretta esecuzione dell’operazione; durante l’esecuzione del comando i led sulla
file, fate clic sul pulsante Salva: immediatamente inizierà il
trasferimento dei dati verso il
PC. Durante il trasferimento (che
durerà grosso-modo una quindicina di secondi per ogni memoria
installata) vedrete il led verde
sempre acceso, mentre quello
rosso lampeggerà ad ogni blocco
di dati inviato. Sull’interfaccia
grafica, una barra d’avanzamento vi indicherà visivamente
la percentuale di trasmissione
completata (Fig. 11).
Al termine dell’operazione verrà
visualizzato il messaggio “Lettura OK”. La scrittura in memoria
di un file precedentemente salvato si effettua in modo analogo:
Fig. 9
scheda lampeggeranno contemporaneamente. Tenete presente
che, una volta che cancellerete
una o più tracce dalla memoria,
queste non potranno più essere
recuperate. Infine, impartendo
ripetutamente il comando Cancellazione ultima traccia, potrete
cancellare anche in questo modo
tutta la memoria, procedendo
a ritroso. Il pulsante Lettura
memoria consentirà di leggere
tutto il contenuto delle memorie
montate a bordo del registratore;
premendolo comparirà una finestra di dialogo che vi permetterà
di salvare in una cartella e con
un nome file a scelta il contenuto
della memoria (Fig.10).
Una volta assegnato un nome al
Elettronica In ~ Dicembre 2008 / Gennaio 2009
Fig. 11
41
L’interfaccia seriale
Per poter utilizzare le funzioni di controllo da PC dei registratori SPC01 ed SPC02, è
necessario che utilizziate la
porta seriale. Dato che i pin
RX e TX della seriale del modulo non sono direttamente
Convertitore
di livelli RS232
compatibili con i segnali
delle porte standard del PC
(sono a livello TTL, mentre
il computer dialoga a livello
RS232) dovete impiegare
un’apposita unità di conversione. Potrete scegliere se
utilizzare una porta seriale
RS232 oppure una USB: nel
primo caso dovrete impiegare un semplice convertitore
di livello come il classico
MAX232, mentre volendo
utilizzare una porta USB
sarà necessario dotarsi di
una scheda
d’interfaccia
un po’ più
complessa
basata, per
esempio, sul
chip FTDI
FT232R. Gli
schemi elettrici li potete
trovare nelle
figure qui di
seguito; tenete presente
che i pin
contrassegnati con RX e
TX andranno
collegati direttamente con
le controparti presenti sulle
schede SPC01 o SPC02.
Allo stesso modo andranno collegati anche i fili per
l’alimentazione, che potrete
prelevare dalla scheda
registratore.
Convertitore seriale - USB
Fig. 12
punto, facendo clic col
mouse sul pulsante Apri,
inizierà il download del
file nella memoria del
registratore: anche in
questo caso una barra
di stato indicherà il progresso dell’operazione,
esattamente come per la
lettura e, contemporaneamente, sul registratore vedrete il led rosso
sempre acceso mentre
quello verde lampeggerà in corrispondenza di
ogni blocco di dati rice-
vuto. Concludendo, vogliamo precisare che file
letti da un registratore
(sia questo un SPC01 o
SPC02) con due memorie non sono utilizzabili
con un registratore con
tre o quattro memorie
e viceversa; inoltre, se
tenterete di scrivere un
file con più di due tracce
su un modulo SPC02, in
fase di riproduzione non
riuscirete ad accedere
alle tracce successive

alla seconda.
per il MATERIALE
in primo luogo dovrete
fare clic sul solito pulsante Scrittura memoria
ed immediatamente
vi comparirà un’altra
42
finestra di selezione,
dove dovrete scegliere
uno tra i file .mbf che
avrete salvato in precedenza (Fig. 12). A questo
Dicembre 2008 / Gennaio 2009 ~ Elettronica In
Il modulo vocale SPC02 è disponibile già montato e collaudato al prezzo di 28,00 Euro. Il circuito comprende tutti i componenti e le due memorie da 1 Mbit; non sono
compresi, invece, i pulsanti, l’altoparlante ed il microfono.
Ricordiamo che la versione base del modulo SPC01 descritto nel fascicolo precedente è disponibile al prezzo di
34,00 Euro; la relativa demoboard (SPC-DK) costa invece
22,00 Euro. Il software di gestione di entrambi i moduli
- descritto in questo numero - può essere scaricato gratuitamente dal sito della rivista (www.elettronicain.it). I
prezzi si intendono IVA della compresa.
Il materiale va richiesto a:
Futura Elettronica, Via Adige 11, 21013 Gallarate (VA)
Tel: 0331-799775 • Fax: 0331-792287 - www.futurashop.it
Scarica