Programació en pic-as del PIC 16F690

Referència Trucs Perifèrics   Recursos CITCEA
Tutorial Exemples Projectes   Inici

Registre de desplaçament

Un registre de desplaçament és un circuit integrat que ens permet controlar vuit sortides reals a partir de només tres potes del microcontrolador. Podem enviar els vuit bits un darrera l'altre fent servir dues potes del microcontrolador, una per enviar els bits (DS) i una com a rellotge o sincronisme (SH_CP). Primer enviem el valor que correspon al bit 7, després el del bit 6 i així successivament fins arribar al bit 0. Quan ja hem enviat tots els bits, podem copiar simultàniament els valors dels vuit bits sobre les sortides activant una altra pota (ST_CP).

A continuació es descriuen les diferents potes del registre de desplaçament 74HC595:

Registre

Número pota Nom Funció                         Número pota Nom Funció
1 Q1 Sortida 1 9 Q7' Sortida del registre per entrar al registre següent
2 Q2 Sortida 2 10 MR Reset Quan el posem a zero, posa a zero tots els bits del registre
3 Q3 Sortida 3 11 SH_CP Clock Quan s'activa, fa córrer el registre i copia DS sobre la posició 0
4 Q4 Sortida 4 12 ST_CP Latch Quan s'activa, copia el registre sobre les sortides
5 Q5 Sortida 5 13 OE Output enable Quan es posa a 1, desconnecta les sortides
6 Q6 Sortida 6 14 DS Data Entrada de dades
7 Q7 Sortida 7 15 Q0 Sortida 0
8 GND Alimentació 0 V 16 VCC Alimentació +5 V

En el següent diagrama es mostra com connectar el registre per controlar vuit LED.

Connexió del registre

A continuació hi ha una funció que envia el contingut de l'adreça Sortida a un registre de desplaçament.

Port EQU 0x20  ; Bits a enviar al port B
Sortida EQU 0x21  ; Valors a enviar al registre de desplaçament
Compta EQU 0x22  ; Variable per comptar els bits
...
...
;
; Envia 8 bits a un registre de desplaçament
; Els bits estan a la variable Sortida
; Al final de la funció, el valor de Sortida queda corromput
; Si es vol conservar, cal copiar-lo a una altra variable
;
EnviaR8:  ; Envia 8 bits a un registre de desplaçament
  bcf Port,5  ; S'assegura que Clock està desactivat
  bcf Port,6  ; S'assegura que Latch està desactivat
              ; En cas contrari, els bits enviats es copiarien immediatament a les sortides
  movf Port,w  ; Agafa el valor de Port
  movwf PORTB  ; I el posa al port B
  movlw 8  ; Número de bits a enviar
  movwf Compta  ; Variable per comptar els bits
BucleR8:
  bcf Port,4  ; Desactiva Data. Si toca activar-ho, ja ho farem
  rlf Sortida,f  ; Fa sortir el bit de més a l'esquerra cap a C i roda els altres a l'esquerra
  btfsc CARRY  ; Mira si el bit de l'esquerra era un 1
  bsf Port,4  ; Si era 1, activa Data
  movf Port,w  ; Agafa el valor de Port. El valor que ha canviat és Data
  movwf PORTB  ; I el posa al port B
  bsf Port,5  ; Activa Clock, forçant a llegir el bit
  movf Port,w  ; Agafa el valor de Port. El valor que ha canviat és Clock
  movwf PORTB  ; I el posa al port B
  bcf Port,5  ; Desactiva Clock
  movf Port,w  ; Agafa el valor de Port. El valor que ha canviat és Clock
  movwf PORTB  ; I el posa al port B
  decfsz Compta  ; Decrementa Compta
  goto BucleR8  ; Si Compta no és zero, repeteix el bucle
  bsf Port,6  ; Torna a activar Latch. Els valors es copiaran a la sortida del registre
  movf Port,w  ; Agafa el valor de Port. El valor que ha canviat és Latch
  movwf PORTB  ; I el posa al port B
  return
...

Els registres de desplaçament es poden posar en cadena. Així, si en posem dos podrem controlar setze sortides amb només tres potes del microcontrolador. La pota Q7' del primer registre ens dona el valor que hem d'entrar a la pota DS del segon. Per tant, el primer valor que entrem acabarà a la sortida 15 i el darrer a la sortida 0.

En el següent esquema es mostra com connectar dos registres per controlar setze LED.

Connexió de dos registres

Seguint el mateix criteri, podem encadenar tants registres com sigui necessari.

 

 

Llicència de Creative Commons
Aquesta obra d'Oriol Boix està llicenciada sota una llicència no importada Reconeixement-NoComercial-SenseObraDerivada 3.0.