Afficheur alphanumérique à DELs défilant

J’ai toujours été intéressé par les afficheurs à DELs. J’en ai même réalisé un il y a de cela quelques années avec 70DELs (10 colonnes de 7 dels). Cependant si l’on veut avoir une zone importante de défilement rien ne vaut les modules DELs tout montés (en 5 lignes x 7 colonnes ou 8 lignes x 8 colonnes). En cherchant sur un marchant en ligne bien connu, j’ai trouvé ce module (voir photographie ci-dessous) chez SureElectronics pour seulement 7,5 euros frais de port inclus. Après avoir rapidement lu la documentation fournie par le revendeur, je me décide à commander un de ces modules pour le tester !

Module DELs 32x8

Module DELs 32x8

Je vais commencer par des vidéos de présentation de mon prototype, cela remplacera les discours de présentation 🙂 Notez bien cependant que ce que vous voyez est « minable » par rapport au rendu réel avec le vrai panneau à DELs. La faute a ma pauvre webcam et des conditions d’éclairage pas optimale du tout !!

Cette vidéo présente la première utilisation du panneau après lecture de la documentation technique du CI HOLTEK HT1632. Cette étape m’a permis de valider la partie matériel (Alimentation 0V-5V, Signaux SCLK,SDATA et CS) et la séquence d’initialisation. J’envoie ensuite les octets pour réaliser ce « bargraph ». La variation d’intensité lumineuse est une commande intégré du HT1632 (PWM sur 16 niveaux).
Cette vidéo présente comment réaliser un pseudo analyseur de spectre. Le code est relativement court mais l’effet produit est correct. J’ai pu valider la commande individuelle des pixels du panneau.
Cette vidéo présente enfin l’affichage défilant d’un texte. Dans un premier temps le texte préprogrammé défile (lettres et chiffres) puis j’envoie par la voie série le texte à afficher. La variation de vitesse de défilement est obtenu en lisant la valeur d’un potentiomètre. La transmission des données est plus optimisé que dans les deux cas précédents puisque celle-ci s’enchainent une fois la première adresse donnée.

Le module est équipé de deux connecteurs HE10-16. L’un d’eux sert à la connexion avec le microcontrolleur, l’autre sert à chainer un autre module. Vous pouvez piloter ainsi quatre modules. Le brochage complet du connecteur HE10-16 est donné dans la documentation constructeur fourni par SureElectronics. Pour notre part, nous avons juste besoin des lignes suivantes:

  • Broches 12, 14 et 16 : alimentation +5V
  • Broches 8,11,13 et 15 : masse
  • Broche 5 : entrée d’horloge pour écrire dans le module (WR dans la documentation)
  • Broche 7 : entrée/sortie des données (DATA dans la documentation)
  • Broche 3 : entrée Chip Select 1. Sélection du module active à l’état bas. Ne pas oublier de mettre tous les interrupteurs  DIP à OFF sauf celui concernant CS1 à ON à l’arrière du module

Une fois le cablage matériel réalisé, il faut initialiser le module en lui envoyant des codes de commande. La documentation officielle du HT1632 (disponible en fin d’article) préconise la séquence d’initialisation suivante avec entre parenthèse l’ordre en binaire à envoyer:

  • SYS DIS : Coupe l’oscillateur local intégré et le générateur PWM du HT1632 ( 100 0000 0000 X).
  • COMMONS OPTIONS : Choix du mode de pilotage des DELs (100 0010 abXX X). Dans notre cas ab=10 car on est dans le cas « P-MOS open drain output and 8 common option ».
  • Pour l’instant notre module est seul, il faut donc le positionner en mode « MASTER ». Cela sélectionne l’oscillateur RC local comme source d’horloge principale et envoie ce signal sur la broche OSC pour les modules en mode esclave (100 0001 01XX X).
  • SYS EN : Activation de l’oscillateur local RC (100 0000 0001 X).
  • LED ON : Activation du générateur PWM qui commande l’intensité lumineuse des DELs (100 0000 0011 X)
  • PWM Duty : Sélection de l’intensité lumineuse sur 16 niveaux (100 101X abcd X) avec abcd évoluant de 0001 à 1111.

Ne vous inquiétez pas, aucune DEL n’est encore allumée après l’initialisation. C’est normal car nous n’avons pas encore envoyé de données au module juste des commandes. La séquence d’initialisation se présente donc de la manière suivante en langage C:

Comme vous pouvez le remarquer, nous passons en paramètre notre commande à une fonction « init_command ». Dans la documentation officielle nous avons le chronogramme suivant:

Chronogramme - Envoi d'une commande

Chronogramme - Envoi d'une commande

On remarque que la lecture de la donnée se fait sur le front montant du signal d’horloge (transition 0 vers 1). Afin de réaliser ces chronogrammes et de rester le plus générique possible, nous allons utiliser la technique du « bit-banging« . C’est à dire que nous allons créer nos propres signaux seulement en mettant à 0 ou 1 la sortie concernée. Nous n’utiliserons donc pas les modules SPI matériel. On obtient alors le code C suivant:

J’utilise comme compilateur C CCS. La définition des broches se fait de la manière ci-dessous. Il faudra très certainement adapter cette partie à votre compilateur :

Il faut maintenant envoyer des données à notre afficheur pour voir enfin s’allumer des DELs. Dans la documentation constructeur, vous trouverez le chronogramme suivant pour transmettre une donnée (3 bits) à une adresse précise de l’afficheur (sur 6 bits) :

Chronogramme envoi d'une donnée sur 3 bits à une adresse donnée sur 6 bits

Chronogramme envoi d'une donnée sur 3 bits à une adresse donnée sur 6 bits

Cette fois encore la donnée est prise en compte sur le front montant de l’horloge WR. Notez bien que l’adresse est donnée du bit de poids fort (A6) vers le bit de poids faible (A0). Par contre la donnée qui suit part du bit de poids faible (D0) vers le bit de poids fort (D3). Pour allumer les 8 DELs d’une colonne il faudra donc envoyer 4 bits de données à l’adresse N et 4 bits de données à l’adresse N+1. Le codage en C de ce chronogramme est donnée ci-dessous :

Ce qui nous conduit à la réalisation du premier exemple vu en video ci-dessus le « BarGraph ». La boucle principale se présente de la manière suivante:

Le code C complet pour le compilateur C CCS est disponible en fin d’article. Pour les autres exemples il fallait optimiser la transmission des données vers le module en se positionnant à l’adresse 0 puis en envoyant les données les unes derrière les autres. Cette méthode est décrite dans le chronogramme suivant:

Chronogramme envoi de donnée en rafalePour ma part j’ai choisi d’avoir un tableau d’entier dans mon code C qui représente l’état de l’écran à DELs. Je transmet la totalité de ce tableau à chaque changement dans celui-ci. La fonction « update_screen() » présente cette solution dans le code ci-dessous. Le tableau « Screen » est un tableau d’entier non signé sur 8 bit de 32 cases ce qui correspond exactement au nombre de DELs du module (32×8) :

C’est cette solution que j’ai employé pour réaliser la simulation de visualisation de spectre et l’affichage défilant. Je met en pièce jointe le code pour la simulation de l’analyseur de spectre. Par contre je vous laisse chercher comment faire un message défilant. Contactez-moi si vous ne trouvez pas la solution.

La prochaine expérience autour de ce module sera le chainage de trois modules « esclaves » à ce module « maitre » pour réaliser un panneau défilant beaucoup plus long (128×8) ou un panneau d’affichage (32×32). La suite bientôt j’espère….

Simulation de la visualisation d'un spectre de fréquence
Titre: Deuxième test de l'afficheur à DELs (637 clics)
Légende: Simulation de la visualisation d'un spectre de fréquence
Nom du fichier: test-afficheur-simu-spectre.c
Taille: 5 KB
Documentation de SureElectronics du module DE-DP104
Titre: Documentation DE-DP104 (790 clics)
Légende: Documentation de SureElectronics du module DE-DP104
Nom du fichier: de-dp104_ver10_en.pdf
Taille: 2 MB
Documentation du CI qui pilote les DELs sur le module DE-DP104
Titre: Documentation du CI HT1632 de HOLTEK (652 clics)
Légende: Documentation du CI qui pilote les DELs sur le module DE-DP104
Nom du fichier: ht1632v120.pdf
Taille: 228 KB
Test d'affichage d'un BarGraph
Titre: Premier test du module à DELs (673 clics)
Légende: Test d'affichage d'un BarGraph
Nom du fichier: premier-test-afficheur.c
Taille: 3 KB

5 réflexions au sujet de « Afficheur alphanumérique à DELs défilant »

  1. Ping : Electronique Innovante » Pinguino et matrice de DELs

  2. Chatenet Fabien

    Très intéressant !
    La PWM peut être modifiée pour chacune des LEDs? J’imagine que dans ce cas elle peut aussi être piloté par la voie série.
    Impressionnant pour un prix aussi peu élevé.

  3. Olivier Auteur de l’article

    Hé oui…les chinois ont des prix ridicules sachant que le module 8×8 dels en france coûte un peu prés 10euros !!
    La PWM est modifiée globalement pour tout le panneau mais c’est déjà pas mal.
    A suivre dans un prochain article, un montage beaucoup plus conséquent qui utilise deux panneaux de dels, un module bluetooth, une horloge temps réel I2C, un capteur de température I2C et une mémoire I2C…le tout piloté par un PIC16F886 !!

  4. Chatenet Fabien

    Projet intéressant, notamment le module bluetooth.
    Les mémoires m’intéressent. J’ai jeter un coup d’œil, et à un prix abordable je n’ai trouvé que de l’EEPROM FLASH piloté par SPI.
    C’est en fait pour stocker des échantillons (musique/sons) et les restitués sur un HP via un CNA (8bits). Donc la capacité mémoire doit être importante (512ko minimum sont convenables).
    Si vous avez un conseil pour ce qui est des mémoires pilotés par I2C ça m’intéresse grandement…
    Merci !

  5. Olivier Auteur de l’article

    Pas de problème pour des mémoires I2C de grande taille (jusqu’à 1024Kb).
    Le projet complet existe et fonctionne. La liaison bluetooth entre le PC et le module est OK. Je termine l’interface en VB.Net et ensuite je mettrai le projet en ligne.

    Cordialement

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *