INTERFACE DEL PIC 16F84A HACIA EL 74HC165 SHIFT REGISTER
El 74HC165 es un MUX de 8 bits de entrada a 1 bits de salida serial; su conexión es muy simple de implementar y es muy útil en caso de tener múltiples entradas para ser conectadas en forma de cascada.
La trasmisión del circuito es en forma serial, tomando los 8 bits en modo paralelo y llevándolo a modo serial al pic.
El siguiente circuito demostrará su funcionamiento con un solo 74HC165
de 8 bits de entradas a uno de salida:
Diagrama de conexión:
Este circuito solo deja entrar 8 bits por los puertos del 74HC165 D0-D7 y lo hará ingresar al PIC desde Q7 hasta el puerto PB1 del PIC; activando así 2 leds del PA1 y PA2 solo si la data es 00000000 ó 11110000 respectivamente.
El CP es usado como clock para hacer la sincronización del PIC con el MUX.
EL PL es la entrada en bajo para que active el MUX
INCLUDE "modedefs.bas"
define osc 4
DEFINE SHIFT_PAUSEUS 100
OUTPUT PORTA.1
OUTPUT PORTA.2
OUTPUT PORTB.0
INPUT PORTB.1
OUTPUT PORTB.2
DATO VAR word
loop:
LOW PORTB.2
PAUSE 1
HIGH PORTB.2
PAUSE 1
SHIFTIN PORTB.1,PORTB.0,0,[DATO\16]
IF DATO = $FF00 THEN
HIGH PORTA.1
ELSE
LOW PORTA.1
ENDIF
IF DATO = $00F0 THEN
HIGH PORTA.2
ELSE
LOW PORTA.2
ENDIF
GOTO LOOP
end
En el siguiente circuito haremos lo mismo pero conectando dos 74HC165 en cascada para poder obtener 16 bits de entrada hacia el puerto del PIC.
El truco para este circuito es solo colocar los datos de salida del 74HC165 en la entrada serial del otro 74HC165, colocar el CP con el otro CP al igual que el PL, el resto es lo mismo. En el programa cambia la longitud de los bits por eso que se cambia a tamaño Word y de extensión para 16 bits. Este diagrama se puede seguir implementando indefinidamente según la cantidad de bits que desee como entradas.
INCLUDE "modedefs.bas"
define osc 4
DEFINE SHIFT_PAUSEUS 100
OUTPUT PORTA.1
OUTPUT PORTA.2
OUTPUT PORTB.0
INPUT PORTB.1
OUTPUT PORTB.2
DATO VAR word
loop:
LOW PORTB.2
PAUSE 1
HIGH PORTB.2
PAUSE 1
SHIFTIN PORTB.1,PORTB.0,0,[DATO\16]
IF DATO = $FF00 THEN
HIGH PORTA.1
ELSE
LOW PORTA.1
ENDIF
IF DATO = $00F0 THEN
HIGH PORTA.2
ELSE
LOW PORTA.2
ENDIF
GOTO LOOP
end
No hay comentarios:
Publicar un comentario