Lettore MP3 con PIC versione 2 PDF Print E-mail
User Rating: / 9
PoorBest 
There are no translations available.

Descrizione del lettore mp3 versione 2, scritto in linguaggio C in ambiente MPLAB IDE.

 

 

Per conoscere i dettagli sulla costruzione del primo lettore MP3 e del suo funzionamento visitate MP3 v1.

Il passaggio dalla versione 1 alla versione 2 del lettore MP3 è nata con l'esigenza di dover aggirare alcuni BUG presenti nelle librerie della MikroC. La scelta di usare il MikroC e non uno standar C, dipendeva dalla possibilità di poter gestire facilmente una MMC formattata con file-system FAT16, i file-system di quotidiano utilizzo in ambiente Windows, tutto tramire delle funzioni software semplici ed intuitive, ciò avrebbe evitato un pesante lavoro di "porting" delle librerie per la gestione del file-sytem di tipo FAT. Il problema riscontrato con l'uso del MikroC è che queste librerie avevano/hanno un bug nativo che ne limitava l'indirizzamento ai primi byte della MMC implicando la riproduzione corretta dei soli primi file MP3. Essendo proprietarie il produttore si riserva la possibilità di rilasciare il codice sorgente e quindi in ogni modo era impossibile correggere tali errori. Da queste esigenze nacque l'idea di relaizzare un player MP3 con più funzionalità basato su codice C che sfruttasse delle librerie open-source per la gestione dei file-system di tipo FAT32, FAT16 e FAT12.

I miglioramenti hardware introdotti con la versione 2, sono stati la sostituzione del microcontrollore con uno appartenete alla nuova famiglia a 16 bit appena uscita sul mercato 24H, capace lavorare ad 80Mhz, e quindi elminare i fastidiosi singhiozzi durante l'aggiornamento dei pulsanti premuti, inoltre l'aggiunta di un display GCLCD cioè Grafic-Color-LCD, di un RTC RealTimeClock, di uno slot per microSD e di una comodo mouse-roller.

L'intero progetto può essere consultato scaricandolo da questo link, il file zip contiene il codice sorgente del programma creato fin ora, e tutto l'occorente per avviare il progetto in ambiente MPLAB IDE.

Purtroppo il progetto non ha subito miglioramenti da molto tempo, quindi viene proposta una delle prime versioni realizzate, oltretutto anche l'hardware non è mai stato realizzato e come si può vedere dalle immagini, il player è rimasto solo in forma di prototipo, sfruttando parte dell'MP3 precedente e parte di circuiti di prova relaizzati per sperimentare i nuovi PIC 24H.

Questo lettore MP3 rispetto al precedente inizia ad essere più complesso anche lo stile di scrittura del programma viene influenzato dalle nuove esperienze acquisite, sarenno inoltre integrati pezzi di codice o librerie con licenza GNU o GPL adattandoli alle esigenze dei PIC per sfruttarne tutte le potenzialità

Per comprendere il funzionamento delle diverse parti consiglio di scaricare l'intero progetto e di tenerlo sotto mano, in modo da avere un rapido riscontro tra quanto spiegato di seguito e quanto presente nei sorgenti.

Il progetto è articolato in sette file sorgenti, principalmente scritti in C e solo uno in Assembler, e dai rispettivi header di intestazione i file .h, l'elenco completo dei file è:

 

Sorgenti: main.c, ff.c, diskio.c, pcf8833.c, vs1011.c, utility.c, e delay.s

Header: icona.h, ff.h, diskio.h, pcf8833.h, vs1011.h, utility.h, e delay.h

 

Descrizione generale del funzionameto.

 

Come facilmente si sarà intuito il file main.c contiene il main del programma, avviato, il main si preoccupa di inizzializzare il PIC, il decoder, l'LCD ed infine la MMC connessa, dopo il messaggio di Welcome sscritto sul display, il main avvia in automatico il riconoscimento dei file musicali con estenzione .mp3, riproducendoli nell'ordine in cui si trovano sulla MMC, al termine della riproduzione di tutto il repertorio, stampa sul display il contenuto della memoria come se fosse un comando Unix "ls" ricorsivo. Questo funzionamente è dovuto alle fasi di debug, che avrebbero preceduto la release finale, permettendo di controllare il perfetto funzionamento della MMC.

 

Nel dettaglio la fase di inizializzaizone.

 

L'inizializzazione del PIC avviene per mezzo della funzione initialize_pic() che provvede a settare l'oscillatore alla massima frequenza e configurare i pin con l'IO desiderato, terminata questa fase si può procedere ad inizializzare tutto ciò che è collegato esternamente al PIC, la prima periferica ad essere controllate è il decoder VS1011, tramite la funzione inizialize_vs1011(&volume), è utile inizializzare il DSP prima di tutto in quanto l'utente potrebbe avere già appoggiato le cuffiette alle orecchie ed è quindi opportuno assicurare che non ci siano rumori fastidiosi o doloranti, la funzione si preoccupa anche di impostare il volume ad un livello non troppo alto, terminata la fase con il DSP, è il turno dell'LCD chiamato tramite InitLcd(), la funzione semplicemente si preoccupa di avviare l'LCD tramite sequenza di reset e porlo in attesa di ricezione comandi. Rimane solo da controllare la presenza della MMC ed avviare la lettura del file system, questa operazione viene svolta da f_mount(0, &fs), che ritorna un codice di errore utile per riconoscere malfunzionamenti.

Senza entrare nel dettaglio la gestione del file system avviene per mezzo di librerie ben scritte rilasciate pubblicamente, questa è anche la parte più complessa che il PIC deve affrontare, sommariamente permettono il riconoscimento e l'utilizzo del FAT12, FAT16 e FAT32, in tutti i casi non supportano il VFAT, l'estenzione che con windows 95 supporta la memorizzazione di file con nomi superiori agli 8.3 caratteri, tutti i file verrano letti e trattati solo ricorrendo al FAT originario, questo per permettere di snellire le librerie e svincolare il codice dai diritti Microsoft proprietari del VFAT. Le librerie offrono delle comode funzioni, tra cui la lettura dei byte di un file, è possibile caricare queste informazioni in un buffer con capieza variablie che poi verrà svuotato nella FIFO del VS1011, il PIC per la maggior parte del tempo svolgerà questa funzione caricherà 4096 byte nel buffer e poi fornirà appena il vs1011 svuota la sua piccola coda FIFO, i byte prelevandoli dal buffer, quando il buffer di 4kB è stato svuotato il main provvederà a richiamare f_read(&fp, buffer.buffer, sizeof(buffer.buffer), &file_cont), per leggere i successivi 4096 byte e via così fino al termine della canzone. Durante l'esecuzione della traccia audio il PIC provvede anche a leggere le informazioni tipiche dell'MP3 come ad esempio il bitrate. Anche se non implementato fisicamente nel file VS1011.c risiedono delle comode fuznioni per imostare il volume e regolare i toni, tutte queste funzioni posso essere richiamate durante l'esecuzioni magari gestendo gli switch con degli interrupt.

 

Funzionalità previste ma non sviluppate.

 

Le ulteriori funzionalità che inizialmente sono state descritte, RTC, e joystik non sono mai state implementate in quanto l'hardware non è mai stato disegnato, ovviamente rispetto al resto del progetto è la parte meno impegnativa. Di miglioramenti applicabili ce ne sarebbero davvero tanti, e sarebbe solo lavoro di fantasia abbinare e modellare adeguatamente le funzioni scritte fin ora. L'interesse per sistemi più complessi come la FoxBoard mi ha spinto ad abbandonare con un pò di rammarico il progetto che così in parte la realizzazione di prototipo.

 

Letture consigliate.

 

Di segui riporto dei documenti e dei collegamenti che possono essere utili per approfondire le conoscenze sul funzionamento dei componenti impiegati.

 

Conclusioni e note.

 

In caso ci siano dubbi o si vogliono segnalare malfunzionamenti è possibile contattarmi utilizzando l'apposita sezione contact.

 

Keep patience the page is in expansions, I'm working...
 

Login

Main Menu

Online

None
We have 66 guests online