Electronique > Réalisations > Lecteur audio 006 [Pro]

Dernière mise à jour : 02/10/2015

Projet en cours de développement, volontairement non référencé dans les sommaires du site


Présentation

Ce lecteur audio, très proche du lecteur audio 002, permet de déclencher à la demande un son parmi plusieurs, via des fils de commandes eux-mêmes raccordés à des boutons-poussoirs, relais ou transistors. L'ensemble est basé sur l'emploi d'un microcontrôleur PIC associé à une mémoire flash EEPROM externe où sont stockés les fichiers son à faire jouer. Ce lecteur peut lire les fichiers audio monophoniques au format WAV 8 bits non signé (unsigned) avec une fréquence d'échantillonnage de 22 kHz (bande passante max 10 kHz), les autres formats de fichiers audio ne peuvent pas être lus. Trois systèmes sont proposés :
- version 006 : avec PIC 18F2520, commande de 6 sons, mémoire 1 Mb ou 4 Mb (durée totale max = 5,95 sec ou 23,8 sec)
- version 006b : avec PIC 18F26K22, commande de 6 sons, mémoire 2 Mb ou 8 Mb (durée totale max = 11,9 sec ou 47,5 sec)
- version 006c : avec PIC 18F46K22, commande de 10 sons, mémoire 4 Mb ou 16 Mb (durée totale max = 23,8 sec ou 95,1 sec)
Les trois versions sont capables de stocker et relire les sons depuis une ou plusieurs mémoires non amovibles (EEProm externes) soudées sur circuit imprimé pour des raisons de fiabilité mécanique. Bien entendu la capacité de stockage des sons est bien plus réduite que si on utilisait un support amovible (carte SD ou clé USB), mais cela ne pose pas de problème pour la lecture de sons de courte durée.

Cahier des charges

Le circuit a été développé sur demande et devait répondre aux critères suivants :
- possibilité de lire un son parmi 6, chacun ayant une durée de une seconde maximum.
- possibilité de lire chaque son en boucle, de manière continue et sans interruption.
- format des sons : Mono / 8 bits / 22 kHz (et non pas 8 kHz comme pour le lecteur audio 002).
- utilisation de mémoires soudées (EEPROM) pour stocker et relire les sons (système utilisé en conditions sévères, support mémoire avec contacts électriques - type carte SD ou clé USB - non autorisé).
- transfert des sons dans la mémoire via une liaison RS232 (ou adaptateur USB/RS232) avec un logiciel spécifique (développé pour l'occasion).
Seules les versions 006b et 006c sont retenues.

Schéma 006 - avec PIC 18F2520

Le système repose sur un PIC 18F2520 pour gérer l'écriture et la lecture de la mémoire externe SPI, modèle 25AA1024 (1 Mb) ou AT25F4096 (4 Mb).

lecteur_audio_006


Principe général de fonctionnement
Il consiste à stocker un ou plusieurs sons dans une mémoire EEPROM externe reliée au microcontrôleur via une liaison SPI. Le remplissage de la mémoire avec les fichiers son se fait grâce à un logiciel spécifique (AudioPlayerLoader). Une foix les échantillons enregistrés dans la mémoire EEPROM externe, ils peuvent être lus à la demande après conversion en analogique et amplification.

Choix de la mémoire
Il existe un certain nombre de mémoires I2C ou SPI qui peuvent être utilisées ici, celle que j'ai choisie répond aux impératifs du cahier des charges. Il fallait en effet disposer d'au moins 6 secondes de son (6 sons de 1 seconde max chaque), tout en ayant la possibilité d'étendre la capacité pour d'éventuelles évolutions. Une mémoire de 1 Mb permet de stocker un peu moins de 6 secondes de son mono / 8 bits / 22 kHz, c'est pourquoi j'ai prévu une mémoire 25AA1024 de 1 Mb (2 x 1 Mb = 256 kO) qui peut être directement remplacée par une mémoire AT25F2048 de 2 Mb (11,8 sec) ou AT25F4096 de 4 Mb (23,8 sec).

Transfert des échantillons sonores dans la ou les mémoires
Le transfert pour stockage des échantillons sonores dans la ou les mémoires EEPROM externes nécessite l'emploi d'une application spécifique Win32 pour PC. Le transfert s'effectue grâce à une liaison série RS232. L'application qui assure le transfert (AudioPlayerLoader) permet de choisir les fichiers à transférer et se charge de la vérification du format des fichiers audio sélectionnés et de leur taille. Le transfert ne peut pas démarrer si la taille totale requise pour l'ensemble des fichiers sélectionnés dépasse la capacité mémoire détectée par le logiciel (1 Mb, 2 Mb, 4 Mb, 8 Mb ou 16 Mb).

audioplayerloader_main_000

D'un point de vue électrique, l'interfaçage TTL/RS232 peut être réalisé par un classique MAX232 (choix visible sur le schéma proposé) ou via une interface FTDI RS232/USB. Pour une vitesse d'écriture maximale dans les mémoires EEProm, les échantillons sont sauvegardés par paquets de 256 octets, valeur qui correspond à une "page" de mémoire. Le temps du cycle d'écriture de 6 ms (propre au type de mémoire utilisée) s'applique ainsi à chaque paquet de 256 échantillons et non à chaque octet, ce qui permet d'accélérer le processus d'écriture. Le temps de transfert total via la liaison série reste toutefois relativement long, la plus grosse "perte de temps" est liée au débit du port série et au protocole de transfert utilisé qui "gonfle" la quantité de données à transmettre pour des questions de fiabilité (encapsulation et CRC) :
- UART (57,600 kbps) : environ 47 ms par paquet de 256 octets transférés (avec accusé de réception)
- Mémoire : environ 8 ms par paquet de 256 octets stockés (1,6 ms + 6 ms)
- soit environ 55 ms par paquet de 256 octets; pour 131072 octets (1 Mb) : 131072 / 256 * 0.055 = 28 secondes
Avec une vitesse de transfert du port série de 115200 kbps, le temps requis est réduit à 17 secondes (39 ms par paquet de 256 octets).
C'est le logiciel spécifique qui indique au PIC le nombre de fichiers son et leur durée, ainsi que leur emplacement mémoire. Ces informations sont stockées dans la mémoire EEProm du PIC lui-même. Par exemple :
- Son #1 - Début à l'adresse $000000, longueur 22000 échantillons (durée 1 seconde)
- Son #2 - Début à l'adresse $004E21, longueur 11000 échantillons (durée 0,5 seconde)
- Son #3 - Début à l'adresse $0080E9, longueur 2200 échantillons (durée 0,1 seconde)
- etc
La procédure de communication PIC/PC est la suivante, considérant que la liaison est établie entre PIC et PC  :
1 - Le logiciel PC interroge le PIC pour connaître le nombre de mémoires externes installées et leur taille.
2 - Les fichiers audio sélectionnés sont envoyés les uns après les autres par le logiciel PC, selon un protocole qui optimise la durée d'écriture en EEProm. Un accusé de réception est envoyée par le PIC après réception de chaque paquet de 256 échantillons audio. Si une erreur a été détectée durant la transmission d'un paquet, celui-ci est retransmis (3 tentatives max).
3 - Après transfert des fichiers, et si l'utilisateur l'a souhaité, le PIC démarre la lecture des fichiers audio transférés, pour contrôle auditif immédiat.

lecteur_audio_006_graphe_001a
Exemple de transfert d'un fichier son (durée environ une seconde) suivi de sa lecture

lecteur_audio_006_graphe_001b
Zoom sur transfert de 256 échantillons sonores en plusieurs paquets


Lecture (restitution) des échantillons sonores
La lecture des échantillons sonores depuis la mémoire EEProm s'effectue en temps réel : une fois lus, ces derniers sont mis en attente dans une mémoire tampon avant d'être transmis en temps voulu - grâce aux interruptions d'un Timer - aux 8 lignes du port B du PIC. Les interruptions ont lieu toutes les 45.5 us (une fréquence d'échantillonnage de 22 kHz correspond à une période de 45,45 us). Les échantillons numérisés lus et placés sur les 8 lignes du port B sont convertis en analogique au moyen d'un réseau R/2R constitué de résistances classiques (cas du schéma proposé), ou au moyen d'un convertisseur DAC 8 bits parallèle. La lecture d'un échantillon sonore dans la mémoire EEProm externe nécessite 26 us (traitement de 5 octets et horloge SPI à 2,5 MHz), il reste donc assez de temps pour le reste du travail sans qu'il y ait besoin de mettre en place un buffer circulaire.
Remarque : les fichiers son au format Wave comportent un entête (header) qui indique le format du fichier son (quantification, fréquence échantillonnage, mono ou stéréo, etc), cette entête est supprimée avant le transfert des sons dans la mémoire en vue d'économie de place.

Schéma 006b - avec PIC 18F26K22

Le schéma est dans sa base identique au précédent, le PIC n'est pas le même et une mémoire externe SPI a été ajoutée.

lecteur_audio_006b

Le changement de PIC est lié à plusieurs raisons, les deux principales sont :
- vitesse oscillateur limitée à 64 MHz pour le 18F2xK22 contre 40 MHz pour le 18F2520;
- prix du 18F2xK22 moins élevé.
La vitesse est limitée à 48 MHz pour permettre une meilleur fiabilité aux hautes températures d'utilisation. Comme la fréquence de l'oscillateur interne est limitée à des valeurs fixes (8 MHz et 16 MHz sans PLL dans les hautes valeurs), l'utilisation d'un quartz externe (ou résonnateur céramique) de 12 MHz est nécessaire. Avec la PLL activée, la fréquence "de base" est de 48 MHz (12 MHz * 4). La lecture d'un échantillon sonore dans les mémoires EEProm externes nécessite maintenant 21 us (traitement de 5 octets et horloge SPI à 3 MHz), on a gagné quelques us.

Programmation du PIC
La programmation du PIC peut être assurée en ICSP en suivant le câblage qui suit.

lecteur_audio_006_icsp

Le fait que les broches PGD et PGC soient utilisées comme sorties (D6 et D7 pour les échantillons audio) ne pose pas de problème, les résistances R4 et R5 de 20 kO du réseau R/2R assurent l'isolation requise. Si un DAC externe est utilisé en remplacement du réseau R2/R, il faut conserver les résistances R4 et R5 dont la valeur sera alors de 10 kO. La résistance RP porte la broche MCLR à l'état haut et la diode DP empêche la tension de programmation issue du programmateur de remonter dans la ligne d'alimentation positive du lecteur audio (que le PIC soit alimenté avec sa propre alim ou via la ligne VDD du programmateur).


Schéma 006c - avec PIC 18F46K22

Schéma élaboré pour commande de 10 sons, mémoire 16 Mbits (durée totale 95 secondes).

-

Elaboration des fichiers audio

Problème d'entête (header) des fichiers WAV ? Voir page AudioPlayerLoader.

Prototype

Prototype en cours de réalisation. Simulation système 006b effectuée avec succès avec mémoire 25AA1024 et AT25F4096.

Logiciel du PIC

Projet pro, code non disponible sur ce site.

Circuit imprimé

Non réalisé.

Historique

02/10/2015
- Première mise à disposition.