Décodeur BCD
2014-09-27
Introduction
Jusqu’ici, nous avons contrôlé un afficheur sept segments directement depuis la carte. Ainsi, contrôler les 7 DEL implique de réserver 7 pin (8 si l’on ajoute le point). Dans un circuit complexes, cela devient rapidement un problème.
La première chose que l’on peut remarquer, c’est que les 7 DEL peuvent se trouver dans 128 combinaisons différentes, alors que l’on ne veut représenter que 10 chiffres. En binaire, 4 bits suffisent en fait à représenter les chiffres :
0 1 2 3 4 5 6 7 8 9
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001
C’est le Codage Binaire Décimal (BCD pour Binary-Coded Decimal). Le décodeur BCD est un circuit intégré qui permet d’exploiter cette particularité pour réduire à quatre le nombre de bits nécessaires pour contrôler un afficheur sept segments. Nous utiliserons le 74LS47.
Le composant doit être alimenté : Vcc relié à HIGH et GND relié à la pin correspondante de la carte. Les pin a à g sont à relier à l’afficheur sept segment de manière appropriée. L’entrée se fait sur les connexions A0 à A1. Par exemple :
7
0 1 1 1
A3 A2 A1 A0
RBI et RBO sont une fonctionnalité utile lorsqu’on enchaîne les afficheurs pour représenter un nombre à plusieurs chiffres. Un nombre qui n’utilise pas tous les chiffres serait normalement précédé de zéros : par exemple, le nombre 101 serait représenté par 000101
sur 6 afficheurs. Pour éviter que les premiers zéros ne soient activés, le premier afficheur indique au second qu’il n’est précédé par aucun chiffre non-nul ; le second indique la même chose au premier. En revanche, le cinquième ne reçoit pas de tel signal et affiche correctement le zéro dans « 101 ». Le signal est émis sur RBO (Ripple Blanking Output) et reçu sur RBI (Ripple Blanking Input). Pour toujours afficher zéro, nous relierons RBI à HIGH.
LT permet d’activer tous les segments pour vérifier leur bon fonctionnement. Nous l’imposerons à HIGH pour désactiver cette fonctionnalité.
Enfin, l’afficheur est désactivé si BI n’est pas relié à un potentiel élevé.
Montage
Nous relions donc les sorties a à f à l’afficheur sept segments, les entrées A0 à A3 à l’Arduino, Vcc, RBI, RBO et LT à HIGH et GND à la masse.
Programme
Nous n’aurons ici pas besoin de déterminer nous-même la représentation de chaque chiffre. Il suffit d’envoyer les quatres bits du chiffre sur les pin 13 à 10.
void displayDigit(int d)
{
d = d % 10;
for (int i = 0; i < 4; i++)
{
digitalwrite(13-i; d%2 ? HIGH : LOW);
d >>= 1;
}
}
Comme précédemment, la boucle lit le chiffre bit par bit et impose le potentiel adéquat sur la sortie correspondante. Le code complet est :
void displayDigit(int d)
{
d = d % 10;
for (int i = 0; i < 4; i++)
{
digitalwrite(13-i; d%2 ? HIGH : LOW);
d >>= 1;
}
}
int counter = 0;
void setup()
{
counter = 0;
for (int i = 13; i >= 10; i--)
pinMode(i, OUTPUT)
}
void loop()
{
displayDigit(counter);
delay(1000);
counter++;
}
Ce programme va compter les secondes et afficher le dernier chiffre sur l’afficheur sept segments.