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