Dernière mise à jour :
22/04/2009
Présentation
Ce générateur produit un train d'impulsions sur commande
(par exemple lors de l'appui sur un bouton poussoir), dont le
nombre précis peut être ajusté entre 1 et 65535 par
le biais de
microswitches ou d'un bus 16 bits quelconque, et utilise des compteurs
binaires, des portes NAND et une bascule D. Pour un montage similaire
mais
où le nombre d'impulsions peut être spécifié
directement en valeur
décimale (avec roues codeuses), merci de vous reporter à
la page
Générateur
d'impulsions 003.
Le schéma
Il
est certe possible d'obtenir la même chose avec un seul composant
programmable, mais où serait alors le plaisir des combinaisons
logiques "en dur" dont vous raffolez ?
Principe général
L'idée
de base est de procéder à un comptage d'impulsions en partant de zéro
et en allant jusqu'à une valeur comprise entre 1 et 65535 et choisie
par l'utilisateur. Une fois la valeur choisie atteinte, le compteur est
remis à zéro et se bloque, prêt à repartir pour un tour lors d'une
prochaine demande.
Le comptage
Le
comptage doit pouvoir aller jusqu'à 65535, ce qui impose une largeur
binaire de 16 bits (2 puissance 16 = 65536). Comme je n'ai pas trouvé
de compteur binaire
possédant de base 16 bits de sorties, je me suis rabattu sur deux
compteurs de type CD4040 mis en cascade, la dernière sortie du premier
compteur (Q11) aboutissant sur l'entrée horloge du second. Ici, pas
d'utilisation possible de CD4020 ou CD4060, auxquels il manque quelques
sorties intermédiaires. Les deux compteurs utilisés ici permettraient
d'aller
jusqu'à 24 bits, mais il ne faut tout de même pas trop exagérer...
Détection fin de comptage
Le
but consiste à détecter quand le nombre diviseur que l'on
a spécifié
est atteint. Par exemple, si on programme le nombre 5 (4 + 1 vu du
côté binaire), il nous faut une
information qui revienne toutes les 5 impulsions d'horloge (signal
d'entrée à diviser). Cette information doit en même
temps remettre à
zéro les compteurs. La solution la plus logique consiste
à employer une
porte AND dont le nombre d'entrées est au moins égale au
nombre de bits
qui sont actifs (à l'état logique haut) pour le nombre
choisi. Pour le
nombre 1, un seul bit est nécessaire, alors que pour le nombre
7, trois
bits sont nécessaires. Comme le nombre de bits activés
dépend du nombre
diviseur choisi et qu'il peut varier entre 1 bit (comptage
jusqu'à 1) et 16
bits (comptage jusqu'à 65535), il nous faut une porte AND dont
le nombre
d'entrées est variable, ce qui n'existe pas. En revanche, on
peut
prendre une porte AND à 16 entrées et n'en utiliser que
certaines,
celles qui ne sont pas utilisées étant alors
forcées à l'état logique
haut. A priori rien de bien compliqué, si ce n'est que l'on
travaille sur une largeur de "bus" de 16 bits et qu'il n'existe pas
(à
ma connaissance tout du moins) de porte AND possédant autant
d'entrées.
Il nous faut donc créer cette porte AND avec plusieurs portes
logiques
"plus petites". Ici, j'ai choisi d'utiliser deux portes NAND à 8
entrées (car je n'ai pas trouvé de porte AND à 8
entrées), suivies de portes NAND à deux entrées
destinées à former un tout
comparable à une unique grosse porte AND à 16
entrées. Notez bien que
j'ai employé les deux termes AND et NAND, il n'y a pas d'erreur
dans le
texte...
Remarque : si
vous souhaitez réduire le comptage (et donc le facteur de division) à
la valeur maximale de 255, un bus de 8 bits suffit et vous pouvez alors
vous contenter d'un seul compteur CD4040, d'une seule porte AND à 8
entrées et d'un seul ensemble de 8 microswitches.
Démarrage et Arrêt du compteur
Le démarrage du compteur s'effectue en appuyant sur le bouton
poussoir SW1 / Start, qui impose à la sortie Q de la bascule D
U5:A de passer à l'état haut. Dans ces conditions, la
porte NAND U6:D laisse passer les impulsions d'entrée
appliquées sur Fin, vers la sortie Out. Au même instant,
la sortie Q barre de la même bascule U5:A, qui était
à l'état haut et bloquait les compteurs U1 et U2 via leur
broches de remise à zéro (MR), passe à
l'état bas et autorise ainsi les deux compteur à compter.
Une fois que le nombre d'impulsions appliquées à
l'entrée des compteurs a atteint le nombre programmé par
l'utilisateur (513 sur le schéma, 512 + 1 vu côté
binaire), la sortie des deux portes NAND U3 et U4 passe à
l'état bas, ce qui, après passage dans les portes NAND
U6:A, U6:B et U6:C, conduit à obtenir une impulsion
négative en sortie de U6:C (borne 10). Cette impulsion, qui doit
servir pour bloquer les compteurs, n'est pas dans la bonne
polarité pour attaquer l'entrée de remise à
zéro de la bascule D U5:A. C'est pourquoi le transistor Q1 y est
intercallé, en tant qu'inverseur logique simple. La bascule D
peut maintenant recevoir son impulsion positive de remise à
zéro, ce qui pousse sa sortie Q à repasser à
zéro : plus aucune impulsion ne peut passer en sortie finale
Out, et les compteurs sont à nouveau bloqués. Le nombre
d'impulsions transmises sur la sortie Out correspond bien au nombre
programmé par l'utilisateur.
Remarque : la sortie Out est de
type "négative", ce qui signifie qu'au repos elle est à
l'état logique bas. Si vous souhaitez disposer d'une sortie de
type "logique positive", il suffit d'y ajouter un inverseur. Dans ce
cas, pourquoi ne pas envisager l'emploi d'un autre circuit
intégré de type CD4011, dont une porte serait
cablée en inverseur pour la sortie, et une autre porte
également câblée en inverseur pour remplacer le
transistor Q1 et sa résistance R4 ?