
Un giovane ragazzo russo trasferitosi in America, ha realizzato un insolito lettore MP3, molto scarno che sembra abbia avuto un certo seguito in chi cercava di realizzare lettori MP3 a basso costo.
L’autore del progetto, che ha un sito che porta il suo nome, ovvero Dmitry Grinberg, ha creato un lettore audio in grado di riprodurre un suono di alta qualità utilizzando nient'altro che un singolo chip e una scheda SD (Secure Digital) per l'archiviazione dei dati.
Il microcontrollore che è stato scelto è il PIC12F1840. Questo è stato scelto per la sua frequenza di clock che arriva sino a 32 MHz. Infatti dal datasheet possiamo vedere quale sia il valore massimo di clock interno. Questa scelta ha fatto si di limitare ulteriormente i componenti esterni non dovendo utilizzare né quarzo con i relativi condensatori, né risuonatori. Come sappiamo, i PIC della Microchip eseguono una istruzione ogni quattro cicli di clock con prestazioni pari a 8 MIPS. Inoltre, vi è un secondo motivo di questa scelta, ovvero il modulo hardware SPI (Serial Peripheral Interface Bus) ivi contenuto in questo PIC, sia per risparmiare spazio e componenti, ma anche per avere una adeguata esecuzione di un file, visto che si tratta di riprodurre un brano musicale. Il disegno di circuito è quello che si vede in foto, che viene spiegato dall’autore così. In una delle porte di uscita (o settata ad uscita) viene riprodotta una forma d’onda modulata (PWM) che viene amplificata da un Mosfet, mentre la scheda SD viene interfacciata tramite lo SPI del microcontrollore, che comunica con esso. Un altro Mosfet viene utilizzato per fornire energia sia alla scheda SD che al microcontrollore, così da poter utilizzare una tensione di alimentazione del circuito molto bassa, facendo si che i consumi si aggirino nell’ordine dei nanoWatt. Il microcontrollore è stato anche leggermente overcloccato utilizzando il registro OSCTUNE a 33MHz.
Il driver della scheda SD (realizzato dall’autore) riesce a supportare le schede SD/MMC/ SDHC/MMC/HS-MMC/miniSD/microSD/TransFlash e la maggior parte di schede di questo tipo.
La scheda viene inizializzata alla frequenza di 375KHz (come da specifiche), e poi settata per comunicare i dati attraverso il bus (SPI) ad una velocità di lettura/scrittura pari a 8MHz .
Questo driver è particolarmente studiato per comunicare con la scheda SD, poiché deve saper attendere la fine del trasferimento di un blocco di dati, prima che inizi ad inviare nuovi dati, ossia poiché vengono trasferiti 512 byte alla volta per ogni settore si deve necessariamente attendere la fine del trasferimento prima che inizi l’invio del blocco del settore successivo, altrimenti l’operazione di trasferimento non sarebbe corretta. In merito, si può approfondire l’argomento su:
http://www.dizionarioinformatico.com/cgi-lib/diz.cgi?frame&key=hd.
Poiché vi è un certo tempo tra la fine del flusso di un settore e l'inizio dell'altro, viene utilizzato il buffer per immagazzinare i dati audio. Il buffer (memoria tampone) è circolare ovvero immagazzina i dati provenienti dalla SD e li rilascia per eseguire la musica. Quando è pieno, aspetta che si svuoti per riprendere il processo di scrittura.
Anche la realizzazione del driver del filesystem (uFAT) è stata realizzata dall’autore, ed è una piccola applicazione che supporta solo il FAT16 (file system primario), ovvero solo nomi di file composto da 8 caratteri e un'estensione di 3, e solo directory principale. Quindi, si possono numerare i nomi dei file.
L’utilizzo del dispositivo è abbastanza semplice:
1. Accensione tramite SD Card;
2. Inizializzazione scheda SD;
3. Elenco dei file nella directory principale;
4. Contaeggio del numero dei file di tipo WAV (non nascosti);
5. Ciclo:
1. Seleziona un file a caso;
2. Utilizzo del uFAT per trovare il file (la frammentazione è correttamente gestita);
3. Conserva i settori nella memoria (sectorList);
4. Inizia la riproduzione audio;
5. Riproduce con i dati letti nei settori in ogni punto alla fine;
6. Spegnimento automatico;
7. Spegnimento del circuito per un determinato tempo (30 sec) (sleep);
8. Accensione SD Card;
9. Riinizzializzazione della scheda.
Risorse del microcontrollore utilizzate:
Clocks :33MHz quando suona, 500KHz quando decide se spegnersi o meno;
WDT: Utilizzato per svegliarsi dal sonno
Reference Clock Module: non utilizzati
Interrupt: Timer0 overflow interrupt utilizzato, altri inutilizzati
Dati EEPROM: 4 byte utilizzati, altri inutilizzati
Programma Flash: Codice utilizza il 40%, sectorList utilizza il 45%
GPIO: 3 utilizzati per SPI, 1 usato per l'uscita, 1 utilizzato per controllare la potenza della scheda SD. Inutilizzato RA3.
Fixed VoltageReference: non utilizzato
Temperature indicator: non utilizzato
ADC: non utilizzato
DAC: non utilizzato
Latch SR: non utilizzato
Comparatore: non utilizzato
Timer0: Utilizzato per la temporizzazione di riproduzione del suono, overflow 22050 volte al secondo, con valore di reload corretto
Timer1: non utilizzato
Timer2: Utilizzato per la temporizzazione del modulo PWM
Data Signal Modulator: non utilizzato
PWM: usato per produrre il suono in uscita
MSSP: utilizzato in modalità SPI master per comunicare con la scheda SD
EUSART: non utilizzati
Capacitative Sensing Module: non utilizzato
Come si può vedere nel video:
il tutto funziona secondo le aspettative.
Infine, per rispondere ad alcuni lettori:
- I file audio file WAV non devono essere compressi.
- La scheda SD deve essere formattata FAT16 dal driver uFAT quindi non supporta FAT12 o FAT32.
In allegato si forniscono:
Il file HEX per il PIC12F1840: [http://dmitry.co/images/picSound.hex].
Il Sorgente [http://dmitry.co/images/SingleChipPlayer.zip].
Datasheet 12F1840: http://ww1.microchip.com/downloads/en/DeviceDoc/41441B.pdf
Potete sempre scrivere all’autore tramite email, ecco il link al lettore MP3 con Picmicro
Altre letture consigliate:
Lettore MP3 fai a te
Un lettore mp3 super semplice
FORUM:
Inserire file MP3 o WAV in un PIC

Un altro esempio di applicazione della memoria SD e della FAT16 e dato dal progetto FTPmicro
Ecco gli esempi per la SD memory e la FAT16
Confesso che dopo aver letto il titolo di questo articolo ero un pò scettico: un lettore MP3 con solo un PIC? Dopo aver letto l’intero post le idee sono più chiare: il lettore gestisce in realtà file WAV, non MP3. Il formato WAV (se non ricordo male introdotto dalla Microsoft) viene solitamente utilizzato nel formato senza compressione, con frequenza di campionamento a scelta di chi produce il file audio (già con 8kHz si ha un buon segnale) e ampiezza dei campioni a 8 o 16 bit. Essendo non compresso, “basta” leggere i campioni e riprodurli mantenendo il flusso di riproduzione regolare e consistente con la frequenza di campionamento utilizzata.
Il formato MP3 invece, essendo compresso, richiede un’elaborazione non indifferente, realizzata da appositi chip di decodifica hardware (si può anche fare via software ma bisogna avere un signor microprocessore..).
Molto interessante l’aspetto legato al file system – l’autore deve avere fatto un ottimo lavoro per gestire una FAT16 riducendo al minimo l’occupazioje di memoria RAM.
Si, in realtà non è un MP3 player ma un FileAudio Player. Non ho modificato il titolo originale (Linus poi dirà la sua) perchè ormai MP3 Player è diventato di comune uso, come una volta per il walkman sony e poi (ma soprattutto) perche la vera sfida “insolita” sarebbe riuscire a decodificare gli mp3 nel picmicro.
Non credo sia possibile con i pic ad 8bit (a meno di salti mortali 🙂
ma per i dsPic (http://www.pic24.ru/doku.php/en/mp3_dspic/ref/intro)
ed i PIC32 (http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=2680&dDocName=en554171) esistono già le librerie.
Ad esempio il PIC32MX110F016B è disponibile anche in QFN28 cone delle dimensioni 6x6mm
oppure i dsPIC si trovano anche in package abbastanza contenuti, ma anche un porting della decofica MP3 è pensabile su un PIC24F04KA220 in package TSSOP14 e costo di produzione = 1$ (non avendo funzionalità dsp si dovrànno ridurre un po le prestazioni audio ma dimensioni e costi sono interessanti)
Puoi cambiare tranquillamente il titolo, è ovvio che non legge i file in formato MP3 che sono più compressi dei normali file wav, ma essendo semplice la conversione da MP3 a Wav e viceversa, e giustamente, come dici tu, ormai il termine MP3 è diventato di uso comune nell’intendere un lettore di file audio. La sfida è veramente ardua, vista la decodifica che dovrebbero fare che credo sia impossibile visto anche l’impegno di risorse del PIC, ma a mio avviso è un progetto che vale la pena attenzionare per la sua semplicità e per le soluzioni proposte, dove c’è più un lavoro sul firmware che sulla realizzazione del circuito.
È un ottimo articolo, spesso ne parliamo tra di noi sia sul fondo sia sugli altri articoli metodi che permettono di ascoltare musica con un semplice microcontrollori nella fattispecie il più spesso PIC.
Chiaramente visto il picco usato è già un miracolo ingegneristico di poter leggere WAV.
Sicuramente fra qualche anno visto l’incremento naturale della tecnologia dei microcontrollori sarà anche possibile decodifica in Real time dei brani MP3.
L’unica questione mia è sapere se microcontrollori anche loro seguono la Legge di Moore,
“Le prestazioni dei processori, e il numero di transistor ad esso relativo, raddoppiano ogni 18 mesi”,
Basta pensare è stato integrato sia il supporto alle porte USB o Ethernet che fino a 4-5 anni fa non esisteva sui microcontrollori
che mosfet servono per questo circuito?