Alarma antirrobo

Anuncio
ALARMA ANTIRROBO
La alarma queda conectada por medio de un dip−switch que alimenta al microcontrolador (16F84). Una vez
el microcontrolador recibe corriente (en este caso ante la imposibilidad de implementar en hardware esta
opción, colocamos el dipswitch justo antes de la tierra común). Una vez la alarma recibe corriente, se inicia
una cuenta atrás de 9 a 0 (representada en el display de 7 segmentos), durante la cual el optoacoplador no
está a la escucha. La aplicación de este proceso sería tener la alarma conectada, en casa por ejemplo, por
medio de un interruptor. Una vez que lo hemos conectado, salimos de casa, y tras finalizar la cuenta atrás, la
alarma queda armada. Si algo pasa por el optoacoplador, por ejemplo, un ladrón, comienza de nuevo una
cuenta atrás representada en el display, al final de la cual, si no se desconecta el interruptor que alimenta la
alarma (podría hacerse por medio de una llave especial), un diodo led se encenderá y una sirena (zumbador)
comenzará a sonar intermitentemente. La única forma de desconectar la alarma es cortando la alimentación.
NOTA:
En el circuito presentado, el interruptor que menciono que debiera de cortar la alimentación al pic, no hace
realmente eso, ya que no es posible teniendo en cuenta que la placa de prototipos PIC 18−ME ya implementa
determinadas funciones, una de las cuales es la alimentación del PIC. Por este motivo, en lugar de conectarlo
como describo, lo conecto a tierra. De modo que todos los elementos antes de conectarse a tierra, pasan por
el interruptor. El efecto sin embargo, no es el mismo, por lo cual incluyo esta nota.
Inicio
Cuenta Atrás
De 9 a 0
( y apaga el display)
SLEEP
(Sale de él por medio del
optoacoplador conectado
a RB0)
Cuenta atrás, esperando una
posible desconexión
El diodo se enciende,
y el zumbador suena
LIST P=16F84 ;Se indica al ensamblador el tipo de pic
RADIX HEX ;Por defecto utilizaremos hexadecimal
W EQU 0x00 ;Renombramos los registros, para no tener
1
F EQU 0x01 ;que trabajar con direcciones de memoria
Z EQU 0x02
PC EQU 0x02
ESTADO EQU 0x03
PA EQU 0x05
PB EQU 0x06
INTCON EQU 0x0B
TMR_OPT EQU 0x01
CONTAR EQU 0x0C
TEMPO1 EQU 0x0D
ORG 0 ;Saltamos el vector de interrupción
GOTO INICIO
ORG 4 ;El vector de interrupción nos remite a
GOTO OPTO_INT ;una etiqueta llamada "OPTO_INT"
ORG 5
INICIO BSF ESTADO,5 ;Cambiamos al banco 1
MOVLW b'00000001' ;Establecemos el bit 0 de la puerta B como
;entrada (optoacoplador), y el resto como
;salidas.
MOVWF PB
MOVLW b'11111100' ;establecemos los 2 primeros bits de la
;puerta A como salidas (zumbador y led)
MOVWF PA
MOVLW b'10000000' ;permitimos las interrupciones
MOVWF INTCON
MOVLW b'01000111' ;inicializamos el preescaler del timer
2
MOVWF TMR_OPT
BCF ESTADO,5 ;cambiamos al banco 0
CLRF PB ;borramos lo que haya en la puerta A y B
CLRF PA
BCF INTCON,4 ;nos aseguramos que la interrupción de P0
;no está permitida
CALL CUENTA ;comenzamos la cuenta atrás
BCF PB,0 ;borramos el contenido que pudiera tener
;la puerta B en su bit 0
BCF INTCON,1 ;por si se ha activado el flag al pasar
;alguien por el optoacoplador, lo ponemos
;a 0
BSF INTCON,4 ;permitimos la interrupción por P0
SLEEP ;modo SLEEP
DELAY2 BCF INTCON,2 ;Borra flag del TMR0
MOVLW 0x00
MOVWF TMR_OPT ;Carga TMR0 para que cuente 256
DELAY2X BTFSS INTCON,2 ;Espera overflow del TMR0
GOTO DELAY2X
DECF TEMPO1,0
MOVWF TEMPO1
BTFSC TEMPO1,1
GOTO DELAY2
RETURN
DELAY_ MOVLW 0xFF ;Repite la rutina DELAY2 256 veces
MOVWF TEMPO1
3
CALL DELAY2
RETURN
OPTO_INT BCF INTCON,4 ;Borra el permiso de interrupción por P0
BCF INTCON,1 ;Borra el flag que se ha activado tras
;la interrupción
CALL CUENTA ;hace la cuenta atrás, esperando una posible
;desconexión de corriente
BSF PA,1 ;el diodo se enciende (PA1)
LOOP BSF PA,0 ;el zumbador se enciende y se apaga, para
CALL DELAY ;darle un aspecto de alarma
BCF PA,0 ;se repite indefinidamente, hasta que se resetee
CALL DELAY ;el pic
GOTO LOOP
DELAY CALL DELAY_
CALL DELAY_
RETURN
CUENTA MOVLW b'11110110' ;Esta función realiza la cuenta atrás
MOVWF PB ;enciende un 9 y espera
CALL DELAY
CALL DELAY
MOVLW b'11111110' ;enciende un 8 y espera
MOVWF PB
CALL DELAY
CALL DELAY
MOVLW b'11100000' ;enciende un 7 y espera
MOVWF PB
4
CALL DELAY
CALL DELAY
MOVLW b'10111110' ;enciende un 6 y espera
MOVWF PB
CALL DELAY
CALL DELAY
MOVLW b'10110110' ;enciende un 5 y espera
MOVWF PB
CALL DELAY
CALL DELAY
MOVLW b'01100110' ;enciende un 4 y espera
MOVWF PB
CALL DELAY
CALL DELAY
MOVLW b'11110010' ;enciende un 3 y espera
MOVWF PB
CALL DELAY
CALL DELAY
MOVLW b'11011010' ;enciende un 2 y espera
MOVWF PB
CALL DELAY
CALL DELAY
MOVLW b'01100000' ;enciende un 1 y espera
MOVWF PB
CALL DELAY
CALL DELAY
5
MOVLW b'11111100' ;enciende un 0 y espera
MOVWF PB
CALL DELAY
CALL DELAY
MOVLW b'00000000' ;se apaga el display, para
;no consumir energía
MOVWF PB
RETURN
END
6
Descargar