Un insolito MP3 player con PIC12F1840

Lettore mp3 fai da te con PIC12F1840

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

6 Comments

  1. Leopoldo 23 agosto 2012
  2. Emanuele 19 novembre 2011
  3. slovati 19 novembre 2011
  4. Emanuele 19 novembre 2011
  5. linus 19 novembre 2011
  6. Fabrizio87 22 novembre 2011

Leave a Reply