compteur de visiteur widget compteur de visite  
Centrale DCC V3.4
Le CIRCUIT 74LS165







Le CIRCUIT 74LS165
Le circuit 74LS165 est un registre à décalage. Le 74LS165 est réalisé en technologie TTL (Transistor Transistor Logic).
Il existe également le CD4021 qui est un registre à décalage réalisé en technologie CMOS.

Un registre à décalage permet de transformer un message parallèle en un message série. Ils réalisent l'opération inverse du 74HC595 qui permet de transformer un message série en un message parallèle.

Ces deux circuits permettent de récupérer des informations en grande quantité, puisque que l'on peut les cascader afin d'en augmenter les entrées et de les envoyer vers une électronique de traitement avec un minimum de fils.

On les utilise pour augmenter les entrées numériques d'un Arduino ou d'une manière générale pour faire remonter des informations numériques quelconques vers l'Arduino.

Une des applications possible est de réaliser un bus S88, qui permet de récupérer les informations de détecteurs de canton (ou autre) d'un réseau et ensuite de faire remonter ces informations vers le PC pour visualiser en temps réel sur un TCO la représentation de l'état d'occupation des cantons du réseau.

BROCHAGE du 74LS165
Le circuit est constitué d'un boitier 16 broches.

Pour le 74LS165 :
• Une broche pour l'alimentation (Vcc),
• Une broche pour la masse (Vdd),
• 8 entrées parallèles numérotées de (A à H),
• 2 horloges (Clock et Clock Inhibit),
• Une sortie série (vers l'Arduino) (Output Qh broche 9),
• Une sortie série donnant l'information inverse de la précédente (vers l'Arduino),  (Output Qh broche 7),
• Une sortie qui permet de relier plusieurs circuits entre-eux pour augmenter le nombre d'entrées (Cascade) (Serial Input),
• Une entrée de verrouillage (SHIFT/LOAD).

brochage 74ls165
Brochage du 74LS165

Pour commander et recevoir les données depuis un Arduino 3 fils de commande sont nécessaires :
SHIFT/LOAD : Qui permet de verrouiller les informations présentent sur les entrées,
CLOCK : Ce signal permet de faire remonter les informations vers l'Arduino à la fréquence de l'horloge, 
• OUTPUT QH : Cette sortie envoie vers l'Arduino les informations présentent sur les entrées parallèles sous forme d'un signal série. 

Nota : Il est possible de monter ce circuit en cascade pour multiplier le nombre d'entrées, mais la commande et la réception depuis l'Arduino ne nécessitera toujours que ces 3 fils.

INTERFAÇAGE avec l'ARDUINO
Pour interfacer le 74LS165 avec l'Arduino toutes les broches du circuit ne sont pas nécessaires :
• La broche 16, Vcc sera reliée à un potentiel de 5v,
• La broche 8, Vdd sera reliée à la masse de l'alimentation,
• Les entrées parallèles, A à H, seront reliées à un 1 logique (5v), ou à un 0 logique (0v),
• La broche 15, Clock Inhibit sera reliée à la masse,
• La broche 1, Shift/Load (Verrouillage) sera reliée à l'Arduino,
• La broche 2, Clock (Horloge) sera reliée à l'Arduino,
• La broche 9, Outout Qh (Sortie série) sera reliée à l'Arduino,

• Les autres broches ne sont pas utilisées lorsque l'on utilise un seul circuit.

raccordement 74ls165 avec l'arduino
Interfaçage du 74LS165 avec l'Arduino

PRINCIPE de FONCTIONNEMENT
Une fois que les connexions entre le 74LS165 et l'Arduino sont réalisées, il faut faire remonter les niveaux logiques présents sur les entrées parallèles vers l'Arduino.

1). Les entrées parallèles du 74LS165 voient sur ces entrées les niveaux logiques provenant de la circuiterie correspondante (Interrupteur, détecteur,...) :
• Lorsque l'utilisateur souhaite connaître les états logiques présents sur les entrées parallèles du 74LS165, il fait passer le niveau logique de la broche 1 (Shift/Load) à l'état bas et le remet à l'état haut ensuite :
   • Cela a pour conséquence de transférer et de mémoriser les niveaux logiques présents aux entrées parallèles dans le 74LS165 et de les verrouiller,
   • La sortie de la broche 9, Outout Qh, prend alors le niveau logique de la sortie H, 
   • Tant que la broche 1 (Shift/Load) est à l'état bas, les données sont verrouillées dans le 74LS165 et ne changent plus, et ce, même si les niveaux logiques présents sur les entrées parallèles sont modifiés.

valeurs présentent sur les entrées
Valeurs présentent sur les entrées
valeurs verouillees dans le 74ls165
Valeurs verrouillées dans le 74LS165

2).
 L'utilisateur agit ensuite sur le circuit d'horloge pour récupérer les données parallèles sous la forme série :
  • L'utilisateur envoie :
      • Un top d'horloge et le niveau logique de l'entrée H est envoyé sur la voie série,

transmission des valeurs sur la voie serie
Transmission des valeurs sur la voie série
     
    • Un top d'horloge et le niveau logique de l'entrée G est envoyé sur la voie série,

transmission des valeurs sur la voie serie
Transmission des valeurs sur la voie série
   
    • Un top d'horloge et le niveau logique de l'entrée F est envoyé sur la voie série,
    • Un top d'horloge et le niveau logique de l'entrée E est envoyé sur la voie série,
    • Un top d'horloge et le niveau logique de l'entrée D est envoyé sur la voie série,
    • Un top d'horloge et le niveau logique de l'entrée C est envoyéesur la voie série,
    • Un top d'horloge et le niveau logique de l'entrée B est envoyé sur la voie série,
    • Un top d'horloge et le niveau logique de l'entrée A est envoyé sur la voie série.

Les niveaux logiques des entrées parallèles sont transmis sur la voie série dans l'ordre inverse de leur numérotation.

transmission des valeurs au rythme des tops d'horloge
Transmission des valeurs au rythme des tops d'horloge
Le 74LS165 en CASCADE
Il est possible pour multiplier le nombre d'entrée numérique, de raccorder les 74LS165 en cascade.

Pour ce faire il faut relier :
 • La broche 10 Serial/Input du circuit 1 à la broche 9 Output Qh du circuit suivant et ainsi de suite,
 • La ligne verrouillage doit être prolonger sur le circuit 2 en parallèle et ainsi de suite,
 • La ligne d'horloge doit être prolonger sur le circuit 2 en parallèle et ainsi de suite,

Les données sont récupérées sur la sortie Output Qh du circuit 1 quel que soit le nombre de circuit en cascade.

Comme le montage comporte deux circuits, donc maintenant 16 entrées, il faudra envoyer deux fois plus de top d'horloge pour récupérer l'ensemble des données. Le nombre de top d'horloge pour récupérer les données doit correspondre aux nombres d'entrées.

L'intérêt d'un tel circuit comme on peut le voir sur le schéma, est que le nombre de connexion sur l'Arduino n'a pas changé.

connexion de deux 74ls165 en cascade
Connexion de deux 74LS165 en cascade

connexion de trois 74ls165 en cascade
Connexion de trois 74LS165 en cascade

SKETCH ARDUINO
Une fois que le montage électronique est réalisé, il faut programmer l'Arduino pour récupérer les données présentent sur les entrées du ou des circuits 74LS165.

Pour cela le programme doit envoyer des commandes dans un ordre précis pour récupérer ces données.

1. Placer la ligne VERROUILLAGE dans un état HAUT dans le setup,
2. Placer la ligne HORLOGE dans un état BAS dans le setup,

3. Placer l'entrée VERROUILLAGE dans un état BAS suivi d'un état HAUT pour verrouiller les données présentent sur les entrées dans le 74LS165,
4. On récupère la valeur présente sur l'ENTRÉE SÉRIE, puisque lors du verrouillage du 74LS165 la donnée présente sur l'entrée H est transmise immédiatement sur la sortie OUTPUT Qh broche 9,

5. On stocke la valeur récupérée,
6. On réalise un top d'horloge en faisant passer la broche HORLOGE dans un état HIGH suivi d'un état BAS. La donnée présente sur l'entrée G est maintenant présente sur la sortie OUTPUT Qh broche 9,
7. On récupère la valeur présente sur l'entrée série,
8. On répète les opérations à partir du point 5 le nombre de fois nécessaire pour récupérer l'ensemble des données présentent sur les entrées du ou des 74LS165. A chaque top d'horloge les données présentent sur les entrées se décalent dans un sens H, G, F, E, D, C, B, A, du premier circuit vers le dernier lorsqu'il y a plusieurs circuits en cascade.

                              //Stockage des données provenant du ou des 74LS165 dans un tableau et envoie sur la voie série de l'Arduino

//Déclaration des PIN de l'Arduino

#define Verrouillage 4 
#define Horloge 3 
#define Entree_donnees 2


//Déclaration d'un tableau pour stocker les données reçues. [8] correspond au nombre d'entrée à récupérer
int valeurs_S88[8];

void setup()  
 {
  Serial.begin (9600); //Déclaration Voie série PC, vitesse 9600 bauds

  pinMode(Verrouillage, OUTPUT); //Déclaration de la broche Verrouillage en sortie

  pinMode(Horloge, OUTPUT)//Déclaration de la broche Horloge en sortie
  pinMode(Entree_donnees, INPUT); //Déclaration de la broche Entree_donnees en entrée


  digitalWrite(Horloge, LOW); //Place la broche Horloge à l'état Bas
  digitalWrite(Verrouillage, HIGH); //Place la broche Verrouillage à l'état Haut

 }//Fin du void Setup ()


void loop()  
 {

  // On fait passer la pin 4 de l'Arduino à un état BAS suivi d'un état HAUT pour verrouiller les entrées dans le 74LS165 
  digitalWrite(Verrouillage, LOW); 
  digitalWrite(Verrouillage, HIGH); 

 

//Boucle pour récupérer les valeurs par paquets de 8
    for (int i = 0; i <= 7; i ++) 
     { 

       // On enregistre l'état de la sortie (pin 9) du 74LS165 dans le tableau
       valeurs_S88[i] = digitalRead (Entree_donnees); //Entrée PIN 2 de l'Arduino
  
       // On fait passer la pin 3 (Horloge) de l'Arduino à un état HAUT suivi d'un état BAS pour décaler les entrées du 74LS165 à lire
       digitalWrite(Horloge, HIGH); 
       digitalWrite(Horloge, LOW);
 
 
      } //Fin du for (int i = 0; i <= 7; i ++)

//Boucle pour récupérer les valeurs par paquets de 8
    for (int i = 0; i <= 8; i ++) 
     { 
      if (i < 8)
         { Serial.print (valeurs_S88[i]); } //On affiche sur le moniteur série les valeurs récupérées 

     
          else
         { Serial.println (""); }
//Une fois les valeurs récupérées on saute une ligne
   
      } //Fin du for (int i = 0; i <= 8; i ++) 


 }//Fin du void loop ()

SKETCH pour récupérer et afficher les données des 74LS165

resultat du sketch sur le moniteur serie
Résultat du sketch sur le moniteur série