SDANIM7 : streaming vidéo à 120 Ko par seconde

Le précédent projet de streaming à 58 Ko/s avec un Arduino a été perfectionné pour atteindre le débit de 116667 octets par seconde. Ce débit permet d'avoir un affichage rapide des images, grâce à une technique originale de compression. Tous les TO et tous les MO disposent maintenant d'un moyen simple et économique pour produire une vidéo en couleur fluide avec un son numérique d'excellente qualité.
Le projet a été développé en étroite collaboration avec Samuel Devulder pour la compression vidéo et le player Thomson.

Auteur : Daniel Coulom - Site internet : Emulateur DCMOTO - Dernière mise à jour le 24 septembre 2015

previous Retour à la page Bricolage

Principe

Les données sont stockées dans un fichier d'une carte mémoire microSD. Elles sont lues par un Arduino à processeur ATmega328 16MHz 5V, pour être envoyées à l'ordinateur Thomson par le port manettes. Chaque bloc de données comporte 7 octets : un octet pour le son et six octets pour l'image. Le son est envoyé directement au convertisseur numérique-analogique (CNA) de l'ordinateur Thomson, sur 6 bits. Le septième bit est utilisé pour la synchronisation entre le Thomson et l'Arduino, le huitième bit permet de détecter la fin de fichier.

Chaque secteur de 512 octets de la carte SD contient 73 blocs de données et un octet son isolé. Ce dernier octet n'est pas suivi des six octets d'image, pour compenser le temps nécessaire au changement de secteur lors de la lecture séquentielle de la carte microSD.

La synchronisation entre la lecture par l'ordinateur Thomson et l'écriture par l'Arduino est effectuée lors de l'envoi de l'échantillon son vers le CNA, soit une seule fois pour sept octets. L'envoi au bon moment des 6 autres octets est assuré par des temporisations précises dans le programme Arduino, calculées en fonction du nombre de cycles entre les lectures du programme Thomson.

Schéma du montage


schema

Le schéma est identique à celui du streaming 58 Ko/s.

Matériel utilisé


db9 arduino catalex

Le montage nécessite 2 connecteur DB9 femelles pour les connecteurs manettes, un Arduino pro mini et un module pour carte microSD. Pour plus de détails, voir la description détaillée du matériel et du montage à Bricolage/Streaming à 58824 octets par seconde. Ci-dessous une autre version réalisée spécialement pour SDANIM7. En bas à gauche sur la photo, on voit l'interface USB utilisée pour programmer l'Arduino Pro Mini avec un PC.

Le système fonctionne avec l'ATMega328 à 16 MHz alimenté en 5V, mais aussi avec l'ATMega168 à 16 MHz alimenté en 5V. Par rapport à l'ATMEGA328, l'ATMega168 a des performances identiques et deux fois moins de mémoire. Attention, les ATMega168 ou ATMega328 à 8 MHz et/ou alimentés en 3,3V ne conviennent pas.


montage


Autre version avec un support ZIF 24 broches pour l'Arduino :


montage montage

Programme exécuté par l'Arduino


La bibliothèque standard permettant à l'Arduino d'accéder à la carte SD est trop lente pour atteindre des débits élevés. Il faut les remplacer par les modules sd_l0, sd_l1 et sd_l2 de la bibliothèque SimpleSDAudio. Ils sont utilisés pour lister le contenu du répertoire principal de la carte SD, pour permettre la sélection du fichier à jouer et obtenir son adresse physique dans la carte.

Ensuite, pour des raisons de performances, la carte est lue séquentiellement avec la commande CMD18 (lecture multiblocs). Cette méthode est la plus rapide, mais nécessite que le fichier ne soit pas fragmenté. Chaque secteur contient 73 blocs de 7 octets (un échantillon son et six octets vidéo), plus un echantillon de son en fin de bloc.

La synchronisation est assurée par un bit alternativement à 0 ou 1, envoyé par le programme Thomson à chaque fois qu'un échantillon de son est joué. Les 6 octets vidéo suivants sont émis selon le chronogramme imposé par le programme Thomson, grâce à des temporisations dans le programme Arduino.

Le sketch Arduino, ainsi que le programme Thomson, sont dans cette archive : sdanim7_20150924.


/**************************************************\
*                 S D A N I M 7                    * 
*           (c) 2015 - Daniel Coulom               *  
*           http://dcmoto.free.fr/                 *
*           http://forum.system-cfg.com/           *
*--------------------------------------------------*
* Ce code est distribue gratuitement dans l'espoir *
* qu'il sera utile, mais sans aucune  garantie  et *
* sans  engager  la  responsabilité  de  l'auteur. *
* Vous  pouvez  l' utiliser,  le  modifier  et  le *
* diffuser librement, en conservant cette  licence *
* et les références de l'auteur dans   toutes  les *
* copies. L'exploitation commerciale est interdite.*
\**************************************************/

/***************************************************
*                Version 2015.09.22                *
****************************************************
Historique
2015.09.22 nouveau protocole d'envoi du repertoire 
2015.09.21 interruptions desactivees apres SD_L2_Init() 
2015.09.18 interruptions desactivees apres SD_L2_Dir() 
2015.08.31 ajout du choix du fichier a jouer 
2015.08.24 buffer SD_L2_Init reduit a 512 octets 
2015.08.23 SDANIM4 devient SDANIM7 
2015.08.14 temporisations ajustées, test ok 
2015.07.30 premiere version issue de sdanim3

Communication parallele avec un ordinateur Thomson
Lecture des donnees dans un fichier sur carte SD
Envoi des octets sur le port D a destination du
port manettes de l'ordinateur Thomson.

Programme exécuté par l'ordinateur Thomson


L'initialisation consiste à masquer les interruptions et à configurer le PIA6821 "musique et jeux" avec le port A en entrée (données lues sur la carte SD) et le port B en sortie (convertisseur numérique-analogique et bit de synchronisation).

Le programme commence par lister le répertoire principal de la carte SD, pour permettre à l'utilisateur de sélectionner un fichier. Un choix est possible entre la version en couleurs ou la version noir et blanc de la vidéo.

La boucle de lecture lit chaque secteur de 512 octets à raison de 73 blocs de 7 octets, plus un échantillon de son en fin de bloc. Le bit de synchronisation, alternativement à 0 et 1, est envoyé en même temps que le son vers le port B du PIA musique et jeux.

Le programme Thomson, ainsi que le sketch Arduino, sont dans cette archive : sdanim7_20150924.


/**************************************************\
*                 S D A N I M 7                    * 
*    (c) 2015 - Samuel Devulder, Daniel Coulom     *
*           http://dcmoto.free.fr/                 *
*           http://forum.system-cfg.com/           *
*--------------------------------------------------*
* Ce code est distribue gratuitement dans l'espoir *
* qu'il sera utile, mais sans aucune  garantie  et *
* sans  engager  la  responsabilité  de  l'auteur. *
* Vous  pouvez  l' utiliser,  le  modifier  et  le *
* diffuser librement, en conservant cette  licence *
* et les références de l'auteur dans   toutes  les *
* copies. L'exploitation commerciale est interdite.*
\**************************************************/

* Ce programme affiche une vidéo avec son à 16667 Hz.
* Les données sont lues sur carte SD par un Arduino
* et envoyées à l'ordinateur Thomson par les ports
* manettes à la vitesse de 116667 octets par seconde.
* Le fichier à jouer est choisi dans le répertoire
* de la carte SD.

/**************************************************\
*                Version 2015.09.23                *
\**************************************************/
* Historique
* 2015.09.23 lecture repertoire sans parasites son
* 2015.09.22 nouveau protocole de lecture repertoire
* 2015.09.01 ameliorations de details
* 2015.08.31 signalement choix par delai bit synchro
* 2015.08.30 ajout du choix du fichier dans la carte
* 2015.08.30 abandon du programme Basic de lancement
* 2015.08.21 retour au Basic apres init. des ports
* 2015.07.12 premiere version operationnelle
  

Le programme Basic ci-dessous charge et lance le programme en langage machine.

10 CLEAR,&H8FFF:LOADM"SDANIM7",,R

Préparation du fichier vidéo à mettre sur la carte SD


Ce paragraphe sera développé ultérieurement, avec la procédure complète permettant de créer vos propres vidéos.
En attendant, vous pouvez tester le système avec ce fichier : Spinning a Mountain
Vidéo sur YouTube : SDANIM7 - Spinning a Mountain



Complément d'information


Ci-dessous les photographies du montage connecté à un MO5 et à un TO8.

mo5

to8

La source principale d'informations sur ce projet de streaming vidéo couleur avec un Arduino est le forum system-cfg : system-cfg
Vous pouvez lire en particulier ce fil de discussion, et participer à la discussion par des questions ou des témoignages.