Controlar Display de 7 Segmentos Con Shift Register

Embed Size (px)

Citation preview

SHIFT REGISTER que son y cmo se usan?

Etiquetas: 74hc165, 74hc595, 74xx165, 74xx595, Diagrama, Electrnica, PIC, Registro de desplazamiento, Robtica, Shift register, SiLMuP

Un registro de desplazamiento (shift register en ingls), es un integrado capaz de almacenar bits y presentarlos en sus pines. Hay varios tipos pero los que aqu nos interesan son los del tipo Serial-Paralelo y Paralelo-Serial, esto significa que en el primer caso los bits "entran" en forma serial (uno a uno) y "salen" de forma paralela, en el segundo caso entrar en paralelo (todos juntos) y salen en serie. Unos de los integrados que hacen esto, entre muchos otros, son el 74HC595 y el 74HC165, que son Serial/Paralelo y Paralelo/Serial respectivamente. El pinout del 74HC595 es el siguiente:

Los pines marcados como Q0-Q7 son salidas y reflejan el estado interno de cada bit cuando es activado poniendo a nivel alto el pin 12 (STCP), los datos ingresan de forma serial por el pin 14(DS) cada vez que el pin SHCP pasa de estado bajo a alto ( de 0v a 5v). Tambin se pueden enlazar varios integrados iguales de modo que ampliamos la cantidad de bits. para ello agregamos un segundo integrado y conectamos la patilla DS a la patilla Q7' del primero. La secuencia seria la siguiente: 1.Se pone el pin DS en el estado del bit que se quiera ingresar 2.Pin SHCP en bajo 3.Pin SHCP en alto 4.Se repite el proceso hasta enviar los 8 bits 5.Se coloca el pin STCP en bajo 6.Se coloca el pin STCP en alto

y de esa forma aparece el byte en las salidas. Pinout del 74HC165:

De manera similar funciona el 74HC165 solo que a los bit los "lee" todos juntos. Aqu las entradas son D0 a D7 y la salida es Q7, PL es el Load y cuando pasa a estado bajo carga los valores de las patas D0-D7 en "memoria" y dandole pulsos altos y bajos a CP los datos van saliendo bit a bit. Para encadenar varios basta con conectar Q7 de un integrado con DS del siguiente y leer la pata Q7 del ltimo. Este es el diagrama de conexin para leer 16 bits (2bytes) con dos integrados enlazados:

La forma de proceder sera asi: Se pone en bajo el Load para tomar el estado de todas las entradas (b0 a b15) luego se envia la seal de reloj poniendo en bajo y luego en alto Clk y se lee el estado de DI (Data-In). Recordar que en DI aparecer primero el bit mas significativo (MSB). Esta tcnica es vlida para controlar un display LCD, o multiplexar cualquier dato. Aqu esta el cdigo en CSS C: #include #define #define #define #use #use Clk Load DI Pin_A0 Pin_A1 Pin_A2

fast_io(a) fast_io(b)

int Leer_Shift (void); void main(void){ set_tris_A(0b10100); set_tris_B(0b00000000); do{ if (input(pin_a4)==true) output_b(leer_shift()); }while(true); } int Leer_Shift (void){ int t; int Lectura=0;

output_low (Load); las output_high(Load); for(t=0;t200){ time=0; Flag=true; } } for(t=0;t>=1; (128,64,32...) // Divide la mascara que compara con Visor[]

} output_low(Load); output_high(Load);// El contenido interno del integrado pasa a las salidas. } void main(){ int k; set_tris_a(0x00); set_tris_b(0x00); for (k=0;k