Programació en C del PIC 16F690 amb PICkit 2

.
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 la variable Valor a un registre de desplaçament.

void EnviaR8(char Valor) {
	char Port = 0;				// Variable on guardem l'estat del port B
	char Temp;				// Variable temporal
	for (int k = 1; k < 9; k++){
		Temp = Valor & 0b10000000;	// Agafa el bit de més a l'esquerra
						// Temp només podrà valer 0 o 128
		if (Temp == 0) {		// Si val 0
			Port = Port & 0b11101111;		// Desactiva Data (bit 4)
		} else {			// Si val 128
			Port = Port | 0b00010000;		// Activa Data (bit 4)
		}
		Valor = Valor << 1;		// Rodem els bits per situar el següent
		PORTB = Port;			// Ho posa al port B
		Port = Port | 0b00100000;	// Activa Clock (bit 5) i força lectura
		PORTB = Port;			// Ho posa al port B
		Port = Port & 0b11011111;	// Desactiva Clock (bit 5)
		PORTB = Port;			// Ho posa al port B
	}
	Port = Port | 0b01000000;		// Activa Latch (bit 6) per copiar a les sortides
	PORTB = Port;				// Ho posa al port B
}

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 dóna 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.

 

 

Licencia de Creative Commons
This obra by Oriol Boix is licensed under a Creative Commons Reconocimiento-NoComercial-SinObraDerivada 3.0 Unported License.