Différences entre versions de « Shift register »

De The Linux Craftsman
Aller à la navigation Aller à la recherche
(Page créée avec « = Introduction = Le [https://fr.wikipedia.org/wiki/Registre_%C3%A0_d%C3%A9calage registre à décalage] permet de contrôler, avec seulement 3 entrées digitales d'un micr... »)
 
Ligne 2 : Ligne 2 :
 
Le [https://fr.wikipedia.org/wiki/Registre_%C3%A0_d%C3%A9calage registre à décalage] permet de contrôler, avec seulement 3 entrées digitales d'un microcontrôleur, un nombre beaucoup plus grand (8,16,24,etc...) d'entrées / sorties. Le registre à décalage que nous allons utiliser et le ''74HC595'' de chez [https://fr.wikipedia.org/wiki/Texas_Instruments Texas Instrument].
 
Le [https://fr.wikipedia.org/wiki/Registre_%C3%A0_d%C3%A9calage registre à décalage] permet de contrôler, avec seulement 3 entrées digitales d'un microcontrôleur, un nombre beaucoup plus grand (8,16,24,etc...) d'entrées / sorties. Le registre à décalage que nous allons utiliser et le ''74HC595'' de chez [https://fr.wikipedia.org/wiki/Texas_Instruments Texas Instrument].
 
[[Fichier:SN74HC595.jpg|150px|centré]]
 
[[Fichier:SN74HC595.jpg|150px|centré]]
 +
=Diagramme=
 +
Voici le diagramme du ''74HC595'' ainsi que l'explication du rôle de chacune de ces broches
 +
<div align="center">
 +
{|class="wikitable" width="85%"
 +
! Diagramme !! broche !! nom !! fonction
 +
|-valign=center
 +
|rowspan="10"|[[Fichier:74HC595 diagram.png|centré]]
 +
|-
 +
||Q0 à Q7||Parallel data output || Sorties pilotables du registre
 +
|-
 +
||GND|| Masse || 0V
 +
|-
 +
||VCC|| Positif || 7V max
 +
|-
 +
||DS || Data serial || Donnée d'entrée du registre<br>Niveau haut pour un ''1'' et bas pour un ''0''
 +
|-
 +
||OE ||Output Enable || Active Q0 à Q7 sur niveau bas (0V)<br>On relie généralement cette broche au niveau bas (GND) pour activer les sorties de manière permanente
 +
|-
 +
||STCP|| Storage Clock Pin || Lorsque cette broche est à un niveau haut, le registre est basculé en mémoire<br>La bascule permet de positionner et mémoriser l'état des broches Q0 à Q7
 +
|-
 +
||SHCP|| Shift Clock Pin || Lorsque la broche est à un état haut, l'état de la broche ''DS'' est basculé dans le registre
 +
|-
 +
||MR || Master Reset || Vide la mémoire du registre sur niveau bas (0V)<br> On relie généralement cette broche au niveau haut (VCC) pour éviter une remise à zéro permanente
 +
|-
 +
||Q7S|| Sortie série || Permet de chainer un autre registre à décalage
 +
|}
 +
</div>
 +
= Fonctionnement =
 +
Le registre ''74HC595'' fonctionne sur 8 bits et pour comprendre son fonctionnement on va faire l'analogie avec un tableau de booléen.
 +
Chaque casse du tableau correspond à une broche de sortie (Q0 à Q7). Si la case contient la valeur ''false'' la broche est à un état bas (GND) et, si la casse contient ''true'' la broche est à un état haut (VCC). Les valeur de ce tableau se positionnent les unes après les autres, chaque nouvelle valeur décalant la précédente d'une case.
 +
 +
Au départ le registre est à zéro :
 +
<div align="center">
 +
{|border="1" width="400px"
 +
|-
 +
|align="center"|
 +
Q0
 +
|align="center"|
 +
Q1
 +
|align="center"|
 +
Q2
 +
|align="center"|
 +
Q3
 +
|align="center"|
 +
Q4
 +
|align="center"|
 +
Q5
 +
|align="center"|
 +
Q6
 +
|align="center"|
 +
Q7
 +
|-
 +
|align="center"|
 +
0
 +
|align="center"|
 +
0
 +
|align="center"|
 +
0
 +
|align="center"|
 +
0
 +
|align="center"|
 +
0
 +
|align="center"|
 +
0
 +
|align="center"|
 +
0
 +
|align="center"|
 +
0
 +
|}
 +
</div>
 +
Lorsque l'on insère un ''1'', celui-ci prend la place Q0 en décalant tous les autre bit de une case :
 +
<div align="center">
 +
{|border="1" width="400px"
 +
|-
 +
|align="center"|
 +
Q0
 +
|align="center"|
 +
Q1
 +
|align="center"|
 +
Q2
 +
|align="center"|
 +
Q3
 +
|align="center"|
 +
Q4
 +
|align="center"|
 +
Q5
 +
|align="center"|
 +
Q6
 +
|align="center"|
 +
Q7
 +
|-
 +
|align="center"|
 +
1
 +
|align="center"|
 +
0
 +
|align="center"|
 +
0
 +
|align="center"|
 +
0
 +
|align="center"|
 +
0
 +
|align="center"|
 +
0
 +
|align="center"|
 +
0
 +
|align="center"|
 +
0
 +
|}
 +
</div>
 +
Si on insère maintenant un ''0'', celui-ci prend la place Q0 en décalant tous les autre bit de une case :
 +
<div align="center">
 +
{|border="1" width="400px"
 +
|-
 +
|align="center"|
 +
Q0
 +
|align="center"|
 +
Q1
 +
|align="center"|
 +
Q2
 +
|align="center"|
 +
Q3
 +
|align="center"|
 +
Q4
 +
|align="center"|
 +
Q5
 +
|align="center"|
 +
Q6
 +
|align="center"|
 +
Q7
 +
|-
 +
|align="center"|
 +
0
 +
|align="center"|
 +
1
 +
|align="center"|
 +
0
 +
|align="center"|
 +
0
 +
|align="center"|
 +
0
 +
|align="center"|
 +
0
 +
|align="center"|
 +
0
 +
|align="center"|
 +
0
 +
|}
 +
</div>
 +
On peut continuer notre exemple en insérant maintenant les bits suivants ''1'', ''1'', ''0'', ''0'', ''1'' puis ''1'' :
 +
<div align="center">
 +
{|border="1" width="400px"
 +
|-
 +
|align="center"|
 +
Q0
 +
|align="center"|
 +
Q1
 +
|align="center"|
 +
Q2
 +
|align="center"|
 +
Q3
 +
|align="center"|
 +
Q4
 +
|align="center"|
 +
Q5
 +
|align="center"|
 +
Q6
 +
|align="center"|
 +
Q7
 +
|-
 +
|align="center"|
 +
1
 +
|align="center"|
 +
1
 +
|align="center"|
 +
0
 +
|align="center"|
 +
0
 +
|align="center"|
 +
1
 +
|align="center"|
 +
1
 +
|align="center"|
 +
0
 +
|align="center"|
 +
1
 +
|}
 +
</div>
 +
= Chaînage =
 +
Il est possible de chaîner plusieurs registres à la suite en reliant la broche Q7S du registre précédent avec la broche DS du registre suivant. La particularité de la broche Q7S est de prendre l'état du bit sortant du registre permettant ainsi de l'injecter dans l'entrée du registre suivant.
 +
 +
On peut reprendre notre exemple en insérant maintenant un ''0'' :
 +
<div align="center">
 +
{|border="1" width="400px"
 +
|-
 +
|align="center"|
 +
Q0
 +
|align="center"|
 +
Q1
 +
|align="center"|
 +
Q2
 +
|align="center"|
 +
Q3
 +
|align="center"|
 +
Q4
 +
|align="center"|
 +
Q5
 +
|align="center"|
 +
Q6
 +
|align="center"|
 +
Q7
 +
|align="center"|
 +
Q7S
 +
|-
 +
|align="center"|
 +
0
 +
|align="center"|
 +
1
 +
|align="center"|
 +
1
 +
|align="center"|
 +
0
 +
|align="center"|
 +
0
 +
|align="center"|
 +
1
 +
|align="center"|
 +
1
 +
|align="center"|
 +
0
 +
|align="center"|
 +
1
 +
|}
 +
</div>
 +
La séquence est décalée d'une case ''poussant'' l'ancienne valeur de Q7 (''1'') en dehors du registre sur la broche Q7S.
 +
[[Fichier:Chained shift registers.png|centré]]
 +
= Exemple d'utilisation =

Version du 9 mars 2018 à 20:04

Introduction

Le registre à décalage permet de contrôler, avec seulement 3 entrées digitales d'un microcontrôleur, un nombre beaucoup plus grand (8,16,24,etc...) d'entrées / sorties. Le registre à décalage que nous allons utiliser et le 74HC595 de chez Texas Instrument.

SN74HC595.jpg

Diagramme

Voici le diagramme du 74HC595 ainsi que l'explication du rôle de chacune de ces broches

Diagramme broche nom fonction
74HC595 diagram.png
Q0 à Q7 Parallel data output Sorties pilotables du registre
GND Masse 0V
VCC Positif 7V max
DS Data serial Donnée d'entrée du registre
Niveau haut pour un 1 et bas pour un 0
OE Output Enable Active Q0 à Q7 sur niveau bas (0V)
On relie généralement cette broche au niveau bas (GND) pour activer les sorties de manière permanente
STCP Storage Clock Pin Lorsque cette broche est à un niveau haut, le registre est basculé en mémoire
La bascule permet de positionner et mémoriser l'état des broches Q0 à Q7
SHCP Shift Clock Pin Lorsque la broche est à un état haut, l'état de la broche DS est basculé dans le registre
MR Master Reset Vide la mémoire du registre sur niveau bas (0V)
On relie généralement cette broche au niveau haut (VCC) pour éviter une remise à zéro permanente
Q7S Sortie série Permet de chainer un autre registre à décalage

Fonctionnement

Le registre 74HC595 fonctionne sur 8 bits et pour comprendre son fonctionnement on va faire l'analogie avec un tableau de booléen. Chaque casse du tableau correspond à une broche de sortie (Q0 à Q7). Si la case contient la valeur false la broche est à un état bas (GND) et, si la casse contient true la broche est à un état haut (VCC). Les valeur de ce tableau se positionnent les unes après les autres, chaque nouvelle valeur décalant la précédente d'une case.

Au départ le registre est à zéro :

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

0

0

0

0

0

0

0

0

Lorsque l'on insère un 1, celui-ci prend la place Q0 en décalant tous les autre bit de une case :

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

1

0

0

0

0

0

0

0

Si on insère maintenant un 0, celui-ci prend la place Q0 en décalant tous les autre bit de une case :

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

0

1

0

0

0

0

0

0

On peut continuer notre exemple en insérant maintenant les bits suivants 1, 1, 0, 0, 1 puis 1 :

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

1

1

0

0

1

1

0

1

Chaînage

Il est possible de chaîner plusieurs registres à la suite en reliant la broche Q7S du registre précédent avec la broche DS du registre suivant. La particularité de la broche Q7S est de prendre l'état du bit sortant du registre permettant ainsi de l'injecter dans l'entrée du registre suivant.

On peut reprendre notre exemple en insérant maintenant un 0 :

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

Q7S

0

1

1

0

0

1

1

0

1

La séquence est décalée d'une case poussant l'ancienne valeur de Q7 (1) en dehors du registre sur la broche Q7S.

Chained shift registers.png

Exemple d'utilisation