EOS

Audio facile con il SOMO-14D

Riprodurre file audio non è mai stato così facile con il SOMO-14D. Dotare il proprio sistema embedded di funzionalità audio può spesso rappresentare un’interessante possibilità. Non sempre tuttavia, soprattutto nel caso delle soluzioni più semplici ed economiche, il microcontrollore a bordo dispone delle periferiche necessarie per la memorizzazione e la riproduzione dei contenuti audio. In questo caso può risultare utile impiegare dei moduli standard di espansione. Uno di questi è il SOMO-14D, commercializzato dalla 4D System.

Il dispositivo è ideale per applicazioni a basso costo nel settore, ad esempio, dell’automazione domestica, dei sistemi di allarme o dei navigatori GPS o più semplicemente nei dispositivi di apprendimento e nei giocattoli per bambini. Il modulo si presenta con un fattore di forma DIP a 14 pin, di dimensioni 18.3 x 20.8 mm. Supporta file audio nel formato .ad4 che utilizza un codec ADPCM con 4 bit per campione e frequenza di campionamento compresa tra 6 e 36 KHz. 4D System distribuisce una utility software per PC che consente di convertire in tale formato i propri file audio di tipo wav e MP3. Il SOMO-14D dispone di un’uscita audio con controllo PWM a 16 bit per la connessione ad un amplificatore esterno e di due uscite alternative che possono, invece, essere direttamente connesse ad uno speaker da 32 Ohm/0,25 W (figura 1).

Figura 1: il player audio SOMO-14D.

Figura 1: il player audio SOMO-14D.

Integra un controller per carte microSD per la memorizzazione dei file audio. Sono supportati dispositivi di capacità fino  a 2 GByte formattati con file system FAT16; il SOMO-14D riesce a gestisce fino a 512 file memorizzati sulla scheda. Sebbene non espressamente dichiarato dal costruttore, dai post degli utenti presenti sul forum della 4D System, sembra che non tutte le memorie SD siano supportate correttamente. Il SOMO-14D richiede una singola tensione di alimentazione compresa tra 2.7V e 3.6V, con un assorbimento di corrente di soli 8 µA in modalità idle. La figura 2 mostra alcuni degli schemi di alimentazione suggeriti dal costruttore nelle più semplici applicazioni.

Figura 2: alimentazione del SOMO-14D.

Figura 2: alimentazione del SOMO-14D.

Anche se non espressamente indicato, si ricordi sempre di prevedere dei condensatori di filtro sui pin di alimentazione del modulo, i valori consigliati sono tipicamente di 220 µF e 0.1 µF. Questo consente di ridurre il rumore indotto sull’alimentazione che influisce negativamente sulla qualità del segnale audio riprodotto. Si tenga presente, poi, che alcuni utenti hanno segnalato difficoltà di funzionamento con una singola batteria o, comunque, per tensioni inferiori a 3 V. Lo stesso schema mostrato in figura 2 e che mostra come derivare la tensione a 3.3V da una 5V mediante due diodi rettificatori, è opportuno soltanto nelle applicazioni più semplici.

Figura 3: amplificare l’uscita del SOMO- 14D con l’LM386.

Figura 3: amplificare l’uscita del SOMO-14D con l’LM386.

Infatti, in questa configurazione, la tensione derivata dipende significativamente dalla corrente assorbita, con il rischio di superare i limiti di funzionamento del modulo. Qualora si decida di adottare, comunque, tale schema, è opportuno aggiungere una resistenza verso massa a valle del secondo diodo per limitare la massima tensione vista dal modulo, al fine di evitare di bruciare il dispositivo a seguito di sovratensione. Una possibile alternativa allo schema con diodi rettificatori, può essere quella di utilizzare un diodo Zener per regolare la tensione. Considerati i costi sempre più bassi e le dimensioni sempre più ridotte, la soluzione da preferire dovrebbe, comunque, essere quella di adottare un regolare lineare. Come detto in precedenza, il SOMO-14D dispone di un’uscita per un amplificatore audio esterno, nel caso il cui non sia possibile pilotare direttamente lo speaker con le uscite dedicate. Un buon amplificatore utilizzabile per questo scopo è, ad esempio, l’LM386 di National. Il dispositivo richiede una sola tensione di alimentazione compresa tra 4 e 12 V e ha un assorbimento di corrente di soli 4 mA, rendendolo ideale per applicazioni con alimentazione a batteria. La potenza erogata in uscita è fino a 1 W. Disponibile in package MSOP ad 8 pin, ha un guadagno di base di 20 (figura 3a) che può essere aumentato fino a 200 (figura 3b) mediante resistori esterni; ciò è utile, soprattutto, per compensare eventuali risposte inadeguata dello speaker ai toni bassi. La distorsione introdotta è dello 0,2% con amplificazione base e con un carico di 80 Ohm. Il SOMO-14D presenta due diverse modalità operative di controllo: KEY-MODE e SERIAL_MODE. In modalità KEY-MODE è controllabile direttamente mediante i pin dedicati Play/Pause, Previous e Next. Il primo controlla la riproduzione del file correntemente indirizzato sulla memoria, mentre gli altri due selezionano il file precedente o successivo della lista. Nella modalità KEY-MODE può, quindi, facilmente essere realizzato un lettore audio che utilizzi soltanto la batteria di alimentazione, il SOMO-14D e dei pulsanti connessi ai segnali di controllo. Tuttavia, se si vuole regolare il volume dell’audio riprodotto, è necessario utilizzare l’uscita dedicata connessa all’amplificatore esterno (come descritto in precedenza) e, quindi, impiegare un potenziometro per controllarne il guadagno. Nella modalità SERIAL-MODE, invece, il SOMO-14D è controllato mediante interfaccia 2-Wire. Le porte dell’interfaccia sono in standard LVCMOS a 3.3V ma possono essere rese compatibile con segnali a 5 V adottando dei resistori serie (di valore compreso tra 100 e 470 Ohm) sulle linee dato e clock. Qualora il microcontrollore utilizzato nella propria applicazione non disponga di interfaccia a due fili, questa può tranquillamente essere emulata mediante bit-banging su una porta di I/O. Il protocollo di configurazione del SOMO-14D, del resto, è assolutamente banale. Tutti i comandi hanno lunghezza 2 byte e non prevedono alcun campo dati. Se il codice esadecimale è compreso tra 0x0000 e 0x01FF, si tratta di un comando di selezione del file i-mo in memoria. I codici da 0xFFF0 a 0xFFF7 consentono, invece, di impostare fino ad 8 diversi livelli di volume, in ordine crescente. Il comando di Play/Pause è codificato mediante il codice 0xFFFE mentre quello di Stop (che forza il dispositivo in modalità idle) è 0xFFFF. Un semplice esempio che mostra come sia possibile comandare il SOMO-14D mediante, come detto, bit-banging su una porta di I/O è riportato nel listato 1.

/*
SOMO 14D AVR GCC example
/*
void sendCommand(short command) {
// Start sending
PORTB &= ~( 1<<DTA );
PORTB |= (1 << CLK );
_delay_ms(300);
PORTB &= ~( 1<<CLK );                                      // CLK low
_delay_ms(2);
for (uint8_t i=1; i<=16; i++) {
PORTB &= ~( 1<<DTA );                                    // Data low
if (command & 0x8000) {                                // check MSB and if 1 put DTA high
PORTB |= (1 << DTA );
}
else PORTB &= ~( 1<<DTA );
_delay_us(100);
PORTB &= ~( 1<< CLK );
_delay_us(100);
PORTB |= (1 << CLK );
command = command * 2;
_delay_us(100);
}
PORTB |= (1 << CLK );
_delay_ms(2);
Listato 1

Scrivi un commento

EOS