Projet suspendu
Le coeur de ce projet est suspendu jusqu'à finalisation du lecteur audio 008c qui peut également faire office de Juke-box.
Ce lecteur audio permet la lecture à la demande de fichiers enregistrés sur une carte SD (FAT16 ou FAT32) dans les formats WAV (44,1 kHz ou 48 kHz, 16 bits, stéréo) ou MP3 (32 kbps à 320 kbps, 32 kHz à 48 kHz), grâce à des boutons-poussoirs ou des commandes logiques.
Pour l'instant, le circuit en est à ses balbutiements et présente quelques limites :
- lecture de fichiers MP3 possible, mais les fichiers WAV ne sont pas encore pris en charge.A venir :
- le schéma complet avec les 64 ou 128 boutons (avec multiplexage car on ne dispose pas de 64 broches libres sur le PIC).Là, c'est juste un squelette qui montre que la base fonctionne, et comme vous pouvez vous en douter, j'y travaille encore. Mais je suis déjà très content d'être arrivé à ce résultat en moins de deux jours de travail (5 heures pour lire sur une carte SD formatée en FAT16, 8 heures pour réussir à lire une carte SD formatée en FAT32). Tout cela grâce aux routines toutes faites de MikroPascal, qui m'ont évité de lire l'intégralité de la norme MMC/SD.
Quelle horreur ! Vous êtes sûr qu'on peut s'en sortir ?
Parce que la librairie logicielle que j'utilise pour l'accès aux données inscrites sur la carte SD (écriture et lecture) ne fonctionne qu'avec cette famille de PIC, et parce que, mine de rien, on a besoin d'un minimum de mémoire et de puissance pour assurer un échange correct des données entre le PIC, la carte SD et le décodeur audio. Un PIC16 ne pourrait pas être utilisé pour les tâches qu'on demande ici, le minimum est un PIC18. Il pourrait sembler plus pertinent de passer directement au PIC24, PIC32 ou dsPIC. Mais comme ce que je voulais faire tient dans un PIC18, je n'allais pas m'en priver.
Pour ce lecteur audio, j'ai utilisé deux modules d'extension proposés
par MikroElektronika :
-
MP3 click, qui sur un petit circuit imprimé très propre,
regroupe
le décodeur VS1053 et les prises jack d'entrées/sorties audio.
- microSD click, qui comme son nom l'indique en partie, comporte un
support pour carte microSD/SDHC.
La lecture d'un fichier audio se fait par petits bouts : le PIC lit des blocs de 448 octets depuis la carte SD et les place dans un buffer (zone mémoire du PIC) avant de les transmettre par paquets de 32 octets au VS1053 qui se charge alors du décodage MP3 proprement dit. Comme un fichier audio n'a pas une taille forcément multiple de 448 octets, il y a de fortes chances qu'à la fin du fichier il reste un nombre d'octets à envoyer inférieur à 448. Si tel est le cas, les octets restants sont transmis un par un (et non plus par blocs de 32) jusqu'au dernier. Le décodeur VS1053 possède quant à lui un buffer interne (FIFO) de 2048 octets, qui quand il est plein le signale à travers une de ses broches (DREQ, Data Request). Quand DREQ est à l'état haut, cela signifie que le VS1053 est prêt à recevoir de nouvelles données (paquet de 32 octets dans le cas présent). Cette "aire de sécurité" de 32 octets permet de transférer un bloc sans avoir besoin de vérifier entre chaque octet si le buffer du décodeur peut les accueilir : on gagne du temps puisqu'on a seulement besoin de regarder l'état de cette ligne après l'envoi de chaque bloc de 32 octets.
Les échanges entre carte SD et PIC, ainsi qu'entre PIC et VS1053, s'opèrent via une liaison de type SPI. Le PIC joue le rôle de maître (master) et le VS1053 celui d'esclave (slave), ce qui signifie que le signal d'horloge DCLK qui rythme les données est délivré par le PIC. La ligne XDCS doit être placée à l'état bas pour valider le traitement des données envoyées au VS1053. En théorie, cette ligne pourrait rester à l'état bas en permanence, mais il est conseillé de la désactiver et de la réactiver après chaque envoi de blocs de données (ici 32 octets) pour remettre les pendules à l'heure en cas de "glissement" du signal d'horloge DCLK.
Actuellement, j'utilise 6 boutons-poussoirs câblés sur le port D du PIC pour déclencher quatre fichiers ou passer aux suivants ou précédents. A terme, le lecteur disposera de 64 boutons de commande, extensible à 128. Bien sûr, comme le PIC ne dispose pas de 64 broches libres (et encore moins 128), on doit faire appel au multiplexage. OK, mais de quel genre ? Style matrice standard 8 rangées x 8 colonnes ? cela demanderait 16 lignes d'entrées/sorties (17 lignes pour 128 commandes). Eh bien figurez-vous que la méthode que j'ai décidé d'utiliser ne réclame que... 5 lignes d'E/S pour 160 commandes et qu'elle ne fait pas appel au multiplexage ! Oh, rien de miraculeux. Juste quelques entrées analogiques qui reçoivent une tension différente selon le bouton-poussoir pressé, on l'a déjà vu ailleurs (par exemple ici).
Dans le cas présent, je n'utilise que 3 entrées
analogiques :
- une entrée pour un premier paquet de 32 boutons-poussoirs (sélection
morceau #1 à #32)
- une entrée pour un second paquet de 32 boutons-poussoirs (sélection
morceau #33 à #64)
- une entrée pour les autres commandes (choix bibliothèque, mode
aléatoire, etc)
Le schéma qui suit représente deux modules pour 32 commandes chacun. J'en utiliserai 3 pour la sélection des 64 morceaux et pour les autres commandes (extension à 5 modules pour 128 morceaux).
Réalisé avec ma platine EasyPic7, le module MP3 click (enfiché sur le support MikroBUS N°1 de la platine de développement) et le module microSD click (enfiché sur le support MikroBUS N°2) comme on peut le voir sur la première photo ci-après.
Fichiers binaires compilés *.hex disponibles dans l'archive suivante (deux programmes séparés pour FAT16 ou FAT32).
Lecteur audio 004 - PIC 18F45K22 - (16/02/2014)Non réalisé.
10/09/2021
- Suspension de ce projet jusqu'à finalisation du lecteur audio 008c qui peut également faire office de Juke-box.
02/02/2020
- Prolongation/reprise du projet lecteur
audio 004 (ce dernier est désormais abandonné dans sa forme
d'origine).