Il existe un grand nombre de compteurs. Nous en avons même déjà construit un à partir de quelques bascules (flip flops) CD4013. Le 74LS193 de Texas Instruments, que nous étudions aujourd'hui, est un compteur binaire synchrone de 4 bits, qui peut compter de façon ascendante et descendante. Il se présente sous la forme d'un circuit intégré comportant 16 broches. Comme à mon habitude, je vous encourage à expérimenter avec le circuit intégré, pour vérifier qu'il se comporte bien de la façon décrite dans la fiche technique.

Broches d'alimentations
Commençons par les broches numéros 8 et 16: elles servent à alimenter le circuit intégré, qui est conçu pour fonctionner à une tension de 5 V. Ces deux broches doivent obligatoirement être branchées à une alimentation continue de 5 V, sinon le circuit intégré ne fonctionnera pas.
2 broches d'entrée
La broche numéro 4 "DOWN" et la broche numéro 5 "UP" sont les entrées. Chaque fois que la broche "UP" retourne à une tension de 5 V après avoir brièvement été soumise à une tension nulle, la valeur du compteur augmente d'une unité. Pour la broche "DOWN", c'est la même chose, sauf que la valeur du compteur diminue d'une unité.
4 broches de sortie
La valeur du compteur est accessible sous la forme d'un nombre binaire à 4 bits grâce aux broches QA, QB, QC et QD. QD est le bit de poids fort, alors que QA est le bit de poids faible. Ainsi, si QA, QB et QC sont à 0 V pendant que QD est à 5 V, le compteur affiche le nombre binaire 1000 qui correspond à 8 en notation décimale.
Un premier circuit exploratoire
Pour tester le 74LS193, nous devons l'alimenter avec une tension de 5 V, soumettre sa broche "UP" à des impulsions de 5 V, et lire la tension de ses 4 broches de sortie: tout ça peut facilement être accompli par un Arduino Uno, c'est pourquoi je vous propose le montage illustré ci-dessous.
- Les broches 4, 11 et 16 du 74LS193 sont branchées à la sortie 5 V de l'Arduino.
- Les broches 8 et 14 du 74LS193 sont branchées à une des broches GND de l'Arduino.
- Les sorties QA, QB, QC et QD (broches 3, 2, 6, 7) du 74LS193 sont branchées respectivement aux broches 2, 3, 4 et 5 de l'Arduino.
- La broche 5 (entrée UP) du 74LS193 est branchée à la broche 6 de l'Arduino.
- Les broches 1, 9, 10, 12, 13 et 15 du 74LS193 ne sont pas branchées (nous les utiliserons plus tard).
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/******************************************************** | |
* Un premier sketch pour explorer le compteur 74LS193. | |
Plus d'infos: | |
https://electroniqueamateur.blogspot.com/2019/06/etude-de-ci-le-compteur-binaire-74ls193.html | |
*********************************************************/ | |
// définition des broches utilisées | |
const int brocheQA = 2; | |
const int brocheQB = 3; | |
const int brocheQC = 4; | |
const int brocheQD = 5; | |
const int brocheUP = 6; | |
void setup() { | |
// une sortie pour contrôler l'entrée du 74LS193 | |
pinMode(brocheUP, OUTPUT); | |
digitalWrite(brocheUP, HIGH); | |
// 4 entrées pour lire les sorties du 74LS193. | |
pinMode(brocheQA, INPUT); | |
pinMode(brocheQB, INPUT); | |
pinMode(brocheQC, INPUT); | |
pinMode(brocheQD, INPUT); | |
// initialisation de la communication série | |
Serial.begin(9600); | |
Serial.println("Test du compteur SN74LS193"); | |
Serial.println(""); | |
} | |
void loop() { | |
// envoi d'une impulsion: la tension prend brièvement | |
// une valeur nulle avant de redevenir 5 V. | |
digitalWrite(brocheUP, LOW); | |
digitalWrite(brocheUP, HIGH); | |
// Lecture des 4 sortiers du SN74LS193 et affichage | |
// dans le moniteur série | |
Serial.print("QD: "); | |
Serial.print(digitalRead(brocheQD)); | |
Serial.print(" QC: "); | |
Serial.print(digitalRead(brocheQC)); | |
Serial.print(" QB: "); | |
Serial.print(digitalRead(brocheQB)); | |
Serial.print(" QA: "); | |
Serial.println(digitalRead(brocheQA)); | |
delay(1000); // on ralentit exagérément le processus pour avoir le temps de voir ce qui se passe | |
} | |
Tel que prévu, chaque fois qu'une impulsion est détectée par la broche UP, la valeur binaire présentée par les sorties QA, QB, QC et QD augmente d'une unité. Lorsque la valeur maximale "1111" (qui est l'équivalent de 15 en décimal) est atteinte, le compteur recommence à zéro.
Réglage de la valeur du compteur
Il est parfois utile de régler la valeur du compteur. Pour ce faire, nous plaçons les entrées A, B, C et D du compteur aux valeurs désirées, puis nous plaçons brièvement la broche LOAD (broche #11) à 0 V pour enregistrer le résultat.
Par exemple, si vous désirez régler le compteur à la valeur "0100", vous mettez D à 0 V, C à 5 V, B à 0 V et A à 0 V, puis vous envoyez une impulsion sur la broche LOAD pour enregistrer le résultat.
Modifions notre circuit afin de pouvoir régler la valeur du compteur (nous en profiterons également pour activer la broche DOWN, ce qui nous permettra de diminuer la valeur du compteur.
Il s'agit donc du même circuit que plus haut, sauf que maintenant:
- La broche DOWN (#4) du 74LS193 est branchée à la broche 7 de l'Arduino (et non à 5 V).
- La broche LOAD (#11) du 74LS193 est branchée à la broche 8 de l'Arduino (et non à 5 V).
- La broche A (#15) du 74LS193 est branchée à la broche 9 de l'Arduino.
- La broche B (#1) du 74LS193 est branchée à la broche 10 de l'Arduino.
- La broche C (#10) du 74LS193 est branchée à la broche 11 de l'Arduino.
- La broche D (#9) du 74LS193 est branchée à la broche 12 de l'Arduino.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
Deuxième sketch pour tester le compteur 74LS193N: cette | |
fois, nous réglons la valeur du compteur avant d'effectuer | |
quelques soustractions, puis nous réglons le compteur à | |
une autre valeur avant de faire quelques additions. | |
Plus d'infos: | |
https://electroniqueamateur.blogspot.com/2019/06/etude-de-ci-le-compteur-binaire-74ls193.html | |
*/ | |
// définition des broches utilisées | |
const int brocheQA = 2; | |
const int brocheQB = 3; | |
const int brocheQC = 4; | |
const int brocheQD = 5; | |
const int brocheUP = 6; | |
const int brocheDOWN = 7; | |
const int brocheLOAD = 8; | |
const int brocheA = 9; | |
const int brocheB = 10; | |
const int brocheC = 11; | |
const int brocheD = 12; | |
void setup() { | |
// deux sorties pour contrôler l'entrée du 74LS193 | |
pinMode(brocheUP, OUTPUT); | |
digitalWrite(brocheUP, HIGH); | |
pinMode(brocheDOWN, OUTPUT); | |
digitalWrite(brocheDOWN, HIGH); | |
// 4 entrées pour lire les sorties du 74LS193. | |
pinMode(brocheQA, INPUT); | |
pinMode(brocheQB, INPUT); | |
pinMode(brocheQC, INPUT); | |
pinMode(brocheQD, INPUT); | |
// 5 entrées pour régler la valeur du compteur | |
pinMode(brocheLOAD, OUTPUT); | |
digitalWrite(brocheLOAD, HIGH); | |
pinMode(brocheA, OUTPUT); | |
pinMode(brocheB, OUTPUT); | |
pinMode(brocheC, OUTPUT); | |
pinMode(brocheD, OUTPUT); | |
// affichage au moniteur série | |
Serial.begin(9600); | |
Serial.println("Test du compteur SN74LS193N"); | |
Serial.println(""); | |
} | |
void loop() { | |
// réglage du compteur à 0111 | |
digitalWrite(brocheD, LOW); | |
digitalWrite(brocheC, HIGH); | |
digitalWrite(brocheB, HIGH); | |
digitalWrite(brocheA, HIGH); | |
digitalWrite(brocheLOAD, LOW); | |
digitalWrite(brocheLOAD, HIGH); | |
Serial.println("Reglage a 0111"); | |
affichage(); | |
delay(1000); | |
// on effectue 4 soustractions | |
for (int i = 0; i <= 3; i++) { | |
digitalWrite(brocheDOWN, LOW); | |
digitalWrite(brocheDOWN, HIGH); | |
affichage(); | |
delay(1000); | |
} | |
// réglage du compteur à 0101 | |
digitalWrite(brocheD, LOW); | |
digitalWrite(brocheC, HIGH); | |
digitalWrite(brocheB, LOW); | |
digitalWrite(brocheA, HIGH); | |
digitalWrite(brocheLOAD, LOW); | |
digitalWrite(brocheLOAD, HIGH); | |
Serial.println("Reglage a 0101"); | |
affichage(); | |
delay(1000); | |
// on effectue 4 additions | |
for (int i = 0; i <= 3; i++) { | |
digitalWrite(brocheUP, LOW); | |
digitalWrite(brocheUP, HIGH); | |
affichage(); | |
delay(1000); | |
} | |
} | |
void affichage() | |
{ | |
Serial.print("QD: "); | |
Serial.print(digitalRead(brocheQD)); | |
Serial.print(" QC: "); | |
Serial.print(digitalRead(brocheQC)); | |
Serial.print(" QB: "); | |
Serial.print(digitalRead(brocheQB)); | |
Serial.print(" QA: "); | |
Serial.println(digitalRead(brocheQA)); | |
} |
Notez que si vous désirez mettre le compteur à zéro, vous pouvez aussi placer temporairement la broche CLR du compteur à 5 V, puis la remettre à 0 V.
Détection des débordements
Il ne nous reste plus que 2 dernières broches du 74LS193 à explorer: BO et CO. Ces deux sorties sont généralement à 5 V, mais leur tension devient brièvement nulle lorsque le compteur "déborde". Par exemple, lorsque vous ajoutez "1" au compteur alors qu'il se trouve à la valeur maximale "1111", la broche CO prend brièvement une valeur nulle juste avant que le compteur n'affiche "0000". De la même façon, si vous soustrayez "1" du compteur alors qu'il se trouve à la valeur minimale "0000", la tension de la broche BO devient momentanément nulle avant que le compteur n'affiche "1111".
Pour tester ces deux broches, j'ai branché CO (#12) à la broche A0 de l'Arduino, et BO (#13) à A1.
Le sketch ci-dessous effectue 25 additions, en nous alertant à chaque débordement, puis 25 soustraction, en nous alertant à chaque débordement.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
Troisième sketch pour tester le compteur 74LS193N: cette | |
fois, nous utilisons les broches CO et BO pour être alertés | |
lorsque le compteur retourne à zéro après avoir atteint sa limite. | |
Plus d'infos: | |
https://electroniqueamateur.blogspot.com/2019/06/etude-de-ci-le-compteur-binaire-74ls193.html | |
*/ | |
// définition des broches utilisées | |
const int brocheQA = 2; | |
const int brocheQB = 3; | |
const int brocheQC = 4; | |
const int brocheQD = 5; | |
const int brocheUP = 6; | |
const int brocheDOWN = 7; | |
const int brocheLOAD = 8; | |
const int brocheA = 9; | |
const int brocheB = 10; | |
const int brocheC = 11; | |
const int brocheD = 12; | |
const int brocheCO = A0; | |
const int brocheBO = A1; | |
void setup() { | |
// deux sorties pour contrôler l'entrée du 74LS193 | |
pinMode(brocheUP, OUTPUT); | |
digitalWrite(brocheUP, HIGH); | |
pinMode(brocheDOWN, OUTPUT); | |
digitalWrite(brocheDOWN, HIGH); | |
// 4 entrées pour lire les sorties du 74LS193. | |
pinMode(brocheQA, INPUT); | |
pinMode(brocheQB, INPUT); | |
pinMode(brocheQC, INPUT); | |
pinMode(brocheQD, INPUT); | |
// 5 entrées pour régler la valeur du compteur | |
pinMode(brocheLOAD, OUTPUT); | |
digitalWrite(brocheLOAD, HIGH); | |
pinMode(brocheA, OUTPUT); | |
pinMode(brocheB, OUTPUT); | |
pinMode(brocheC, OUTPUT); | |
pinMode(brocheD, OUTPUT); | |
// détection des débordements | |
pinMode(brocheBO, INPUT); | |
pinMode(brocheCO, INPUT); | |
// affichage au moniteur série | |
Serial.begin(9600); | |
Serial.println("Test du compteur SN74LS193N"); | |
Serial.println(""); | |
} | |
void loop() { | |
// on effectue 25 additions | |
Serial.println("25 sadditions"); | |
for (int i = 0; i <= 24; i++) { | |
digitalWrite(brocheUP, LOW); | |
if (!digitalRead(brocheCO)) { | |
Serial.println("Ca deborde!"); | |
} | |
digitalWrite(brocheUP, HIGH); | |
affichage(); | |
delay(1000); | |
} | |
// on effectue 25 soustractions | |
Serial.println("25 soustractions"); | |
for (int i = 0; i <= 24; i++) { | |
digitalWrite(brocheDOWN, LOW); | |
if (!digitalRead(brocheBO)) { | |
Serial.println("Ca deborde!"); | |
} | |
digitalWrite(brocheDOWN, HIGH); | |
affichage(); | |
delay(1000); | |
} | |
} | |
void affichage() | |
{ | |
Serial.print("QD: "); | |
Serial.print(digitalRead(brocheQD)); | |
Serial.print(" QC: "); | |
Serial.print(digitalRead(brocheQC)); | |
Serial.print(" QB: "); | |
Serial.print(digitalRead(brocheQB)); | |
Serial.print(" QA: "); | |
Serial.println(digitalRead(brocheQA)); | |
} |
Plusieurs compteurs en cascade
Grâce aux sorties CO et BO, il est facile de relier plusieurs compteurs en cascade. En reliant la sortie CO du premier compteur à l'entrée UP du deuxième, et en reliant la sortie BO du premier compteur à l'entrée DOWN du deuxième, vous obtenez un compteur binaire à 8 bits, capable de compter de 0 à 255.
Un circuit vintage, sans microcontrôleur
Évidemment, le 74LS193 peut être utilisé sans le moindre microcontrôleur. Dans le circuit ci-dessous, les impulsions transmises à l'entrée UP du compteur sont générées par un timer 555 (en mode astable), et chacune des 4 sorties du compteur contrôle une LED.
Voici ce que ça donne: