CH32V307 : affichage 7 segments

par Vincent DEFERT, dernière mise à jour le 2025-06-04

Ce que vous allez faire

Vous allez développer un programme qui affiche en continu le texte "HELLO!" sur le module d'affichage 7 segments à 74HC595 indiqué dans les pré-requis.

Afficheur 7 segments

Un afficheur 7 segments utilise 7 LED de forme rectangulaire pour représenter les chiffres, ou d'autres caractères si besoin. On lui adjoint une 8ème LED pour le point décimal. La figure ci-contre indique le nommage conventionnel de chacun des segments.

Il existe 2 façons de commander une LED : soit on relie son anode à une ligne de GPIO à travers une résistance pour limiter le courant et on connecte sa cathode à la masse, la LED étant allumée si la ligne de GPIO est à l'état haut ; soit on relie sa cathode à la ligne de GPIO à travers la résistance et on connecte son anode à la tension d'alimentation, la LED étant allumée si la ligne de GPIO est à l'état bas.

Toutes les LED d'un afficheur étant commandées de la même façon, on aura donc 2 types d'afficheurs : soit anode commune si toutes les anodes sont reliées ensemble à l'intérieur de l'afficheur pour faciliter leur connexion à la tension d'alimentation, soit cathode commune si toutes les cathodes sont reliées ensemble pour les relier en une seul fois à la masse.

Les résistances de limitation ne sont jamais inclues dans l'afficheur car leur valeur dépend de la tension d'alimentation, de la couleur des LED et de la luminosité souhaitée.

Dans la pratique, on a quasiment toujours besoin d'afficher plusieurs chiffres, donc on utilisera des blocs de plusieurs afficheurs afin de simplifier au maximum le câblage. Le module d'affichage que nous allons utiliser comporte 8 chiffres répartis en 2 blocs de 4. Voici la data sheet du bloc de 4 afficheurs utilisé par ce module.

Vous remarquerez qu'il s'agit d'un afficheur cathode commune. Le schéma de connexion des diodes figurant dans la data sheet montre que pour pouvoir commander un chiffre, on doit mettre la cathode commune de ce chiffre à la masse et piloter les LED des segments qu'on veut allumer. Pour commander un autre chiffre, il faut remettre la cathode commune du précédent à l'état haut et mettre la cathode commune du nouveau chiffre à l'état bas avant de piloter ses segments. Tous les segments étant reliés entre eux pour aboutir à une même broche, on n'a besoin que de 8 résistances de limitation pour l'ensemble du bloc de 4 afficheurs.

Cette manière de mutualiser des connexions sur un nombre limité de broches s'appelle le multiplexage et est abondamment utilisée. D'ailleurs, c'est une forme de multiplexage qui est utilisée dans notre clavier matriciel pour éviter de devoir connecter chaque touche individuellement.

Le module d'affichage 7 segments à 74HC595

On aurait pu connecter nos 2 blocs de 4 segments à travers 8 résistances directement à notre CH32V307, il a largement assez de broches pour ça. Ce n'est cependant pas le cas avec micro-contrôleurs "low pin count" (à faible nombre de broches) comme le CH32V003. C'est pourquoi il est assez courant d'utiliser des circuits intégrés dédiés au contrôle de l'affichage.

Certains de ces circuits intégrés, comme le TM1638, déchargent complètement le micro-contrôleur de la gestion de l'affichage. Le micro-contrôleur communique avec eux, souvent via SPI, pour leur indiquer quels segments il veut afficher sur quel chiffre et le circuit spécialisé se charge du reste.

Dans notre cas, c'est un peu différent. Le 74HC595 qui équipe notre module intègre un registre à décalage et un verrou. Le micro-contrôleur peut donc envoyer ses données en utilisant SPI. Les données seront désérialisées par le registre à décalage et la valeur de chaque octet sera transférée dans le verrou au moment où le signal CS# reviendra à l'état haut. Entre 2 transferts, les données resteront stables et le micro-contrôleur n'aura plus à s'en occuper.

Voici le schéma complet du module d'affichage et les indications permettant de le connecter au micro-contrôleur :

On remarque sur ce schéma que deux 74HC595 sont cascadés, U1 en premier et U2 en second. U1 commande les segments et U2 les chiffres. Si on configure le périphérique SPI de notre micro-contrôleur pour envoyer le bit de poids le fort (MSB) en premier, on peut déduire de ce schéma les faits suivants :

  • Pour commander un chiffre, on doit mettre CS# à l'état bas, transmettre 2 octets, puis remettre CS# à l'état haut.

  • Le premier octet envoyé correspond au chiffre à allumer, le second à l'état de ses segments.

  • L'afficheur étant de type cathode commune, tous les bits du premier octet devront être à 1 sauf le bit correspondant au chiffre à afficher. De même, tous les bits du second octet devront être à 0 sauf les bits correspondant aux segments à allumer.

  • Le MSB étant envoyé en premier, le bit de poids le plus faible du premier octet correspond au chiffre le plus à gauche. De même, le bit de poids le plus faible du second octet correspond au segment 'a'.

Enfin, pour afficher une chaîne de caractères, vous devrez convertir chaque caractère en une représentation de l'état correspondant des segments, que vous enverrez ensuite au module d'affichage à tour de rôle.

Voilà, vous en savez maintenant assez pour faire votre exercice.


Copyright (c) 2025 Vincent DEFERT - Tous droits réservés