Equipos electrónicos de consumo


Alarma antirrobo


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

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

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

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

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

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




Descargar
Enviado por:Jorge Aranda
Idioma: castellano
País: España

Te va a interesar