SlideShare ist ein Scribd-Unternehmen logo
1 von 48
Downloaden Sie, um offline zu lesen
PROYECTO “MI_ALARMA.PBP”  (Abril‐Nov. 2012) 
 
1 
JOAQUÍN BERROCAL PIRIS 
PROYECTO “MI_ALARMA.PBP” 
 
 
 
 
Autor: Joaquín Berrocal Piris, en PicBasicPro
PROYECTO “MI_ALARMA.PBP”  (Abril‐Nov. 2012) 
 
2 
JOAQUÍN BERROCAL PIRIS 
 
 
 
PROYECTO “MI_ALARMA.PBP”  (Abril‐Nov. 2012) 
 
3 
JOAQUÍN BERROCAL PIRIS 
 
 
 
PROYECTO “MI_ALARMA.PBP”  (Abril‐Nov. 2012) 
 
4 
JOAQUÍN BERROCAL PIRIS 
 
 
 
PROYECTO “MI_ALARMA.PBP”  (Abril‐Nov. 2012) 
 
5 
JOAQUÍN BERROCAL PIRIS 
 
 
 
 
RESET
+LED
VSS
VDD
VEE
RS
RW
E
D0
D1
D2
D3
D4
D5
D6
D7
LCD 2X16
RA0
RA2
RB0
RB1
>=9 Vcc
Pull Up RB3.
Evita se reinicia
tocar patilla RB3
MCLR-RESET
MCLR-RESET
ALIMENTACIÓN +/- 9V DC
Aquí se conectarían los pulsadores
de la Zona 1 a la Zona 3 para activar la alarma
masa COMÚN pulsadores Zonas 1 a 3
Aquí se conectaría la línea de Telfno
Buzzer1; para activar pitido al pulsar tecla
Buzzer2; para activar SIRENA de la alarma
680 Ohm/1W
conexion línea teléfono
obligatorioponerapull-upRA4/tockobligatorioponerapull-upRA4/tock
parapoderverenlaLCD
1
2
3
4
A
B
C
D
Conexión del Teclado 4 x 4
Estas resistencias deben ser de 220 Ohm
Los LEDS se pueden conectar en
el exterior de la placa. Pero para simulación
los tengo también en la misma placa
MI_ALARMAAlarma con llamada telefónica. Teclado 4x4 y LCD 2x16
Se pueden programar los tiempos de entrada y salida
clave inicial "1-2-3-4-5-6" Realizada: Oct/Nov 2012
;Cuando se conecta la alarma, y si se pulsa la "Tecla B" en los
;primeros 4 segs SE PUEDEN CONFIGURAR :
;-. Los Tiempos de Salida y Entrada de 1 a 10 minutos.
(en principio está configurado a 5' la entrada y salida)
;-. Y el Teléfono a llamar en caso de activación de la alarma
; (Sólo se permite la lectura de los números del teclado.)
;A continuación nos pide la clave para poner operativa el sistema.
;Se permiten como máximo 3 fallos. Caso contrario; Activación de sirena y el teléfono
; Para meter la clave se permiten números, letras y símbolos
;-. La "Tecla A" ---Permite la activación directa de la alarma
;-. La "Tecla B" ---Permite la Configuración (tiempos entrada-salida+telefno.)
;-. La "Tecla C" ---Permite Cambiar la clave ("Acepta números,letras y signos)
;-. La "Tecla D" ---Permite Desconectar,pero pedirá validar Clave.
los transistores son NPN BC 337-25 (Dan 500 mA y Pot >800 mW)
NOTA: Aunque en el esquema esté puesto el modelo BC 548A (NPN)
Lo hago así por tener su PACKAGE en línea en lugar de forma de triangulo
El (+) y (-)_TELEFONO son
los 2 cables del medio del cable del teléfono
PIC16876P
7805
330
220 uF 220 uF
GND
+5V
+12V
4MHZ
22pF22pF
330
330
220
220
220
330
GND
10010K+5V
GND
470 k
+5V
GND
GND
+5V
GND
+5V
10k
10K
10K+5V
AL60PAL60P
BC548ABC548A
ZNS5106
GND
GND
+12V220
220
220
+5V
GND
GND GND
330
330
+5V
+5V
BC548A
1N4004 1N4004
1N40041N4004
1uF/100V
GND
1N4004
+5V
GND
560
+5V
10K
10K
10K
10K
4K7
4K7
4K7
4K7
+5V
MCLR/THV
1
RA0/AN0
2
RA1/AN1
3
RA2/AN2
4
RA3/AN3
5
RA4/T0CKI
6
RA5/AN4
7
OSC1/CLKIN
9
OSC2/CLKOUT
10
RC0/T1OSO
11
RC1/T1OSI
12
RC2/CCP1
13
RC3/SCK
14
SDI/RC4
15
SDO/RC5
16
RC6
17
RC7
18
8
20
INT/RB0
21
RB1
22
RB2
23
PGM/RB3
24
RB4
25
RB5
26
PGC/RB6
27
PGD/RB7
28
19
IC1
VDD
VSS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
JP1
3 1
24
S1
IC2
GND
IN OUT
LED1
R1
C1 C2
Q1
C3C4
LED2
LED3
LED4
LED5
LED6
LED7
R2
R3
R4
R5
R6
R7
R9R10
C5
1
2
3
4
5
6
7
8
JP3
R13
R14
R18
2 1
SP1
2 1
SP2
Q2Q3
A2A1
K1
12 14
11
K1
X2-1
X2-2
X2-3
X2-4
X2-5
X2-6
X2-7
X2-8
X2-9
X2-10
R11
R12
R16
R8
R17
Q4
D2 D3
D4D5
C6
D1
R19
1
2
3
4
5
6
7
8
JP2
R15
R20
R21
R22
R23
R24
R25
R26
+5V
RA0
RB3
RB3
RB0
RB1
RA1
RA1
RA2
RA3
RA3
RA4
RA4
RA4
LSIRENA
LSIRENA
LSIRENA
LZONA_1
LZONA_1
LZONA_1
LZONA_2
LZONA_2
LZONA_2
LZONA_3
LZONA_3
LZONA_3
LACTIVADA
LACTIVADA
COL_1
COL_1
COL_2
COL_2
COL_3
COL_3
COL_4
COL_4
FILA_A
FILA_A
FILA_B
FILA_B
FILA_C
FILA_C
FILA_D
FILA_D
SALIDA_BUZZER_1
SALIDA_BUZZER_1
SALIDA_BUZZER_2
SALIDA_BUZZER_2
--_TELFNO
--_TELFNO
LBUZZER
LBUZZER
LBUZZER
+_TELFNO
+_TELFNO
Autor: Joaquín Berrocal Piris
+
+
+
In 0
I/O 0
I/O 0
I/O 0
I/O 0
I/O 0
I/O 0
In 0
Out 0
I/O 0
I/O 0
I/O 0
I/O 0
I/O 0
I/O 0
I/O 0
I/O 0
Pwr0
Pwr0
I/O 0
I/O 0
I/O 0
I/O 0
I/O 0
I/O 0
I/O 0
I/O 0
Pwr0
Pas0
Pas0
Pas0
Pas0
Pas0
Pas0
Pas0
Pas0
Pas0
Pas0
Pas0
Pas0
Pas0
Pas0
Pas0
Pas0
Pas 2 Pas 1
Pas 1Pas 2
In 0
In0
Pas 0
Pas0Pas0Pas1Pas1
Pas0Pas0
Pas0Pas0
Sup0
Sup0
Sup0
Pas1Pas112
Pas 1 Pas 1
Pas 1 Pas 1
Pas0Pas0
Pas0Pas0
Pas0Pas0
Pas0Pas0
Pas0Pas0
Pas0Pas0
Pas1Pas1
Pas1Pas1
Pas1Pas1
Pas1Pas1
Pas1Pas1
Pas1Pas1
Sup0
Pas1Pas1Pas1Pas1Sup0
Sup0
Sup0
Pas1Pas1
Sup0
Sup0
Sup0
Sup0
Pas0
Pas0
Pas0
Pas0
Pas0
Pas0
Pas0
Pas0
Sup0Sup0
Pas1Pas1
Pas1Pas1
Pas1Pas1Sup0
Pas 0 Pas 0Pas 0 Pas 0
Pas 1
Pas3Pas2
Pas 1
Pas3Pas2
Pas0Pas0
Pas 0 Pas 0
Pas0
Pas 0
Pas 0
Pas 0
Pas 0
Pas 0
Pas 0
Pas 0
Pas 0
Pas 0
Pas 0
Sup0Sup0
Sup0
Pas1Pas1
Pas1Pas1
Pas1Pas1
Sup0
Sup0
Sup0
Sup0
Pas1Pas1
Pas1Pas1
Sup0
Sup0
Pas 1
Pas3Pas2
Pas 0Pas 0 Pas 0Pas 0
Pas 0Pas 0Pas 0Pas 0
Pas0Pas0
Sup0
Pas0Pas0Sup0
Sup0
Pas 1Pas 1
Sup0
Pas 0
Pas 0
Pas 0
Pas 0
Pas 0
Pas 0
Pas 0
Pas 0
Pas1Pas1
Pas1Pas1
Pas1Pas1
Pas1Pas1
Pas1Pas1
Pas1Pas1
Pas1Pas1
Pas1Pas1
Sup0
25/11/2012 17:54:46 C:PBP ALARMASMI ALARMAMI ALARMA ADAPTADA AL EAGLE 120x100 - 4 líneasMI_ALARMA.brd
1
D
Buzzer 1 Buzzer Sirena
12
34
-IO
1 2 3 4 5 6 7 8 9 10
IC1
JP1
S1
IC2
LED1
R1
C1
C2
Q1
C3
C4
LED2 LED3 LED4 LED5 LED6 LED7
R2
R3
R4
R5
R6
R7
R9 R10
C5
JP3
R13
R14
R18
SP1 SP2
Q2 Q3
K1
X2
R11
R12
R16
R8R17
Q4
D2D3
D4D5
C6
D1
R19
JP2
R15
R20
R21
R22
R23
R24
R25
R26
MI_ALARMA. OCT/NOV 2012 (120 X 100 mm)
PIC16876P
7805
330
220 uF
220 uF
4MHZ
22 pF
22 pF
330
330
220
220
220
330
100 10K
470 k
10k
10K
10K
AL60P AL60P
BC548A BC548A
ZNS5106
220
220
220
330330
BC548A
1N40041N4004
1N40041N4004
1uF/100V
1N4004
560
10K
10K
10K
10K
4K7
4K7
4K7
4K7
26/11/2012 0:11:37 C:PBP ALARMASMI ALARMAMI ALARMA ADAPTADA AL EAGLE 120x100-- 4 Lineas faltanMI_ALARMA.
25/11/2012 17:53:48 C:PBP ALARMASMI ALARMAMI ALARMA ADAPTADA AL EAGLE 120x100 - 4 líneasMI_ALARMA.brd
PROYECTO “MI_ALARMA.PBP”  (Abril‐Nov. 2012) 
 
1 
JOAQUÍN BERROCAL PIRIS 
PROYECTO “MI_ALARMA.PBP” 
 
'******************************************
'* Nombre : Mi_Alarma.pbp *
'* Autor : Joaquín Berrocal *
'* Copyright : Copyright *
'* Fecha : NOV-2012 *
'* Versión : 1.0 *
'******************************************
'********************* FUNCIONAMIENTO **********************  
;MI_ALARMA; DE TRES ZONAS CON LLAMADAS A TELÉFONO CELULAR 
  'REALIZADA PARA EL PIC16F876A. 
;SE USA UN TECLADO 4 X 4
; Bornes----> 1 2 3 4 5 6 7 8
; (Columnas) C1-C2-C3-C4-FA-FB-FC-FD (Filas)
;***************OBSERVACIONES PREVIAS:***************
'* 1) Los tiempos de Entrada y Salida los tengo configurados en
'* Segundos en lugar de minutos para hacer pruebas y no aburrirme
'* tan sólo modificar los PAUSE para obtener minutos.
'* Por defecto lo tengo configurado a 4sg. para pulsar la tecla
'* de configurar "B"
'* y 5 Sg para salir y/o entrar.
'* 2) Por otro lado se aconseja utilizar un cuarzo de 10, 12 o mejor de 20 MHZ
'* pero por no tenerlos utilizo uno de 4 MHZ. La fiabilidad para conseguir los
'* tonos de teléfono es menor pero tengo comprobado que SÍ FUNCIONA aunque
'* algunas veces no lo consigue. tan sólo esperar y que se efectúa la llamada.
'* los condensadores para el cuarzo son de 22 pf. Se aceptan de 15 a 30 pf
'* (ver anotaciones en página 94 de los apuntes 3ª edición)
'* (En el programador "ICPROG" marcar tipo de oscilador HS; esta opción se debe
'* utilizar cuando empleemos un cristal de cuarzo igual o superior a 8 MHZ.)
'* Como en éste programa utilizo uno de 4 MHZ marcar tipo de oscilador XT.
;-----------------FUNCIONAMIENTO--------------------------
;Cuando se conecta la alarma, y si se pulsa la "Tecla B"  en los  
 ;primeros 4 segs SE PUEDEN CONFIGURAR : 
  
 ;A)‐. Los Tiempos de Salida y Entrada de 1 a 10 minutos. 
 ;    (en principio está configurado a 5' la entrada y salida) 
 
 ;B)‐. El Teléfono a llamar en caso de activación de la alarma 
 ; (en este caso Sólo se permite la lectura de los números del teclado.) 
 
 ;A continuación nos pide la clave para poner operativa el sistema. 
 ;Se permiten como máximo 3 fallos caso contrario Activación de sirena 
 ; y teléfono. 
  
 ;‐. La "Tecla A" ‐‐‐Permite la activación directa de la alarma 
 ;‐. La "Tecla B" ‐‐‐Permite la Configuración (tiempos entrada‐salida + telefno.) 
 ;‐. La "Tecla C" ‐‐‐Permite Cambiar la clave ("Acepta números, letras y signos) 
 ;‐. La "Tecla D" ‐‐‐Permite Desconectar, pero pedirá validar Clave. 
PROYECTO “MI_ALARMA.PBP”  (Abril‐Nov. 2012) 
 
2 
JOAQUÍN BERROCAL PIRIS 
 
 ;En caso de Activación se conecta una sirena y se marca el número. Se chequea 
 ;la tecla de Desconexión "Tecla D" que en caso de ser pulsada pedirá la clave. 
  
 ;Otros Datos: en memoria EEPROM: 
 
 ;‐. Posición 0 ‐‐Se graba el flag indicador de que ya se grabó la clave   
 ;                 y el teléfono en el 1er montaje. 
 ;‐. Posición 1 a 6 ‐‐ La clave; en principio será la 1‐2‐3‐4‐5‐6 
 ;                       (se aceptan números, letras y signos) 
 ;‐. Posición 10 ‐‐Tiempo de Salida; valor 1 a 10 1l. (1 representa 1 minuto 
 ;                  el 0 representa los 10 minutos) 
 ;‐. Posición 11 ‐‐Tiempo de Entrada; valor 1 a 10 1l. (1 representa 1 minuto 
 ;                  el 0 representa los 10 minutos) 
 ;‐. Posición 20 a 28 ‐‐El número de Teléfono para avisar si se dispara  
  
 ;OBSERVACIÓN: 
 ;La simulación en proteus ; da problemas con la LCD pero todo está OK. de hecho  
 ;si se deja y espera la LCD vuelve a verse OK. 
 ;También problemas con la instrucción DTMFOUT Y SOUND.
;OBSERVACIONES:
;La simulación en proteus da problemas con la LCD pero todo está OK. de hecho
;si se deja y espera la LCD vuelve a verse OK.
;También problemas en la simulación del proteus con las instrucciones
;DTMFOUT Y SOUND.
   
  
1) Al encender la alarma, tenemos 4 sgdos. Si deseamos configurar: 
‐. Los tiempos de SALIDA, ENTRADA y el Nº de teléfono con el que se conectará si salta la alarma 
 
 
PROYECTO “MI_ALARMA.PBP”  (Abril‐Nov. 2012) 
 
3 
JOAQUÍN BERROCAL PIRIS 
 
2) Pulsar “B” PARA CONFIGURAR LOS TIEMPOS DE SALIDA, ENTRADA, Y EL Nº DE TELEFONO A LLAMAR 
 
 
 
 
PROYECTO “MI_ALARMA.PBP”  (Abril‐Nov. 2012) 
 
4 
JOAQUÍN BERROCAL PIRIS 
 
 
 
 
 
PROYECTO “MI_ALARMA.PBP”  (Abril‐Nov. 2012) 
 
5 
JOAQUÍN BERROCAL PIRIS 
 
 
 
 
PROYECTO “MI_ALARMA.PBP”  (Abril‐Nov. 2012) 
 
6 
JOAQUÍN BERROCAL PIRIS 
 
 
 
 
PROYECTO “MI_ALARMA.PBP”  (Abril‐Nov. 2012) 
 
7 
JOAQUÍN BERROCAL PIRIS 
3) Lo primero antes de poner activa la alarma, se chequea si alguna Zona está abierta (representada 
por los interruptores). Si es así, hasta que no se cierren no dejará ponerla operativa 
 
4) Todas cerradas, Mensaje de bienvenida y petición de clave de Acceso. 
 
 
5) La clave es de 6 cifras, por defecto es la “123456” pero se puede cambiar en la configuración. 
(se aceptan números, letras y signos) 
 
6) Se permiten un máximo de 3 fallos para poner la clave. Si se supera se activará la alarma; activación 
del zumbador (Sirena) y llamada de teléfono al número establecido. 
 
7)  Una vez metida la clave correcta, tenemos un tiempo de 1 a 10 minutos según lo que se haya 
configurado para SALIR y/o ENTRAR. 
 
 
8) Si deseamos DESACTIVAR la alarma pulsar la “Tecla D”. Nos pedirá la clave. 
 
9) En el display se nos indica el tiempo que aún nos queda para entrar y/o salir sin que salte la Alarma. 
También el número de teléfono al que se está llamando si es que hubiese saltado la alarma. 
Sería interesante poner el nº de la Policía;  
Por supuesto, siempre que entremos tendremos que “pulsar la tecla D” con la clave para 
desactivarla, de lo contrario se activará en el tiempo establecido. 
 
 
 
 
PROYECTO “MI_ALARMA.PBP”  (Abril‐Nov. 2012) 
 
8 
JOAQUÍN BERROCAL PIRIS 
 
 
 
PROYECTO “MI_ALARMA.PBP”  (Abril‐Nov. 2012) 
 
9 
JOAQUÍN BERROCAL PIRIS 
Clave errónea máximo tres intentos 
 
 
PROYECTO “MI_ALARMA.PBP”  (Abril‐Nov. 2012) 
 
10 
JOAQUÍN BERROCAL PIRIS 
 
 
PROYECTO “MI_ALARMA.PBP”  (Abril‐Nov. 2012) 
 
11 
JOAQUÍN BERROCAL PIRIS 
 
 
 
PROYECTO “MI_ALARMA.PBP”  (Abril‐Nov. 2012) 
 
12 
JOAQUÍN BERROCAL PIRIS 
 
 
PROYECTO “MI_ALARMA.PBP”  (Abril‐Nov. 2012) 
 
13 
JOAQUÍN BERROCAL PIRIS 
MENSAJE INDICANDO LA ZONA POR LA QUE SE HA ENTRADO Y HECHO QUE SALTE LA ALARMA 
 
 
 
PROYECTO “MI_ALARMA.PBP”  (Abril‐Nov. 2012) 
 
14 
JOAQUÍN BERROCAL PIRIS 
HE PULSADO LA TECLA “D” Para desactivar la alarma. Me pide la Clave. 
 
 
 
PROYECTO “MI_ALARMA.PBP”  (Abril‐Nov. 2012) 
 
15 
JOAQUÍN BERROCAL PIRIS 
HE PULSADO LA TECLA “C” Para cambiar la clave.  
‐. 1º Me pide la actual y después introduzco la nueva clave. 
‐. Al finalizar me saldrá en el display la nueva clave para poder anotarla y lo confirmaré pulsando < 1> 
 
 
 
 
 
PROYECTO “MI_ALARMA.PBP”  (Abril‐Nov. 2012) 
 
16 
JOAQUÍN BERROCAL PIRIS 
 
 
 
 
 
PROYECTO “MI_ALARMA.PBP”  (Abril‐Nov. 2012) 
 
17 
JOAQUÍN BERROCAL PIRIS 
 
 
 
C:PBP ALARMASMI ALARMAMI ALARMA ADAPTADA AL EAGLE 120x100-- 4 Lineas faltanARCHIVOS
'******************************************
'* Nombre : Mi_Alarma.pbp *
'* Autor : Joaquín Berrocal *
'* Copyright : Copyright *
'* Fecha : NOV-2012 *
'* Versión : 1.0 *
'******************************************
'********************* FUNCIONAMIENTO **********************
;MI_ALARMA.PBP; DE TRES ZONAS CON LLAMADAS A TELÉFONO CELULAR
;REALIZADA PARA EL PIC16F876A.
;SE USA UN TECLADO 4 X 4
; Bornes--> 1 2 3 4 5 6 7 8
; (Columnas) C1-C2-C3-C4-FA-FB-FC-FD (Filas)
;***************OBSERVACIONES PREVIAS:***************
'* 1) Los tiempos de Entrada y Salida los tengo configurados en
'* Segundos en lugar de minutos para hacer pruebas y no aburrirme
'* tan sólo modificar los PAUSE para obtener minutos.
'* Por defecto lo tengo configurado a 4sg. para pulsar la tecla
'* de configurar "B"
'* y 5 Sg para salir y/o entrar.
'* 2) Por otro lado se aconseja utilizar un cuarzo de 10, 12 o mejor de 20 MHZ
'* pero por no tenerlos utilizo uno de 4 MHZ. La fiabilidad para conseguir los
'* tonos de teléfono es menor pero tengo comprobado que SÍ FUNCIONA aunque
'* algunas veces no lo consigue. tan sólo esperar y que se efectúa la llamada.
'* los condensadores para el cuarzo son de 22 pf. Se aceptan de 15 a 30 pf
'* (ver anotaciones en página 94 de los apuntes 3ª edición)
'* (En el programador "ICPROG" marcar tipo de oscilador HS; esta opción se debe
'* utilizar cuando empleemos un cristal de cuarzo igual o superior a 8 MHZ.)
'* Como en éste programa utilizo uno de 4 MHZ marcar tipo de oscilador XT.
;*************************************************
;-----------------FUNCIONAMIENTO--------------------------
;Cuando se conecta la alarma, y si se pulsa la "Tecla B" en los
;primeros 4 segs SE PUEDEN CONFIGURAR :
;NOTA:
;(en este programa lo tengo en segundos en lugar de minutos )
;-. Los Tiempos de Salida y Entrada de 1 a 10 minutos.
; (en principio está configurado a 5' la entrada y salida
;-. Y el Teléfono a llamar en caso de activación de la alarma
; (Sólo se permite la lectura de los números del teclado.)
;-. A continuación nos pide la clave para poner operativa el sistema.
;-. Se permiten como máximo 3 fallos caso contrario Activación de sirena
; y teléfono.
;-. La "Tecla A" ---Permite la activación directa de la alarma
;-. La "Tecla B" ---Permite la Configuración (tiempos entrada-salida+telefno.)
;-. La "Tecla C" ---Permite Cambiar la clave ("Acepta números,letras y signos)
;-. La "Tecla D" ---Permite Desconectar, pero pedirá validar Clave.
;En caso de Activación se conecta una sirena y se marca el número. Se chequea
;la tecla de Desconexión "Tecla D" que en caso de ser pulsada pedirá la clave.
;Otros Datos: en memoria EEPROM:
;-. Posición 0 --Se graba el flag indicador de que ya se grabó la clave
; y el teléfono en el 1er montaje.
;-. Posición 1 a 6 -- La clave; en principio será la 1-2-3-4-5-6
; (se aceptan numeros,letras y signos)
;-. Posición 10 --Tiempo de Salida; valor 1 a 10 1l. (1 representa 1 minuto
; el 0 representa los 10 minutos)
Page 1 of 22 19/03/2013 0:48
C:PBP ALARMASMI ALARMAMI ALARMA ADAPTADA AL EAGLE 120x100-- 4 Lineas faltanARCHIVOS
;-. Posición 11 --Tiempo de Entrada; valor 1 a 10 1l. (1 representa 1 minuto
; el 0 representa los 10 minutos)
;-. Posición 20 a 28 --El número de Teléfono para avisar si se dispara
;OBSERVACIONES:
;La simulación en proteus dá problemas con la LCD pero todo está OK. de hecho
;si se deja y espera la LCD vuelve a verse OK.
;También problemas en la simulación del proteus con las instrucciones
;DTMFOUT Y SOUND.
'**********************************************************
'DEFINICIONES INICIALES. Fusibles de configuración.
''@ hs_osc 'Cambia automáticamente a un oscilador de de alta velocidad
' el HS va de 8 MgHz A 20 Mghz Para que los tonos DTMF sean
'100% validos utilizar un cristal de 10-12 ó 20 MHZ mejor el
'de 20MHZ (ver pag 94 3ª edicion.)
define Osc 4 ' Define el Oscilador para un Cristal
' de 10 Mhz.
'WDT_OFF
PWRT_ON
'BOD_OFF ;ESTOS OTROS NO LO ACEPTA Y NO SÉ PORQUÉ
'LVP_OFF
'CPD_OFF
'WRT_OFF
'DEBUG_OFF
PROTECT_OFF
' Configuración de Puertos:
ADCON1=7 'PARA CONFIGURAR EL PUERTO A COMO ENTRADA/SALIDA
TRISA = %00000000 'Todo como salida
TRISB = %01110000 'entradas ZONAS ->B4-B5-B6 resto salidas
TRISC = %11110000 'Conexión Teclado RC0,1,2,3 Columnas
'conexión teclado RC4,5,6,7 Filas
'TRISD = %01111000 'el pic 16F876A no dispone de puerto D
;INICIAMOS LAS PUERTAS de salida
PORTA = 0
PORTB = 0
PORTC = 1 'Todos los pines configurados como salida a nivel 1 (Teclado)
' Declaramos las variables:
Flag var bit 'flag para no tener que escribir de nuevo la clave
X var word
Tiempo_E_S var word 'VARIABLE COMUN COMO Tiempo de Entrada Salida
Tiempo_LCD var word
Contaje var byte
VAR1 var byte
NFallos var byte : NFallos = 0 'para iniciarla a cero
DIGITO var byte[9] ' Lo utilizo también para lectura del Telfno
CLV var byte[7]
DIRECCION_EEPROM var byte 'Para indicar el comienzo de grabación en la
EEPROM
POSICION_LCD var byte 'para indicar * en lcd al cambiar la clave
Page 2 of 22 19/03/2013 0:48
C:PBP ALARMASMI ALARMAMI ALARMA ADAPTADA AL EAGLE 120x100-- 4 Lineas faltanARCHIVOS
NumZona1 var byte 'para los mensajes de cerrar la zona X
NumZona2 var byte 'para los mensajes de cerrar la zona X
NumZona3 var byte 'para los mensajes de cerrar la zona X
LZona_1 var PORTB.4 'Nombre LZona_1 para pin B.4
LZona_2 var PORTB.5 'Nombre LZona_1 para pin B.5
LZona_3 var PORTB.6 'Nombre LZona_1 para pin B.6
LActivada var PORTB.7 'Nombre LActivada para pin B.7
LSirena var PORTB.2 'Nombre LSirena para B.2
LBuzzer var PORTA.5 'Nombre LBuzzer para A.5
Rele var PORTB.1
Col_1 var PORTC.0 'Nombre Col_1 para C.0
Col_2 var PORTC.1 'Nombre Col_1 para C.1
Col_3 var PORTC.2 'Nombre Col_1 para C.2
Col_4 var PORTC.3 'Nombre Col_1 para C.3
Fila_A var PORTC.4 'Nombre Fila_A para C.4
Fila_B var PORTC.5 'Nombre Fila_B para C.5
Fila_C var PORTC.6 'Nombre Fila_C para C.6
Fila_D var PORTC.7 'Nombre Fila_D para C.7
'Para leer la posición 0 de EEPROM si ya se grabó en fabrica no volver
'a grabar mas la clave de fabrica.
read 0, CLV[0] ' leemos la 1ª posición de la EEPROM y lo guardamos en CLV[0]
if CLV[0]= 170 then
goto CONFIGURAR 'Si ya se grabo saltar configurar, de lo contrario
'proceder a grabar el flag (170) y la clave de fabrica y
'el teléfono establecido de fabca.
' Guardamos cada digito de la clave en las posiciones elegidas previamente:
else 'SI ES LA 1ª VEZ QUE SE ARRANCA EL PIC EN FÁBRICA
write 0,170 'grabo en la posición 0 el valor 170 b'1010101010'
pause 10 '10 ms no es necesario pero por si acaso
; PASS INICIAL
eeprom 1,[1,2,3,4,5,6] ; Carga la memoria EEPROM desde la posición
;1 en adelante con los valores posición 1 valor 1
;posición 6 valor 6
eeprom 10,[5,5] 'guardo el valor 1 en posición 10 y 11 de la EEPROM
'Representan el valor de 5 minuto para Salida y entrada
eeprom 20,[1,2,3,4,5,6,7,8,9] 'son 9 números de un teléfono "ficticio"
'para no poner el mío. Pulsando "B" puedo
'añadir cualquier nº de teléfono
'al que quiera que active la alarma
endif
;++LO 1º ES UN TIEMPO PARA PODER CONFIGURAR LOS TIEMPOS DE SALIDA ++++++
;++Y ENTRADA Y EL Nº DE TELFNO A LLAMAR. este tiempo será de aprox +++++
;++++++4 sgds . Si pulso la Tecla "B" ir a Configurar_Tiempos_Telfno donde
;preguntará si quiero o No configurar. Si "SÍ" activo Flag = 1 y
'goto Chequeo_Inicial, El flag lo utilizo para no repetir la Clave.
' si "NO" directamente go Chequeo_Inicial.
Page 3 of 22 19/03/2013 0:48
C:PBP ALARMASMI ALARMAMI ALARMA ADAPTADA AL EAGLE 120x100-- 4 Lineas faltanARCHIVOS
CONFIGURAR:
Flag = 0 'Como seguridad inicio el flag a 0 para evitar repetir
'la clave 2 veces en caso de hacer configuración
lcdout $fe, 1 'limpia LCD
lcdout $fe, 2 ' Posiciona el cursor en el inicio
lcdout "CONFIGURAR"
lcdout $fe,$C0, "PULSAR B"
call Beep
'pongo 205 para que sean 4 sgs con cristala de 10 Mghz
for X = 1 to 205 'TIEMPO ESPERA DE 4 Sgs PARA PULSAR "B" a 4 MHZ seria 80
pause 50 'pausa de 50 ms
high Col_1:high Col_2:high Col_3:low Col_4
if Fila_B = 0 then call Beep_Estabilizacion:goto
Configurar_Tiempos_Telfno
high Col_4 'para que en el PROTEUS reconozca que se pulsa
'NO SERÍA NECESARIO PERO SÍ EN LA SIMULACIÓN
next
'PASADO EL TIEMPO DE ESPERA PARA CONFIGURAR, CONTINÚA
Chequeo_Inicial:
;chequeo de las Zonas si hay alguna abierta no permitir continuar
;hasta que no estén cerradas todas.
NumZona1 = 0 'inicializamos variables
NumZona2 = 0 'EL VALOR 0 indica que estan todas cerradas
NumZona3 = 0
pause 100 'Eespera 100 ms antirebote normal de 20 a 30 ms A 4 MHZ
'como trabajo a 10 MHZ pongo 100 ms
'**************************************************
if lzona_1 = 1 then NumZona1 = 1 ' si la zona1 esta abierta asignar valor 1
if lzona_2 = 1 then NumZona2 = 2 ' si la zona2 esta abierta asignar valor 2
if lzona_3 = 1 then NumZona3 = 3 ' si la zona3 esta abierta asignar valor 3
'**************************************************
'Si alguna zona está abierta mensaje
if lzona_1 = 1 or lzona_2 = 1 or lzona_3 = 1 then
goto Mensaje_Zonas_Abiertas
else
goto Inicio 'Si todas las zonas están cerradas permitir continuar
endif
'+++++*************************++++
Mensaje_Zonas_Abiertas:
lcdout $fe, 1 'limpia la pantalla
pause 1000 'para dar efecto intermitente
lcdout $fe,$85,"CERRAR" ' Posiciona el cursor posicion 6 línea 1
lcdout $fe,$C0, "ZONA: ",#NumZona1," - ",#NumZona2," - ",#NumZona3," "
'posicion 1 de línea 2
pause 1000 ' Hacemos una pausa de 1 segundo
Page 4 of 22 19/03/2013 0:48
C:PBP ALARMASMI ALARMAMI ALARMA ADAPTADA AL EAGLE 120x100-- 4 Lineas faltanARCHIVOS
call beep ' Generamos un sonido
call beep ' Generamos un sonido
call beep ' Generamos un sonido
goto Chequeo_Inicial 'vuelve a chequear
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;ESTE CONJUNTO DE SUBRUTINAS es llamada de la Subrutina "Desconectar:"
;verifca que se conoce la clave antigua para poder desconectar
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Clave_Desconectar:
pause 50
X = 0 'INICIAMOS LA VARIABLE
lcdout $fe, 1 ' Limpia la LCD
lcdout $fe, 2 ' Posiciona el cursor en el inicio
lcdout "INTRODUCIR CLAVE" 'NO LE PONGO LA "¿" por no reconocerla la LCD
'LCDOut $fe,$C0, "Si,pulsar 1 NO 2"
call Beep ' Generamos un sonido
'----Iniciamos la posicion inicial para escribir en LCD y EEPROM----
POSICION_LCD= $C8 'primera posición en la LCD para sacar "******"
'-------------------------------------------------------------------
'Chequea la clave para poder desconectar.
Chequeo_Clave_Desconectar:
call Teclado
' Si ninguna tecla fue pulsada salta a "Chequeo_Clave_Desconectar"
if VAR1 = 170 then Chequeo_Clave_Desconectar
'' call Beep no es necesaria por haber un Beep en el Teclado
lcdout $fe,$C0, "Valor: ",#VAR1
lcdout $fe,POSICION_LCD, "*" 'ocultarlo
'incrementamos la posición, se deben poner un máximo de 6 digitos
POSICION_LCD = POSICION_LCD + 1
X = X + 1
DIGITO[X] = VAR1 ' El valor de la tecla pulsada lo
' guardamos en la variable correspondiente
' Si X = 6 estamos guardando en DIGITO[6]
' el último valor introducido desde el
' teclado matricial
if X >= 6 then Comprobar_Clave_Desconectar
goto Chequeo_Clave_Desconectar ' Si X es diferente de 6 continuamos
' esperando el siguiente valor a ser
' ingresado desde el teclado
' A partir de la siguiente etiqueta empezamos la comprobación,
Page 5 of 22 19/03/2013 0:48
C:PBP ALARMASMI ALARMAMI ALARMA ADAPTADA AL EAGLE 120x100-- 4 Lineas faltanARCHIVOS
' y el formato es:
'
Comprobar_Clave_Desconectar:
X = 0 'iniciamos la variable por seguridad
'Si no son iguales ir a error
' de lo contrario pasar al siguiente If ..
'si Todos OK retornar a la rutina inicial que es la
de
;Desconectar:
if DIGITO[1] <> CLV[1] then goto error
pasar_a1:
if DIGITO[2] <> CLV[2] then goto error
pasar_a2:
if DIGITO[3] <> CLV[3] then goto error
pasar_a3:
if DIGITO[4] <> CLV[4] then goto error
pasar_a4:
if DIGITO[5] <> CLV[5] then goto error
pasar_a5:
if DIGITO[6] <> CLV[6] then
goto error 'Desde la subrutina error: se activa la alarma.
else 'Si la clave es correcta DESCONECTAR LSirena/relé telfno/ir
va
'a chequeo_Inicial de aquí pedirá de
'nuevo la clave para poner Operativa la Alarma
'Desconectamos LA SIRENA,EL RELÉ TELFNO. Y el LED de Alarma Operativa
low LSirena
low rele
low LActivada 'led indicador de que la alarma está Operativa
'INDICARLO EN LA LCD DE MANERA INTERMITENTE
'PARA EFECTO INTERMITENCIA 4 sgos
lcdout $fe, 1 'limpia LCD
lcdout $fe, 2 ' Posiciona el cursor en el inicio
lcdout "ALAR DESACTIVADA"
'LCDOut $fe,$C0, "** Bienvenido **"
pause 2000 ' Hacemos una pausa de 2 segundos
lcdout $fe, 1 'limpia LCD
lcdout $fe, 2 ' Posiciona el cursor en el inicio
lcdout "ALAR DESACTIVADA"
pause 2000 ' Hacemos una pausa de 2 segundos
'VOLVER A CHEQUEO_INICIAL
goto Chequeo_Inicial
endif
;++++++CONFIGURAR TIEMPOS SALIDA/ENTRADA Y EL TELFNO +++++++++++
' RUTINAS PARA configurar los tiempos de Salida y Entrada
'y para el Teléfono a llamar en caso de Alarma.
'Estas rutinas son llamadas al pulsar la tecla "B" desde
'la Rutina "Chequeo_Zonas:" o bien de la rutina "Chequeo_Inicial:"
;El TIEMPO DE SALIDA se guarda en posición 10 EEPROM
;El TIEMPO DE ENTRADA se guarda en posición 11 EEPROM
;El TELÉFONO se guarda DESDE LA POSICIÓN 20 A 28 EEPROM (son 9 números
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;proviene de la rutina "Chequeo_inicial:" o bien de "Chequeo_Zonas:"
Configurar_Tiempos_Telfno:
Page 6 of 22 19/03/2013 0:48
C:PBP ALARMASMI ALARMAMI ALARMA ADAPTADA AL EAGLE 120x100-- 4 Lineas faltanARCHIVOS
call Consulta_Clave 'primero consulta si sabemos la clave
'si no lo sabemos Activar_Alarma
'Si pulso que "SI" poner un Flag para que al ir a Chequeo_Inicial
'no tenga que volver a poner la Clave. pues ya lo hemos hecho al
'configurar los tiempos y el telfno.
;+++++++++++++++++
pause 50 'Con estos pauses evito que en la simulacion en PROTEUS
'salga CPU cargada
lcdout $fe, 1 ' Limpia la LCD
lcdout $fe, 2 ' Posiciona el cursor en el inicio
lcdout " CONFIGURAR?" 'NO LE PONGO LA "¿" por no reconocerla la LCD
lcdout $fe,$C0, "Si,pulsar 1 NO 2"
call Beep ' Generamos un sonido
Chequeo_1_2: 'chequeo de si se pulsa 1 o 2 para cambiar la clave
pause 50 'Con estos pauses evito que en la simulacion en PROTEUS
'salga CPU cargada
Col_1 = 0 ' Columna 1 = 0 RC.0 a RC.3
Col_2 = 1 ' Columna 2 = 1
Col_3 = 1 ' Columna 3 = 1
Col_4 = 1 ' Columna 4 = 1
if Fila_A = 0 then ' tecla "1" SÍ QUIERO CAMBIAR LA CLAVE
Flag = 1 'flag para evitar tener que repetir la clave al
'ir a Chequeo_Inicial una vez hecho la configuración
'de los tiempos y el Telfno.
call Beep_Estabilizacion;
goto Tiempo_De_Salida 'Ir a Tiempo_De_Salida para comenzar la Configu
'ración de los tiempos y el Teléfono al final
'hay un RETURN
endif
Col_1 = 1 ' Columna 1 = 1 RC.0 a RC.3
Col_2 = 0 ' Columna 2 = 0
Col_3 = 1 ' Columna 3 = 1
Col_4 = 1 ' Columna 4 = 1
if Fila_A = 0 then ' tecla "2" No quiero cambiar clave
call Beep_Estabilizacion
goto Chequeo_Inicial 'para chequear las zonas e ir a Inicio
endif
goto Chequeo_1_2 'a la espera de que se pulse una u otra acción
'+++++++++++++++++
;+++++SI PONGO LO DEL SÍ- NO CONFIGURAR ESTO SOBRA++++++
lcdout $fe, 1 'limpia LCD
lcdout $fe, 2 ' Posiciona el cursor en el inicio
lcdout "CONFIGURAR ..."
'LCDOut $fe,$C0, "** Bienvenido **"
pause 2000 ' Hacemos una pausa de 2 segundos
Page 7 of 22 19/03/2013 0:48
C:PBP ALARMASMI ALARMAMI ALARMA ADAPTADA AL EAGLE 120x100-- 4 Lineas faltanARCHIVOS
;+++++++++++++++++++++++++++++++++++++++++++++++++++++
Tiempo_De_Salida:
lcdout $fe, 1 'limpia LCD
lcdout $fe, 2 ' Posiciona el cursor en el inicio
lcdout "Tiempo de Salida"
lcdout $fe,$C0, "Pulsar 1 a 10 mi"
pause 2000 ' Hacemos una pausa de 2 segundos
call Teclado_Configuracion 'Sólo verifica los Números
if VAR1 = 0 then VAR1 = 10 ;el valor 0 es el valor 10
;El valor del tiempo de SALIDA se guarda en posicón 10 de la EEPROM
write 10,VAR1
call Mensaje_Tiempos ;En LCD ver el valor grabado
Tiempo_De_Entrada:
lcdout $fe, 1 'limpia LCD
lcdout $fe, 2 ' Posiciona el cursor en el inicio
lcdout "Tiempo Entrada"
lcdout $fe,$C0, "Pulsar 1 a 10 mi"
pause 2000 ' Hacemos una pausa de 2 segundos
call Teclado_Configuracion 'Sólo verifica los Números
if VAR1 = 0 then VAR1 = 10 ;el valor 0 es el valor 10
;El valor del tiempo de ENTRADA se guarda en posicón 11 de la EEPROM
write 11,VAR1
call Mensaje_Tiempos ;En LCD ver el valor grabado
goto Telefono ;ir a rutina "Telefono:" para Grabaciónd el Nº de tefno.
Mensaje_Tiempos: ;En LCD ver el valor grabado
lcdout $fe, 1 'limpia LCD
lcdout $fe, 2 ' Posiciona el cursor en el inicio
lcdout " GRABADO ... "
lcdout $fe,$C0, "Tiempo ",#VAR1," minuto" ;justo 16 (incluso si es 10)
pause 2000 ' Hacemos una pausa de 2 segundos
return
'Para añadir el Teléfono al que se desea llamar en caso de
'que salte la alarma
Telefono:
'----Iniciamos la posicion inicial para escribir en LCD y EEPROM---
'---El número de Teléfono comienza en posicion 20 de EEPROM -----
POSICION_LCD = $C7 'primera posición en la LCD para sacar
'los números de telefono en la LCD
DIRECCION_EEPROM = 20 'primera posición de la EEPROM para grabar
'el número de Telefono son 9 digitos
X = 0 ' Iniciamos la variable POR SI ACASO.
'-------------------------------------------------------------------
lcdout $fe, 1 'limpia LCD
lcdout $fe, 2 ' Posiciona el cursor en el inicio
Page 8 of 22 19/03/2013 0:48
C:PBP ALARMASMI ALARMAMI ALARMA ADAPTADA AL EAGLE 120x100-- 4 Lineas faltanARCHIVOS
lcdout "Telefno a Llamar" 'sin la (o) son 16
lcdout $fe,$C0, "Numero " '1ª posicion línea 2
pause 2000 ' Hacemos una pausa de 2 segundos
Numero: 'Rutina para poner el Número telefónico
call Teclado_Configuracion 'Sólo verifica los Números
lcdout $fe,POSICION_LCD,#VAR1'Se añade el numero 956678...
write DIRECCION_EEPROM,VAR1
'incrementamos la posición, se deben poner un máximo de 9 digitos Nº
Tefno.
X = X + 1
POSICION_LCD = POSICION_LCD + 1
' Escribe el valor en la memoria de datos.El 1º en
'la posición 20 de la EEPROM y el 9º en la 28
DIRECCION_EEPROM = DIRECCION_EEPROM + 1
'Al llegar al noveno nº del telfno. Mensaje y vuelta Chequeo_Inicial
'desde donde ya no habrá que poner de nuevo la clave por tener el
'Flag activo. Y SALDRÁ EN LCD "Chequeando ..."
if X = 9 then
pause 1000 'para dar sensación de estar grabando
lcdout $fe,2, "Telefono GRABADO" '16 caracteres
pause 1500
lcdout $fe,2, " "
pause 1500
lcdout $fe,2, "Telefono GRABADO"
pause 1500
lcdout $fe,2, " "
pause 1500
lcdout $fe,2, "Telefono GRABADO"
pause 3000
goto Chequeo_Inicial
endif
goto Numero ' Si aún no se han metido los 9 dígitos ir a Numero:
'++++++RUTINA DE LECTURA DE TECLADO SÓLO LOS NÚMEROS ++++++
Mens_Solo_Numeros:
' LCDOut $fe, 1 'limpia LCD
lcdout $fe, 2 ' Posiciona el cursor en el inicio
lcdout " Solo Numeros " 'sin la (o) son 16 digitos
pause 1000
lcdout $fe, 2
lcdout "Telefno a Llamar" 'sin la (o) son 16
return
Teclado_Configuracion:
call Teclado
if VAR1 = 170 then Teclado_Configuracion 'No se ha pulsado ninguna
if VAR1 = "A" then call Mens_Solo_Numeros:goto Teclado_Configuracion
if VAR1 = "B" then call Mens_Solo_Numeros:goto Teclado_Configuracion
if VAR1 = "C" then call Mens_Solo_Numeros:goto Teclado_Configuracion
if VAR1 = "D" then call Mens_Solo_Numeros:goto Teclado_Configuracion
Page 9 of 22 19/03/2013 0:48
C:PBP ALARMASMI ALARMAMI ALARMA ADAPTADA AL EAGLE 120x100-- 4 Lineas faltanARCHIVOS
if VAR1 = "#" then call Mens_Solo_Numeros:goto Teclado_Configuracion
if VAR1 = "*" then call Mens_Solo_Numeros:goto Teclado_Configuracion
return
'++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'Rutina para consultar la clave si OK retorna de los contrario
'salta a Error: y de ahí a Activar_Alarma
'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Consulta_Clave:
'SI ESTÁ TODAS LAS ZONAS CERRADAS INICIAR LA entrada de clave para
'activar la alarma
lcdout $fe, 1 'limpia LCD
lcdout $fe, 2 ' Posiciona el cursor en el inicio
lcdout "Cont. de Acceso"
lcdout $fe,$C0, "** Bienvenido **"
pause 2000 ' Hacemos una pausa de 2 segundos
call Beep ' Generamos un sonido
Clave:
X = 0 ' inicializamos la variable X = 0
;nota en la posición CLV[0] guardo el valor 170 de haberse grabado
; el pass inicial : 123456
read 1, CLV[1] ' leemos el primer dígito y lo guardamos en CLV[1]
read 2, CLV[2] ' leemos el segundo dígito y lo guardamos en CLV[2]
read 3, CLV[3] ' leemos el tercer dígito y lo guardamos en CLV[3]
read 4, CLV[4] ' leemos el cuarto dígito y lo guardamos en CLV[4]
read 5, CLV[5] ' leemos el quinto dígito y lo guardamos en CLV[5]
read 6, CLV[6] ' leemos el sexto dígito y lo guardamos en CLV[6]
lcdout $fe, 1 ' Limpia la LCD
lcdout $fe, 2 ' Posiciona el cursor en el inicio
lcdout "Introduzca su "
lcdout $fe,$C0, "Clave de Acceso:"
call Beep ' Generamos un sonido
;****SE PERMITEN NÚMEROS Y SIGNOS DEL TECLADO******
Consulta:
call Teclado ;consultamos el Teclado
if VAR1 = 170 then consulta ' Si no hay una tecla pulsada vuelve a consultar
'170=1010101010' y lo pongo en lugar de var1=
0
'para que se cheque también el 0 en caso de
cambiar
'clave.
' Seguidamente lo que hacemos es almacenar
' en seis variables definidas
' por el programador los dígitos introducidos
Page 10 of 22 19/03/2013 0:48
C:PBP ALARMASMI ALARMAMI ALARMA ADAPTADA AL EAGLE 120x100-- 4 Lineas faltanARCHIVOS
' desde el teclado matricial
' para luego ser comparados con los valores
' almacenados en la memoria de datos.
X = X + 1
DIGITO[X] = VAR1 ' El valor de la tecla pulsada lo
' guardamos en la variable correspondiente
if X = 6 then comprobar ' Si X = 6 estamos guardando en DIGITO[6]
' el último valor introducido desde el
' teclado matricial
goto Consulta ' Si X es diferente de 6 continuamos
' esperando el siguiente valor a ser
' ingresado desde el teclado
' A partir de la siguiente etiqueta empezamos la comprobación,
' y el formato es:
'
' Si DIGITO[X] es igual a CLV[X] el digito es correcto,
' y salta a la etiqueta "paseX",
' si es diferente salta a la subrutina "error"; veamos…
Comprobar:
if DIGITO[1] = CLV[1] then pase1:goto error 'de error hay un goto
Activar_Alarma
pase1:
if DIGITO[2] = CLV[2] then pase2:goto error
pase2:
if DIGITO[3] = CLV[3] then pase3:goto error
pase3:
if DIGITO[4] = CLV[4] then pase4:goto error
pase4:
if DIGITO[5] = CLV[5] then pase5:goto error
pase5:
if DIGITO[6] = CLV[6] then correcto:goto error
' Si los seis dígitos han sido correctos
' se ejecuta la subrutina correspondiente.
Correcto:
high lactivada 'activar led ROJO indicador de estar ACTIVADA LA ALARMA
pause 500
lcdout $fe, 1 ' Limpia la LCD
lcdout $fe, 2 ' Posiciona el cursor en el inicio
lcdout " * * * * * * "
lcdout $fe,$C0, "Clave Correcta!"
call beep ' RA.5 Generamos un sonido + led Lbuzzer
pause 2000 ' Pausa para visualizar el mensaje
return
;++++++++++++++++++++++++++++INICIO+++++++++++++++++++++++++++++
' Iniciamos el sistema con una bienvenida:
'Y CHEQUEAMOS el teclado "SE PERMITEN TODAS LAS TECLAS" para
'asignar la CLAVE. (Consulta:)
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Tiempo_Para_Salir: ' "es llamado desde un GOTO en lugar de un CALL"
Page 11 of 22 19/03/2013 0:48
C:PBP ALARMASMI ALARMAMI ALARMA ADAPTADA AL EAGLE 120x100-- 4 Lineas faltanARCHIVOS
read 10,Tiempo_E_S 'En posición 10 EEPROM
'lee el tiempo de Salida va de 1 a 10
'EL "0" representa el valor 10 y por ello
'se guarda como 10 dicho valor en la eeprom.
'Variable Byte
Tiempo_LCD = Tiempo_E_S
lcdout $fe, 1 ' Limpia la LCD
lcdout $fe, 2 ' Posiciona el cursor en el inicio
lcdout "Tiempo a SALIR :"
for X = 1 to Tiempo_E_S '+++LO REDUZCO a Segundos PARA NO ABURRIRME++++++
lcdout $fe,$C0, "Aprox.: ",#Tiempo_LCD," seg "
;Utilizo un pause de 1 sgdo en lugar de 1 minuto
;PARA CONTAR POR SEGUNDOS EN LUGAR DE POR MINUTOS
;Y NO ABURRIRME EN LAS PRUEBAS. Tan sólo cambiar el pause
;a pause 60000 Y ya lo tendré en minutos el contaje.
pause 1000''60000 'pausa de 1 seg. Podría llegar hasta 65535 ms
Tiempo_LCD = (Tiempo_LCD) - 1
'+++PARA LEER TECLADO PARA PERMITIR DESCONECTAR en caso de no querer salir++
call Teclado ;chequea CADA 1 sgdo para ver si deseo Desconectar
if VAR1 = "D" then goto Desconectar
'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
next
goto Chequeo_Zonas 'IR A CHEQUEAR LAS ZONAS
'quedaría colgado si pulsara la tecla de desconectar "D"
Inicio:
'saltarse el volver a poner la clave y reiniciar el Flag en caso de
'haber configurado los tiempos y el teléfono a llamar
;y poner el tiempo de Salida
if Flag = 1 then Flag = 0:goto Tiempo_Para_Salir':goto Chequeo_Zonas
call Consulta_Clave 'verifica si se conoce la Clave. si no ir a Error:
'y de ahí Activar_Alarma
;lo primero, el Tiempo para SALIR
goto Tiempo_Para_Salir
Chequeo_Zonas:
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;CHEQUEO DE LAS ZONAS Y RECLAS ESPECIALES "A" Activar_Alarma
;"D" Desconectar . "C" Cambio_Clave
'SI SE ABRE UN INTERRUPTOR QUE CONTROLA UNA DE LAS ZONAS. ESPERAR
'100 MS para que no haya rebote de contactos. NO hacerlo desde la
'rutina de estabilización, porque este es al abrirse se pone a 1
'Espera 100 ms antirebote normal de 20 a 30 ms A 4 MHZ
'como trabajo a 10 MHZ pongo 100 ms
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
NumZona1 = 0 'inicializamos variables
Page 12 of 22 19/03/2013 0:48
C:PBP ALARMASMI ALARMAMI ALARMA ADAPTADA AL EAGLE 120x100-- 4 Lineas faltanARCHIVOS
NumZona2 = 0 'EL VALOR 0 indica que estan todas cerradas
NumZona3 = 0
if lzona_1 = 1 then pause 100:NumZona1= 1 'zona1 abierta: asignar valor 1
if lzona_2 = 1 then pause 100:NumZona2= 2 'zona2 abierta: asignar valor 2
if lzona_3 = 1 then pause 100:NumZona3= 3 'zona3 abierta: asignar valor 3
Chequeo_Especiales: 'para chequear teclas A (Activar) C (Cambiar Clave)
'D (Desactivar)
call Teclado 'chequea teclado pero sólo las teclas especiales
if VAR1 = "A" then goto Activar_Alarma 'activar telefono y alarma
''''''''if var1 = "B" then goto Configurar_Tiempos_Telfno
if VAR1 = "D" then goto Clave_Desconectar'pide clave para poder desconectar
'Desactivar alarma. y vuelta a Chequeo_Inicial
'donde se comprueba que esté todo Cerrado y luego pedirá
'clave para volver a poner ACTIVA LA ALARMA
if VAR1 = "C" then goto Cambio_Clave 'cambiar clave
'*************ESTA RUTINA HABRÍA QUE DEPURARLA MEJOR DE FORMA PRÁCTICA*****
'*************CON LOS CÁLCULOS DE LOS TIEMPOS*************************
Continuar: 'si elijo que no quiero cambiar retornar a esta rutina
'para poder continuar con los mensajes y el chequeo
'si alguna zona está abierta mensaje
if Lzona_1 = 1 or Lzona_2 = 1 or Lzona_3 = 1 then
read 11,Tiempo_E_S 'En posición 11 EEPROM
'lee el tiempo de ENTRADA va de 1 a 10
'Variable Byte
Tiempo_LCD = Tiempo_E_S
lcdout $fe, 1 ' Limpia la LCD
lcdout $fe, 2 ' Posiciona el cursor en el inicio
lcdout "Tiempo a ENTRAR:"
for X = 1 to Tiempo_E_S
lcdout $fe,$C0, "Aprox.: ",#Tiempo_LCD," seg "
pause 1000''60000 'pause de 1 sgds si pongo 60000 contaría por minuto
'con el pause puedo llegar hasta 65535 ms
Tiempo_LCD = (Tiempo_LCD) - 1
'+++PARA LEER TECLADO PARA PERMITIR DESCONECTAR en caso de no querer salir++
call Teclado ;chequea CADA 1 sgdo para ver si deseo Desconectar
if VAR1 = "D" then goto Desconectar
'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
next
else
Page 13 of 22 19/03/2013 0:48
C:PBP ALARMASMI ALARMAMI ALARMA ADAPTADA AL EAGLE 120x100-- 4 Lineas faltanARCHIVOS
'Con este borrado de pantalla consigo que no se mantenga fijo el último
'mensaje de zona violada
'pause 200 'POR SEGURIDAD EN LA SIMULACION
lcdout $fe, 1 'limpia la pantalla
pause 1000 'para dar efecto intermitente
lcdout $fe,2,"CHEQUEANDO..." ' Posiciona el cursor INICIO línea 1
pause 1000 'para dar efecto intermitente
goto Chequeo_Zonas 'Si todas las zonas están cerradas: chequear Zonas
;y teclas especiales
endif
'+++++*************************++++
Mensaje_Zonas_Violadas:
NumZona1 = 0 'inicializamos variables
NumZona2 = 0 'EL VALOR 0 indica que estan todas cerradas
NumZona3 = 0
if lzona_1 = 1 then pause 100:NumZona1= 1 'zona1 abierta: asignar valor 1
if lzona_2 = 1 then pause 100:NumZona2= 2 'zona2 abierta: asignar valor 2
if lzona_3 = 1 then pause 100:NumZona3= 3 'zona3 abierta: asignar valor 3
'Si alguna zona está abierta mensaje y salta a "Activar_Alarma"
'Si todas las zonas están cerradas no hace el mensaje y Salta "Activar_Alarma"
if Lzona_1 = 1 or Lzona_2 = 1 or Lzona_3 = 1 then
lcdout $fe, 1 'limpia la pantalla
lcdout $fe,2," VIOLADA: " ' Posiciona el cursor INICIO línea 1
'posicion 1 de línea 2
lcdout $fe,$C0, "ZONA: ",#NumZona1," - ",#NumZona2," - ",#NumZona3," "
'Pause 400 ' Hacemos una pausa de 4 msegundos
call beep ' Generamos un sonido
call beep ' Generamos un sonido
call beep ' Generamos un sonido
'Pause 1500 ' Pausa para visualizar el mensaje
endif
goto Activar_Alarma
;+++++++++++++++++++++ ERROR AL METER CLAVE +++++++++++++++++++++++++
Error:
low lactivada 'APAGAR led VERDE indicador de estar ACTIVADA LA ALARMA
NFallos = NFallos + 1 'incrementa para limitar a un max de 3 fallos
pause 500
lcdout $fe, 1 ' Limpia la LCD
lcdout $fe, 2 ' Posiciona el cursor en el inicio
lcdout "Maxi. 3 intentos" '" * * * * * * "
Page 14 of 22 19/03/2013 0:48
C:PBP ALARMASMI ALARMAMI ALARMA ADAPTADA AL EAGLE 120x100-- 4 Lineas faltanARCHIVOS
lcdout $fe,$C0, "Numero: ",#NFallos '" ERROR! "
call beep ' Generamos un sonido
call beep ' Generamos un sonido
call beep ' Generamos un sonido
pause 2000 ' Pausa para visualizar el mensaje
'Máximo nº de Fallos 3 para meter la clave
if NFallos >= 3 then NFallos = 0 :goto Activar_Alarma
goto Clave ' Salta a "Clave" para nueva oportunidad
;******RUTINA DE ACTIVACIÓN DE ALARMA CON EL Nº DE TELÉFONO *****
Activar_Alarma: 'TARDARÁ APROX 12 SEGS para volver a la rutina
'"Chequeo_Zonas:" desde la cual se verifica si se
'pulsa alguna tecla Especial con "A" activar
'"C" Cambiar Clave "D" Desconectar.
high lactivada 'ACTIVAR led VERDE indicador de estar
'ACTIVADA LA CENTRAL DE ALARMA
high LSirena 'RB2 activa led y sirena
;Para DESACTIVAR LA ALARMA pulsar "D" e INTRODUCIR LA CLAVE.
; si NO es correcta se vuelve a activar la alarma desde la rutina Error:
; Si la clave es OK ir a "Chequeo_Inicial:" habrá que volver a meter la clave
; pero no estará nada operativa.
Desconectar:
high Col_1 : high Col_2 : high Col_3 : low Col_4
if Fila_D = 0 then call Beep_Estabilizacion :goto Clave_Desconectar
high Col_4 'lo pongo a 1 para que reconozca que pulso la Tecla "D"
'NO LO ENTIENDO PERO HAGO COMO CON "Confirmar_Copia_Clave:"
'+++++ ACTIVA LLAMADAS TELÉFONICA +++++
;SI NO SE HA PULSADO LA TECLA "D" HACER la LLAMADAS:
LLAMADAS:
'ME FALTA POR PONER EL DTMFOUT con el teléfono de la eeprom
'recordar que si if var1 = 0 then var1 = 10 'Que es el tono dtmfout
'correspondiente al 0
pause 2000 ;espera 2 segundos antes de empezar
'------- Para Desconectar rápido en caso de pulsar "D"----------
high Col_1 : high Col_2 : high Col_3 : low Col_4
if Fila_D = 0 then call Beep_Estabilizacion :goto Clave_Desconectar
high Col_4 'lo pongo a 1 para que reconozca que pulso la Tecla "D"
'NO LO ENTIENDO PERO HAGO COMO CON "Confirmar_Copia_Clave:"
'------------------------------------------------------------
high rele ; energice la bobina del rele
pause 2000 ; espere 2 segundos hasta obtener tono de marcar
'------- Para Desconectar rápido en caso de pulsar "D"----------
high Col_1 : high Col_2 : high Col_3 : low Col_4
if Fila_D = 0 then call Beep_Estabilizacion :goto Clave_Desconectar
Page 15 of 22 19/03/2013 0:48
C:PBP ALARMASMI ALARMAMI ALARMA ADAPTADA AL EAGLE 120x100-- 4 Lineas faltanARCHIVOS
high Col_4 'lo pongo a 1 para que reconozca que pulso la Tecla "D"
'NO LO ENTIENDO PERO HAGO COMO CON "Confirmar_Copia_Clave:"
'------------------------------------------------------------
'EL VALOR 0 en código DTMFOUT es el valor 10. por ello la conversión
'del valor 0 en valor DTMFOUT
read 20,DIGITO[1]:if DIGITO[1]= 0 then DIGITO[1]= 10
read 21,DIGITO[2]:if DIGITO[2]= 0 then DIGITO[2]= 10
read 22,DIGITO[3]:if DIGITO[3]= 0 then DIGITO[3]= 10
read 23,DIGITO[4]:if DIGITO[4]= 0 then DIGITO[4]= 10
read 24,DIGITO[5]:if DIGITO[5]= 0 then DIGITO[5]= 10
read 25,DIGITO[6]:if DIGITO[6]= 0 then DIGITO[6]= 10
read 26,DIGITO[7]:if DIGITO[7]= 0 then DIGITO[7]= 10
read 27,DIGITO[8]:if DIGITO[8]= 0 then DIGITO[8]= 10
read 28,DIGITO[9]:if DIGITO[9]= 0 then DIGITO[9]= 10
pause 50 'Pongo este pause para mayor seguridad de que se han copiado
todos los digitos.
;Colocar el Número celular a llamar
dtmfout PORTB.0,[#DIGITO[1],#DIGITO[2],#DIGITO[3],#DIGITO[4],#DIGITO[5],
#DIGITO[6],#DIGITO[7],#DIGITO[8],#DIGITO[9]]
lcdout $fe, 1 ' Limpia la LCD
lcdout $fe, 2," Llamando ... " 'Posiciona el cursor en el inicio
'Posiciona el cursor inicio linea 2
lcdout $fe,$C0,"Telfno ",#DIGITO[1],#DIGITO[2],#DIGITO[3],#DIGITO[4],
#DIGITO[5],#DIGITO[6],#DIGITO[7],#DIGITO[8],#DIGITO[9]
pause 8000 'Espera de 8 sgs hasta que alguien conteste.
'en otros ejemplos ponen sólo 4 sgs
'------- Para Desconectar rápido en caso de pulsar "D"----------
high Col_1 : high Col_2 : high Col_3 : low Col_4
if Fila_D = 0 then call Beep_Estabilizacion :goto Clave_Desconectar
high Col_4 'lo pongo a 1 para que reconozca que pulso la Tecla "D"
'NO LO ENTIENDO PERO HAGO COMO CON "Confirmar_Copia_Clave:"
'------------------------------------------------------------
'PASADOS LOS 8 SEGUNDOS
;SONIDO DE SIRENA por el telefno PARA ADVERTIR
for X= 1 to 25 ;repetir 25 veces equivale a 6 segundos a 20 MHZ
;ver explicación pag 97 3era edición
'enviar el sonido de sirena por el teléfono
sound portB.0,[100,10,50,10]'Este otro es interesante[125,4,123,5]
next ;siguiente repetición
low rele 'desconectar el relé el cual cierra la llamada
'++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'Chequea zonas para de esta forma poder ver en LCD
'las zonas violadas. En caso de cerrarse la zona no saldría mensaje
'y volvería a "Activar_Alarma". En cuanto se habra una zona saldrá el
'mensaje y de nuevo a "Activar_Alarma.
goto Mensaje_Zonas_Violadas ' Chequeo_Zonas
Page 16 of 22 19/03/2013 0:48
C:PBP ALARMASMI ALARMAMI ALARMA ADAPTADA AL EAGLE 120x100-- 4 Lineas faltanARCHIVOS
'++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'-----RUTINA ANTI-REBOTE PULSADORES DEL TECLADO--------------
' La siguiente subrutina genera un "Beep" en el Buzzer
' conectado en RC0. cada vez que se pulse una tecla.
'++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Beep_Estabilizacion: 'SE PUEDE SUSTITUIR POR "CALL Beep"
'cada vez que se pulse una tecla producir un Beep
high LBuzzer ' Estado Lógico Alto para RA5
pause 100 ' Pausa de 100 milisegundos
low LBuzzer ' Estado Lógico Bajo para RA5
Espera_Suelte_Tecla: 'De RC4 a RC7 son las filas del teclado
if Fila_A = 0 then Espera_Suelte_Tecla 'Hasta que no deje de ser pulsada
' no retornará para seguir
leyendo
if Fila_B = 0 then Espera_Suelte_Tecla 'Hasta que no deje de ser pulsada
' no retornará para seguir
leyendo
if Fila_C = 0 then Espera_Suelte_Tecla 'Hasta que no deje de ser pulsada
' no retornará para seguir
leyendo
if Fila_D = 0 then Espera_Suelte_Tecla '(*) Hasta que no deje de ser
pulsada
' no retornará para seguir
leyendo
pause 25 'otros programas lo tienen, pero no lo creo necesario
return
'------------------------------------------------------------------------
Beep: 'cuando sale mensaje produce un Beep
'cada vez que se pulse una tecla producir un Beep
high LBuzzer ' Estado Lógico Alto para RA5
pause 100 ' Pausa de 100 milisegundos
low LBuzzer ' Estado Lógico Bajo para RA5
return
'***************************************************************
'* lee el teclado y cuando hay una tecla pulsada *
'* (25 a 30 ms), carga la variable con el valor de la tecla *
'* y espera a que se suelte la tecla. *
'* cuando lo haga retornará a la rutina "Consulta" *
'* Garantizamos el rebote de contacto garantizando que solo *
'* una tecla sea cargada y no varias veces por cada pulso *
'* de cierre.
'* SE PERMITE LA LECTURA DE TODAS LAS TECLAS PARA LA CLAVE *
'***************************************************************
Teclado:
;SI NO SE PULSA NINGUNA TECLA VAR1 = 170
VAR1 = 170 '170=1010101010' y lopongo en lugar de var1= 0
'para que se cheque también el 0 en caso de cambiar
'clave.
Page 17 of 22 19/03/2013 0:48
C:PBP ALARMASMI ALARMAMI ALARMA ADAPTADA AL EAGLE 120x100-- 4 Lineas faltanARCHIVOS
pause 100 'CON estos pauses evito que en la simulacion en PROTEUS
'salga CPU cargada
Col_1 = 0 ' Columna 1 = 0 Col_1 var PORTC.0
Col_2 = 1 ' Columna 2 = 1
Col_3 = 1 ' Columna 3 = 1
Col_4 = 1 ' Columna 4 = 1
if Fila_A = 0 then VAR1 = 1:goto Beep_Estabilizacion ' tecla "1"
if Fila_B = 0 then VAR1 = 4:goto Beep_Estabilizacion ' tecla "4"
if Fila_C = 0 then VAR1 = 7:goto Beep_Estabilizacion ' tecla "7"
if Fila_D = 0 then VAR1 = "*":goto Beep_Estabilizacion' tecla "*" 11
Col_1 = 1 ' Columna 1 = 1
Col_2 = 0 ' Columna 2 = 0
Col_3 = 1 ' Columna 3 = 1
Col_4 = 1 ' Columna 4 = 1
if Fila_A = 0 then VAR1 = 2:goto Beep_Estabilizacion ' tecla "2"
if Fila_B = 0 then VAR1 = 5:goto Beep_Estabilizacion ' tecla "5"
if Fila_C = 0 then VAR1 = 8:goto Beep_Estabilizacion ' tecla "8"
if Fila_D = 0 then VAR1 = 0:goto Beep_Estabilizacion ' tecla "0" 10
Col_1 = 1 ' Columna 1 = 1
Col_2 = 1 ' Columna 2 = 1
Col_3 = 0 ' Columna 3 = 0
Col_4 = 1 ' Columna 4 = 1
if Fila_A = 0 then VAR1 = 3:goto Beep_Estabilizacion ' tecla "3"
if Fila_B = 0 then VAR1 = 6:goto Beep_Estabilizacion ' tecla "6"
if Fila_C = 0 then VAR1 = 9:goto Beep_Estabilizacion ' tecla "9"
if Fila_D = 0 then VAR1 ="#":goto Beep_Estabilizacion ' tecla "#" 12
Col_1 = 1 ' Columna 1 = 1
Col_2 = 1 ' Columna 2 = 1
Col_3 = 1 ' Columna 3 = 1
Col_4 = 0 ' Columna 4 = 0
'"A" La utilizo para ACTIVAR EMERGENCIA"
if Fila_A = 0 then VAR1 = "A":goto Beep_Estabilizacion ' tecla "A" ->13
if Fila_B = 0 then VAR1 = "B":goto Beep_Estabilizacion ' tecla "B" ->14
'"C" La utilizo para CAMBIAR CLAVE"
Page 18 of 22 19/03/2013 0:48
C:PBP ALARMASMI ALARMAMI ALARMA ADAPTADA AL EAGLE 120x100-- 4 Lineas faltanARCHIVOS
if Fila_C = 0 then VAR1 = "C":goto Beep_Estabilizacion ' tecla "C" ->15
''"D" La utilizo para DESACTIVAR ALARMA"
if Fila_D = 0 then VAR1 = "D":goto Beep_Estabilizacion ' tecla "D" ->0
'SI NO SE HA PULSADO NINGUNA TECLA RETORNAR
return ' Retorna una línea después del llamado "Call"
;+++++++++++++++++++++ CAMBIO DE CLAVE ++++++++++++++++++++++++++++
Cambio_Clave:
pause 50 'Con estos pauses evito que en la simulacion en PROTEUS
'salga CPU cargada
lcdout $fe, 1 ' Limpia la LCD
lcdout $fe, 2 ' Posiciona el cursor en el inicio
lcdout " Cambiar Clave?" 'NO LE PONGO LA "¿" por no reconocerla
la LCD
lcdout $fe,$C0, "Si,pulsar 1 NO 2"
call Beep ' Generamos un sonido
Chequeo: 'chequeo de si se pulsa 1 o 2 para cambiar la clave
pause 100 'Con estos pauses evito que en la simulacion en PROTEUS
'salga CPU cargada
Col_1 = 0 ' Columna 1 = 0 RC.0 a RC.3
Col_2 = 1 ' Columna 2 = 1
Col_3 = 1 ' Columna 3 = 1
Col_4 = 1 ' Columna 4 = 1
if Fila_A = 0 then ' tecla "1" SÍ QUIERO CAMBIAR LA CLAVE
call Beep_Estabilizacion;
goto Nueva_Clave
endif
Col_1 = 1 ' Columna 1 = 1 RC.0 a RC.3
Col_2 = 0 ' Columna 2 = 0
Col_3 = 1 ' Columna 3 = 1
Col_4 = 1 ' Columna 4 = 1
if Fila_A = 0 then ' tecla "2" No quiero cambiar clave
call Beep_Estabilizacion
goto Continuar 'retorna a "Continuar:"
endif
goto chequeo 'a la espera de que se pulse una u otra acción
'+++++++++++++++++++++++NUEVA CLAVE+++++++++++++++++++++
Nueva_Clave:
pause 100 'pausa de 1/2 segundo
;PRIMERO DEBE PONER LA CLAVE ANTERIOR: y después la actual
lcdout $fe, 1 ' Limpia la LCD
Page 19 of 22 19/03/2013 0:48
C:PBP ALARMASMI ALARMAMI ALARMA ADAPTADA AL EAGLE 120x100-- 4 Lineas faltanARCHIVOS
lcdout $fe, 2 ' Posiciona el cursor en el inicio
lcdout "CLAVE ANTERIOR:" 'NO LE PONGO LA "¿" por no reconocerla la
LCD
call Beep ' Generamos un sonido
' goto Comparar_Clave_Antigua
;verifca que se conoce la clave antigua para
;poder cambiarla.
'----Iniciamos la posicion inicial para escribir en LCD y EEPROM----
POSICION_LCD= $C8 'primera posición en la LCD para sacar "******"
DIRECCION_EEPROM = 1 'primera posición de la EEPROM para grabar la
clave de 6 digitos
'ocupará de la 1 a la 6 SON 6 DÍGITOS DE CLAVE
'-------------------------------------------------------------------
X = 0 ' Iniciamos la variable POR SI ACASO.
Introducir_Clave_Antigua:
call Teclado
' Si ninguna tecla fue pulsada salta a "Introducir_Clave_Antigua"
if VAR1 = 170 then Introducir_Clave_Antigua
lcdout $fe,$C0, "Valor: ",#VAR1
lcdout $fe,POSICION_LCD, "*" 'ocultarlo
'incrementamos la posición, se deben poner un máximo de 6 digitos
POSICION_LCD = POSICION_LCD + 1
X = X + 1
DIGITO[X] = VAR1 ' El valor de la tecla pulsada lo
' guardamos en la variable correspondiente
if X >= 6 then Comprobar_Clave_Antigua
' Si X = 6 estamos guardando en DIGITO[6]
' el último valor introducido desde el
' teclado matricial
goto Introducir_Clave_Antigua 'Si X es diferente de 6 continuamos
'esperando el siguiente valor a ser
'ingresado desde el teclado
' A partir de la siguiente etiqueta empezamos la comprobación,
' y el formato es:
'
' Si DIGITO[X] es igual a CLV[X] el digito es correcto,
' y salta a la etiqueta "paseX",
' si es diferente salta a la subrutina "error"; veamos…
Comprobar_Clave_Antigua:
X = 0 'iniciamos la variable por seguridad
if DIGITO[1] = CLV[1] then pasar1:goto error
pasar1:
if DIGITO[2] = CLV[2] then pasar2:goto error
pasar2:
if DIGITO[3] = CLV[3] then pasar3:goto error
pasar3:
Page 20 of 22 19/03/2013 0:48
C:PBP ALARMASMI ALARMAMI ALARMA ADAPTADA AL EAGLE 120x100-- 4 Lineas faltanARCHIVOS
if DIGITO[4] = CLV[4] then pasar4:goto error
pasar4:
if DIGITO[5] = CLV[5] then pasar5:goto error
pasar5:
if DIGITO[6] = CLV[6] then goto Introducir_Nueva_Clave: goto error 'Si
no son iguales ir a error
'si son iguales los 6 digitos continuar e introducir "La Nueva Clave"
'---------------------------------------------------------------------------
'+++DESDE AQUÍ SE HACE LECTURA DE LA NUEVA CLAVE Y SE GUARDA A PARTIR +++++
'+++ DE LA POSICIÓN 10 DE LA EEPROM +++++
Introducir_Nueva_Clave:
lcdout $fe, 1 ' Limpia la LCD
lcdout $fe, 2 ' Posiciona el cursor en el inicio
lcdout "Int. Nueva Clave"
lcdout $fe,$C0, " 6 DIGITOS "
call Beep ' Generamos un sonido
pause 2000
lcdout $fe,$C0, " " ;limpia la línea 2
'----Iniciamos la posicion inicial para escribir en LCD y EEPROM----
POSICION_LCD= $C8 'primera posición en la LCD para sacar "******"
DIRECCION_EEPROM = 1 'primera posición de la EEPROM para grabar la
clave de 6 digitos
'ocupará de la 1 a la 6 SON 6 DÍGITOS DE CLAVE
'-------------------------------------------------------------------
Lectura_Teclado_EEPROM:
call teclado
' Si ninguna tecla fue pulsada salta a "Lectura_Teclado_EEPROM"
if VAR1 = 170 then Lectura_Teclado_EEPROM
lcdout $fe,$C0, "Valor: ",#VAR1
lcdout $fe,POSICION_LCD, "*" 'ocultarlo
'incrementamos la posición, se deben poner un máximo de 6 digitos
POSICION_LCD = POSICION_LCD + 1
write DIRECCION_EEPROM,VAR1 ' Escribe el valor en la memoria de datos
' Revisa si llegamos al límite asignado por
' el programador en la memoria de datos
if DIRECCION_EEPROM = 6 then Apuntar_Clave
DIRECCION_EEPROM = DIRECCION_EEPROM + 1 ' Aumentamos la posición en una
unidad
goto Lectura_Teclado_EEPROM 'si aún no se ha llegado a introducir los 6
digitos
;AL LLEGAR A 16 ANOTAR LA CLAVE
Apuntar_Clave:
pause 100
'X = 0 ' inicializamos la variable X = 0 no hace falta aquí
read 1, CLV[1] ' leemos el primer dígito y lo guardamos en CLV[1]
read 2, CLV[2] ' leemos el segundo dígito y lo guardamos en CLV[2]
read 3, CLV[3] ' leemos el tercer dígito y lo guardamos en CLV[3]
Page 21 of 22 19/03/2013 0:48
C:PBP ALARMASMI ALARMAMI ALARMA ADAPTADA AL EAGLE 120x100-- 4 Lineas faltanARCHIVOS
read 4, CLV[4] ' leemos el cuarto dígito y lo guardamos en CLV[4]
read 5, CLV[5] ' leemos el quinto dígito y lo guardamos en CLV[5]
read 6, CLV[6] ' leemos el sexto dígito y lo guardamos en CLV[6]
pause 200 'Para preparar la LCD, no es necesario, pero para simulación
lcdout $fe, 1 ' Limpia la pantalla
lcdout $fe, 2 ' Posiciona el cursor en el inicio
lcdout "ANOTE LA CLAVE: "
pause 1500
lcdout $fe, 2 , "PULSE < 1 > OK "
lcdout $fe,$C0," ", #CLV[1],"-",#CLV[2],"-",#CLV[3],"-",#CLV[4],"-",
#CLV[5],"-",#CLV[6]
;+++++++++++++++++++ CONFIRMAR COPIA CLAVE ++++++++++++++++++++++
;confirmar pulsando la Tecla 1 que hemos copiado la clave nueva.
Confirmar_Copia_Clave: 'chequeo de si se pulsa 1 o 2 para cambiar la clave
pause 100 'Con estos pauses evito que en la simulacion en PROTEUS
'salga CPU cargada
Col_1 = 0 ' Columna 1 = 0 RC.0 a RC.3
Col_2 = 1 ' Columna 2 = 1
Col_3 = 1 ' Columna 3 = 1
Col_4 = 1 ' Columna 4 = 1
' tecla "1" SÍ QUIERO CAMBIAR LA CLAVE
if Fila_A = 0 then call Beep_Estabilizacion:goto Inicio
;NOTA EN LA SIMULACION DEL PROTEUS SI NO MODIFICO EL VALOR DE "Col_1" NO
'ACTUARÍA Y NO HARÍA NADA AL PULSAR LA "TECLA 1" Y NO LO ENTIENDO
'PERO ESTÁ MÁS QUE DEMOSTRADO. Por ello le pongo el valor Col_1 = 1
;antes de volver a confirmar
Col_1 = 1 ' Columna 1 = 1 RC.0 a RC.3
'Col_2 = 0 ' Columna 2 = 0
'Col_3 = 1 ' Columna 3 = 1
'Col_4 = 1 ' Columna 4 = 1
goto Confirmar_Copia_Clave 'a la espera de que se pulse la Tecla 1
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
end
Page 22 of 22 19/03/2013 0:48

Weitere ähnliche Inhalte

Ähnlich wie Proyecto mi alarma_pbp_completo_48pag

Construccion sonometro nov dic 16 21 pgs-joaquin
Construccion sonometro nov dic 16 21 pgs-joaquinConstruccion sonometro nov dic 16 21 pgs-joaquin
Construccion sonometro nov dic 16 21 pgs-joaquinjoaquinin1
 
ARDUINO - LADDER - PROYECTO CIRCUITO ELECTRONEUMÁTICO 2 CILINDROS COMPLE...
ARDUINO - LADDER  - PROYECTO  CIRCUITO  ELECTRONEUMÁTICO  2  CILINDROS COMPLE...ARDUINO - LADDER  - PROYECTO  CIRCUITO  ELECTRONEUMÁTICO  2  CILINDROS COMPLE...
ARDUINO - LADDER - PROYECTO CIRCUITO ELECTRONEUMÁTICO 2 CILINDROS COMPLE...Jovanny Duque
 
Fuente alimentacion samsung bn44 00261 a lcd
Fuente alimentacion samsung bn44 00261 a   lcdFuente alimentacion samsung bn44 00261 a   lcd
Fuente alimentacion samsung bn44 00261 a lcdwilmer67
 
3.3 display 7 segmentos con decoder
3.3 display 7 segmentos con decoder3.3 display 7 segmentos con decoder
3.3 display 7 segmentos con decoderSNPP
 
Proyecto coche por bluetooth por joaquin berrocal piris marzo 2017
Proyecto coche por bluetooth por joaquin berrocal piris marzo 2017Proyecto coche por bluetooth por joaquin berrocal piris marzo 2017
Proyecto coche por bluetooth por joaquin berrocal piris marzo 2017joaquinin1
 
Brazo robotico ksr10 ps2 x mayo 2015 a 9v_version_3
Brazo robotico ksr10 ps2 x  mayo 2015 a 9v_version_3Brazo robotico ksr10 ps2 x  mayo 2015 a 9v_version_3
Brazo robotico ksr10 ps2 x mayo 2015 a 9v_version_3joaquinin1
 
Examen micros t1_06_solucion
Examen micros t1_06_solucionExamen micros t1_06_solucion
Examen micros t1_06_solucionJair BG
 
Instalacion electrica casa habitacion
Instalacion electrica  casa habitacionInstalacion electrica  casa habitacion
Instalacion electrica casa habitacionpikoroput1
 
Construccion seguidor de línea por joaquín berrocal verano 2017
Construccion seguidor de línea por joaquín berrocal verano 2017Construccion seguidor de línea por joaquín berrocal verano 2017
Construccion seguidor de línea por joaquín berrocal verano 2017joaquinin1
 
Construcción de un Brazo robot (Materia Arquitectura de Computadoras)
Construcción de un Brazo robot (Materia Arquitectura de Computadoras)Construcción de un Brazo robot (Materia Arquitectura de Computadoras)
Construcción de un Brazo robot (Materia Arquitectura de Computadoras)Cristina Zavala Palacios
 
Informe final 4 microcontroladores
Informe final 4 microcontroladoresInforme final 4 microcontroladores
Informe final 4 microcontroladoresKeny Villa Tuesta
 
⭐⭐⭐⭐⭐ (Práctica 6) DESARROLLO DE APLICACIONES CON PIC16F886
⭐⭐⭐⭐⭐ (Práctica 6) DESARROLLO DE APLICACIONES CON PIC16F886⭐⭐⭐⭐⭐ (Práctica 6) DESARROLLO DE APLICACIONES CON PIC16F886
⭐⭐⭐⭐⭐ (Práctica 6) DESARROLLO DE APLICACIONES CON PIC16F886Victor Asanza
 
Esquemas media tensión con schneider electric
Esquemas media tensión con schneider electricEsquemas media tensión con schneider electric
Esquemas media tensión con schneider electricFlaco Luis
 

Ähnlich wie Proyecto mi alarma_pbp_completo_48pag (20)

Construccion sonometro nov dic 16 21 pgs-joaquin
Construccion sonometro nov dic 16 21 pgs-joaquinConstruccion sonometro nov dic 16 21 pgs-joaquin
Construccion sonometro nov dic 16 21 pgs-joaquin
 
Kit videoporteiro fermax 3904
Kit videoporteiro fermax 3904Kit videoporteiro fermax 3904
Kit videoporteiro fermax 3904
 
Semaforos
SemaforosSemaforos
Semaforos
 
ARDUINO - LADDER - PROYECTO CIRCUITO ELECTRONEUMÁTICO 2 CILINDROS COMPLE...
ARDUINO - LADDER  - PROYECTO  CIRCUITO  ELECTRONEUMÁTICO  2  CILINDROS COMPLE...ARDUINO - LADDER  - PROYECTO  CIRCUITO  ELECTRONEUMÁTICO  2  CILINDROS COMPLE...
ARDUINO - LADDER - PROYECTO CIRCUITO ELECTRONEUMÁTICO 2 CILINDROS COMPLE...
 
Kit videoporteiro fermax
Kit videoporteiro fermaxKit videoporteiro fermax
Kit videoporteiro fermax
 
Fuente alimentacion samsung bn44 00261 a lcd
Fuente alimentacion samsung bn44 00261 a   lcdFuente alimentacion samsung bn44 00261 a   lcd
Fuente alimentacion samsung bn44 00261 a lcd
 
3.3 display 7 segmentos con decoder
3.3 display 7 segmentos con decoder3.3 display 7 segmentos con decoder
3.3 display 7 segmentos con decoder
 
Proyecto coche por bluetooth por joaquin berrocal piris marzo 2017
Proyecto coche por bluetooth por joaquin berrocal piris marzo 2017Proyecto coche por bluetooth por joaquin berrocal piris marzo 2017
Proyecto coche por bluetooth por joaquin berrocal piris marzo 2017
 
Brazo robotico ksr10 ps2 x mayo 2015 a 9v_version_3
Brazo robotico ksr10 ps2 x  mayo 2015 a 9v_version_3Brazo robotico ksr10 ps2 x  mayo 2015 a 9v_version_3
Brazo robotico ksr10 ps2 x mayo 2015 a 9v_version_3
 
Anti robo sovica exa c325
Anti robo sovica exa c325Anti robo sovica exa c325
Anti robo sovica exa c325
 
Tutorial - Nota: 1233
Tutorial - Nota: 1233Tutorial - Nota: 1233
Tutorial - Nota: 1233
 
Examen micros t1_06_solucion
Examen micros t1_06_solucionExamen micros t1_06_solucion
Examen micros t1_06_solucion
 
Instalacion electrica casa habitacion
Instalacion electrica  casa habitacionInstalacion electrica  casa habitacion
Instalacion electrica casa habitacion
 
Construccion seguidor de línea por joaquín berrocal verano 2017
Construccion seguidor de línea por joaquín berrocal verano 2017Construccion seguidor de línea por joaquín berrocal verano 2017
Construccion seguidor de línea por joaquín berrocal verano 2017
 
Construcción de un Brazo robot (Materia Arquitectura de Computadoras)
Construcción de un Brazo robot (Materia Arquitectura de Computadoras)Construcción de un Brazo robot (Materia Arquitectura de Computadoras)
Construcción de un Brazo robot (Materia Arquitectura de Computadoras)
 
Informe final 4 microcontroladores
Informe final 4 microcontroladoresInforme final 4 microcontroladores
Informe final 4 microcontroladores
 
⭐⭐⭐⭐⭐ (Práctica 6) DESARROLLO DE APLICACIONES CON PIC16F886
⭐⭐⭐⭐⭐ (Práctica 6) DESARROLLO DE APLICACIONES CON PIC16F886⭐⭐⭐⭐⭐ (Práctica 6) DESARROLLO DE APLICACIONES CON PIC16F886
⭐⭐⭐⭐⭐ (Práctica 6) DESARROLLO DE APLICACIONES CON PIC16F886
 
Esquemas media tensión con schneider electric
Esquemas media tensión con schneider electricEsquemas media tensión con schneider electric
Esquemas media tensión con schneider electric
 
Micro2 tema 4
Micro2 tema 4Micro2 tema 4
Micro2 tema 4
 
Lab 01 micro
Lab 01 microLab 01 micro
Lab 01 micro
 

Mehr von joaquinin1

Simulador_CAN_OBD2_por_Joaquín_Berrocal_Piris_mayo_2023.pdf
Simulador_CAN_OBD2_por_Joaquín_Berrocal_Piris_mayo_2023.pdfSimulador_CAN_OBD2_por_Joaquín_Berrocal_Piris_mayo_2023.pdf
Simulador_CAN_OBD2_por_Joaquín_Berrocal_Piris_mayo_2023.pdfjoaquinin1
 
Control_Temp_Hume_AC_junio_22.pdf
Control_Temp_Hume_AC_junio_22.pdfControl_Temp_Hume_AC_junio_22.pdf
Control_Temp_Hume_AC_junio_22.pdfjoaquinin1
 
Mi simulador obdii_2018_marzo_2018--34 pags
Mi simulador obdii_2018_marzo_2018--34 pagsMi simulador obdii_2018_marzo_2018--34 pags
Mi simulador obdii_2018_marzo_2018--34 pagsjoaquinin1
 
Proyecto bornera 60 +_94_pines_mayo_18_por_joaquin berrocal piris
Proyecto bornera 60 +_94_pines_mayo_18_por_joaquin berrocal pirisProyecto bornera 60 +_94_pines_mayo_18_por_joaquin berrocal piris
Proyecto bornera 60 +_94_pines_mayo_18_por_joaquin berrocal pirisjoaquinin1
 
Proyecto robot mentor v1 enero_19_por_joaquin berrocal piris
Proyecto robot mentor v1 enero_19_por_joaquin berrocal pirisProyecto robot mentor v1 enero_19_por_joaquin berrocal piris
Proyecto robot mentor v1 enero_19_por_joaquin berrocal pirisjoaquinin1
 
Alarma arduino wavecom programa y esquema numeros borrados 48 pag
Alarma arduino wavecom programa y esquema numeros borrados 48 pagAlarma arduino wavecom programa y esquema numeros borrados 48 pag
Alarma arduino wavecom programa y esquema numeros borrados 48 pagjoaquinin1
 
Proyecto balancing joaquin berrocal piris abril 2016 - 53 pag
Proyecto balancing joaquin berrocal piris abril 2016  - 53 pagProyecto balancing joaquin berrocal piris abril 2016  - 53 pag
Proyecto balancing joaquin berrocal piris abril 2016 - 53 pagjoaquinin1
 
Puente garaje-asm
Puente garaje-asmPuente garaje-asm
Puente garaje-asmjoaquinin1
 
Frecuencimetro receptor hall esquema y programa pbp 28 pag
Frecuencimetro receptor hall esquema y programa pbp 28 pagFrecuencimetro receptor hall esquema y programa pbp 28 pag
Frecuencimetro receptor hall esquema y programa pbp 28 pagjoaquinin1
 
Ascensor fotos esquemas_asm_y_hex
Ascensor fotos esquemas_asm_y_hexAscensor fotos esquemas_asm_y_hex
Ascensor fotos esquemas_asm_y_hexjoaquinin1
 
Construcción máquina control numérico cnc agost-sept-2009_joaquin berrocal pî...
Construcción máquina control numérico cnc agost-sept-2009_joaquin berrocal pî...Construcción máquina control numérico cnc agost-sept-2009_joaquin berrocal pî...
Construcción máquina control numérico cnc agost-sept-2009_joaquin berrocal pî...joaquinin1
 
Control de 8 sensores de temperatura ds1621 en proteus eagle-asm-hex por joaq...
Control de 8 sensores de temperatura ds1621 en proteus eagle-asm-hex por joaq...Control de 8 sensores de temperatura ds1621 en proteus eagle-asm-hex por joaq...
Control de 8 sensores de temperatura ds1621 en proteus eagle-asm-hex por joaq...joaquinin1
 
Proyecto brazo robotico ksr10 enero marzo 2015 a 9 v-version_2
Proyecto brazo robotico ksr10  enero marzo 2015 a 9 v-version_2Proyecto brazo robotico ksr10  enero marzo 2015 a 9 v-version_2
Proyecto brazo robotico ksr10 enero marzo 2015 a 9 v-version_2joaquinin1
 
Proyecto brazo robotico ksr10 enero marzo 2015
Proyecto brazo robotico ksr10  enero marzo 2015Proyecto brazo robotico ksr10  enero marzo 2015
Proyecto brazo robotico ksr10 enero marzo 2015joaquinin1
 
Proyecto brazo robotico ksr10 enero marzo 2015
Proyecto brazo robotico ksr10  enero marzo 2015Proyecto brazo robotico ksr10  enero marzo 2015
Proyecto brazo robotico ksr10 enero marzo 2015joaquinin1
 
Ruedas muy interesante _67_pag
Ruedas muy interesante _67_pagRuedas muy interesante _67_pag
Ruedas muy interesante _67_pagjoaquinin1
 
Sistema de carga y arranque del automovil 18 pag
Sistema de carga y arranque del automovil 18 pagSistema de carga y arranque del automovil 18 pag
Sistema de carga y arranque del automovil 18 pagjoaquinin1
 
Ac muy bueno 143 pag f sin logo
Ac muy bueno 143 pag f sin logoAc muy bueno 143 pag f sin logo
Ac muy bueno 143 pag f sin logojoaquinin1
 
Explicacion de la carga comprob f
Explicacion de la carga comprob fExplicacion de la carga comprob f
Explicacion de la carga comprob fjoaquinin1
 
Climatizacion peugeot manual del alumno 76 pag interesante
Climatizacion peugeot manual del alumno 76 pag interesanteClimatizacion peugeot manual del alumno 76 pag interesante
Climatizacion peugeot manual del alumno 76 pag interesantejoaquinin1
 

Mehr von joaquinin1 (20)

Simulador_CAN_OBD2_por_Joaquín_Berrocal_Piris_mayo_2023.pdf
Simulador_CAN_OBD2_por_Joaquín_Berrocal_Piris_mayo_2023.pdfSimulador_CAN_OBD2_por_Joaquín_Berrocal_Piris_mayo_2023.pdf
Simulador_CAN_OBD2_por_Joaquín_Berrocal_Piris_mayo_2023.pdf
 
Control_Temp_Hume_AC_junio_22.pdf
Control_Temp_Hume_AC_junio_22.pdfControl_Temp_Hume_AC_junio_22.pdf
Control_Temp_Hume_AC_junio_22.pdf
 
Mi simulador obdii_2018_marzo_2018--34 pags
Mi simulador obdii_2018_marzo_2018--34 pagsMi simulador obdii_2018_marzo_2018--34 pags
Mi simulador obdii_2018_marzo_2018--34 pags
 
Proyecto bornera 60 +_94_pines_mayo_18_por_joaquin berrocal piris
Proyecto bornera 60 +_94_pines_mayo_18_por_joaquin berrocal pirisProyecto bornera 60 +_94_pines_mayo_18_por_joaquin berrocal piris
Proyecto bornera 60 +_94_pines_mayo_18_por_joaquin berrocal piris
 
Proyecto robot mentor v1 enero_19_por_joaquin berrocal piris
Proyecto robot mentor v1 enero_19_por_joaquin berrocal pirisProyecto robot mentor v1 enero_19_por_joaquin berrocal piris
Proyecto robot mentor v1 enero_19_por_joaquin berrocal piris
 
Alarma arduino wavecom programa y esquema numeros borrados 48 pag
Alarma arduino wavecom programa y esquema numeros borrados 48 pagAlarma arduino wavecom programa y esquema numeros borrados 48 pag
Alarma arduino wavecom programa y esquema numeros borrados 48 pag
 
Proyecto balancing joaquin berrocal piris abril 2016 - 53 pag
Proyecto balancing joaquin berrocal piris abril 2016  - 53 pagProyecto balancing joaquin berrocal piris abril 2016  - 53 pag
Proyecto balancing joaquin berrocal piris abril 2016 - 53 pag
 
Puente garaje-asm
Puente garaje-asmPuente garaje-asm
Puente garaje-asm
 
Frecuencimetro receptor hall esquema y programa pbp 28 pag
Frecuencimetro receptor hall esquema y programa pbp 28 pagFrecuencimetro receptor hall esquema y programa pbp 28 pag
Frecuencimetro receptor hall esquema y programa pbp 28 pag
 
Ascensor fotos esquemas_asm_y_hex
Ascensor fotos esquemas_asm_y_hexAscensor fotos esquemas_asm_y_hex
Ascensor fotos esquemas_asm_y_hex
 
Construcción máquina control numérico cnc agost-sept-2009_joaquin berrocal pî...
Construcción máquina control numérico cnc agost-sept-2009_joaquin berrocal pî...Construcción máquina control numérico cnc agost-sept-2009_joaquin berrocal pî...
Construcción máquina control numérico cnc agost-sept-2009_joaquin berrocal pî...
 
Control de 8 sensores de temperatura ds1621 en proteus eagle-asm-hex por joaq...
Control de 8 sensores de temperatura ds1621 en proteus eagle-asm-hex por joaq...Control de 8 sensores de temperatura ds1621 en proteus eagle-asm-hex por joaq...
Control de 8 sensores de temperatura ds1621 en proteus eagle-asm-hex por joaq...
 
Proyecto brazo robotico ksr10 enero marzo 2015 a 9 v-version_2
Proyecto brazo robotico ksr10  enero marzo 2015 a 9 v-version_2Proyecto brazo robotico ksr10  enero marzo 2015 a 9 v-version_2
Proyecto brazo robotico ksr10 enero marzo 2015 a 9 v-version_2
 
Proyecto brazo robotico ksr10 enero marzo 2015
Proyecto brazo robotico ksr10  enero marzo 2015Proyecto brazo robotico ksr10  enero marzo 2015
Proyecto brazo robotico ksr10 enero marzo 2015
 
Proyecto brazo robotico ksr10 enero marzo 2015
Proyecto brazo robotico ksr10  enero marzo 2015Proyecto brazo robotico ksr10  enero marzo 2015
Proyecto brazo robotico ksr10 enero marzo 2015
 
Ruedas muy interesante _67_pag
Ruedas muy interesante _67_pagRuedas muy interesante _67_pag
Ruedas muy interesante _67_pag
 
Sistema de carga y arranque del automovil 18 pag
Sistema de carga y arranque del automovil 18 pagSistema de carga y arranque del automovil 18 pag
Sistema de carga y arranque del automovil 18 pag
 
Ac muy bueno 143 pag f sin logo
Ac muy bueno 143 pag f sin logoAc muy bueno 143 pag f sin logo
Ac muy bueno 143 pag f sin logo
 
Explicacion de la carga comprob f
Explicacion de la carga comprob fExplicacion de la carga comprob f
Explicacion de la carga comprob f
 
Climatizacion peugeot manual del alumno 76 pag interesante
Climatizacion peugeot manual del alumno 76 pag interesanteClimatizacion peugeot manual del alumno 76 pag interesante
Climatizacion peugeot manual del alumno 76 pag interesante
 

Kürzlich hochgeladen

SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptxSEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptxYadi Campos
 
Programacion Anual Matemática4 MPG 2024 Ccesa007.pdf
Programacion Anual Matemática4    MPG 2024  Ccesa007.pdfProgramacion Anual Matemática4    MPG 2024  Ccesa007.pdf
Programacion Anual Matemática4 MPG 2024 Ccesa007.pdfDemetrio Ccesa Rayme
 
Ejercicios de PROBLEMAS PAEV 6 GRADO 2024.pdf
Ejercicios de PROBLEMAS PAEV 6 GRADO 2024.pdfEjercicios de PROBLEMAS PAEV 6 GRADO 2024.pdf
Ejercicios de PROBLEMAS PAEV 6 GRADO 2024.pdfMaritzaRetamozoVera
 
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdf
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdfCurso = Metodos Tecnicas y Modelos de Enseñanza.pdf
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdfFrancisco158360
 
La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...JonathanCovena1
 
La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.amayarogel
 
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLA
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLAACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLA
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLAJAVIER SOLIS NOYOLA
 
CALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADCALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADauxsoporte
 
Ley 21.545 - Circular Nº 586.pdf circular
Ley 21.545 - Circular Nº 586.pdf circularLey 21.545 - Circular Nº 586.pdf circular
Ley 21.545 - Circular Nº 586.pdf circularMooPandrea
 
PLAN DE REFUERZO ESCOLAR primaria (1).docx
PLAN DE REFUERZO ESCOLAR primaria (1).docxPLAN DE REFUERZO ESCOLAR primaria (1).docx
PLAN DE REFUERZO ESCOLAR primaria (1).docxlupitavic
 
proyecto de mayo inicial 5 añitos aprender es bueno para tu niño
proyecto de mayo inicial 5 añitos aprender es bueno para tu niñoproyecto de mayo inicial 5 añitos aprender es bueno para tu niño
proyecto de mayo inicial 5 añitos aprender es bueno para tu niñotapirjackluis
 
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURAFORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURAEl Fortí
 
Valoración Crítica de EEEM Feco2023 FFUCV
Valoración Crítica de EEEM Feco2023 FFUCVValoración Crítica de EEEM Feco2023 FFUCV
Valoración Crítica de EEEM Feco2023 FFUCVGiustinoAdesso1
 
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfSELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfAngélica Soledad Vega Ramírez
 
ORGANIZACIÓN SOCIAL INCA EN EL TAHUANTINSUYO.pptx
ORGANIZACIÓN SOCIAL INCA EN EL TAHUANTINSUYO.pptxORGANIZACIÓN SOCIAL INCA EN EL TAHUANTINSUYO.pptx
ORGANIZACIÓN SOCIAL INCA EN EL TAHUANTINSUYO.pptxnandoapperscabanilla
 
Programacion Anual Matemática5 MPG 2024 Ccesa007.pdf
Programacion Anual Matemática5    MPG 2024  Ccesa007.pdfProgramacion Anual Matemática5    MPG 2024  Ccesa007.pdf
Programacion Anual Matemática5 MPG 2024 Ccesa007.pdfDemetrio Ccesa Rayme
 
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VSOCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VSYadi Campos
 
Dinámica florecillas a María en el mes d
Dinámica florecillas a María en el mes dDinámica florecillas a María en el mes d
Dinámica florecillas a María en el mes dstEphaniiie
 
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICABIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICAÁngel Encinas
 
origen y desarrollo del ensayo literario
origen y desarrollo del ensayo literarioorigen y desarrollo del ensayo literario
origen y desarrollo del ensayo literarioELIASAURELIOCHAVEZCA1
 

Kürzlich hochgeladen (20)

SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptxSEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
 
Programacion Anual Matemática4 MPG 2024 Ccesa007.pdf
Programacion Anual Matemática4    MPG 2024  Ccesa007.pdfProgramacion Anual Matemática4    MPG 2024  Ccesa007.pdf
Programacion Anual Matemática4 MPG 2024 Ccesa007.pdf
 
Ejercicios de PROBLEMAS PAEV 6 GRADO 2024.pdf
Ejercicios de PROBLEMAS PAEV 6 GRADO 2024.pdfEjercicios de PROBLEMAS PAEV 6 GRADO 2024.pdf
Ejercicios de PROBLEMAS PAEV 6 GRADO 2024.pdf
 
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdf
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdfCurso = Metodos Tecnicas y Modelos de Enseñanza.pdf
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdf
 
La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...
 
La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.
 
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLA
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLAACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLA
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLA
 
CALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADCALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDAD
 
Ley 21.545 - Circular Nº 586.pdf circular
Ley 21.545 - Circular Nº 586.pdf circularLey 21.545 - Circular Nº 586.pdf circular
Ley 21.545 - Circular Nº 586.pdf circular
 
PLAN DE REFUERZO ESCOLAR primaria (1).docx
PLAN DE REFUERZO ESCOLAR primaria (1).docxPLAN DE REFUERZO ESCOLAR primaria (1).docx
PLAN DE REFUERZO ESCOLAR primaria (1).docx
 
proyecto de mayo inicial 5 añitos aprender es bueno para tu niño
proyecto de mayo inicial 5 añitos aprender es bueno para tu niñoproyecto de mayo inicial 5 añitos aprender es bueno para tu niño
proyecto de mayo inicial 5 añitos aprender es bueno para tu niño
 
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURAFORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
 
Valoración Crítica de EEEM Feco2023 FFUCV
Valoración Crítica de EEEM Feco2023 FFUCVValoración Crítica de EEEM Feco2023 FFUCV
Valoración Crítica de EEEM Feco2023 FFUCV
 
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfSELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
 
ORGANIZACIÓN SOCIAL INCA EN EL TAHUANTINSUYO.pptx
ORGANIZACIÓN SOCIAL INCA EN EL TAHUANTINSUYO.pptxORGANIZACIÓN SOCIAL INCA EN EL TAHUANTINSUYO.pptx
ORGANIZACIÓN SOCIAL INCA EN EL TAHUANTINSUYO.pptx
 
Programacion Anual Matemática5 MPG 2024 Ccesa007.pdf
Programacion Anual Matemática5    MPG 2024  Ccesa007.pdfProgramacion Anual Matemática5    MPG 2024  Ccesa007.pdf
Programacion Anual Matemática5 MPG 2024 Ccesa007.pdf
 
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VSOCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
 
Dinámica florecillas a María en el mes d
Dinámica florecillas a María en el mes dDinámica florecillas a María en el mes d
Dinámica florecillas a María en el mes d
 
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICABIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
 
origen y desarrollo del ensayo literario
origen y desarrollo del ensayo literarioorigen y desarrollo del ensayo literario
origen y desarrollo del ensayo literario
 

Proyecto mi alarma_pbp_completo_48pag

  • 6. RESET +LED VSS VDD VEE RS RW E D0 D1 D2 D3 D4 D5 D6 D7 LCD 2X16 RA0 RA2 RB0 RB1 >=9 Vcc Pull Up RB3. Evita se reinicia tocar patilla RB3 MCLR-RESET MCLR-RESET ALIMENTACIÓN +/- 9V DC Aquí se conectarían los pulsadores de la Zona 1 a la Zona 3 para activar la alarma masa COMÚN pulsadores Zonas 1 a 3 Aquí se conectaría la línea de Telfno Buzzer1; para activar pitido al pulsar tecla Buzzer2; para activar SIRENA de la alarma 680 Ohm/1W conexion línea teléfono obligatorioponerapull-upRA4/tockobligatorioponerapull-upRA4/tock parapoderverenlaLCD 1 2 3 4 A B C D Conexión del Teclado 4 x 4 Estas resistencias deben ser de 220 Ohm Los LEDS se pueden conectar en el exterior de la placa. Pero para simulación los tengo también en la misma placa MI_ALARMAAlarma con llamada telefónica. Teclado 4x4 y LCD 2x16 Se pueden programar los tiempos de entrada y salida clave inicial "1-2-3-4-5-6" Realizada: Oct/Nov 2012 ;Cuando se conecta la alarma, y si se pulsa la "Tecla B" en los ;primeros 4 segs SE PUEDEN CONFIGURAR : ;-. Los Tiempos de Salida y Entrada de 1 a 10 minutos. (en principio está configurado a 5' la entrada y salida) ;-. Y el Teléfono a llamar en caso de activación de la alarma ; (Sólo se permite la lectura de los números del teclado.) ;A continuación nos pide la clave para poner operativa el sistema. ;Se permiten como máximo 3 fallos. Caso contrario; Activación de sirena y el teléfono ; Para meter la clave se permiten números, letras y símbolos ;-. La "Tecla A" ---Permite la activación directa de la alarma ;-. La "Tecla B" ---Permite la Configuración (tiempos entrada-salida+telefno.) ;-. La "Tecla C" ---Permite Cambiar la clave ("Acepta números,letras y signos) ;-. La "Tecla D" ---Permite Desconectar,pero pedirá validar Clave. los transistores son NPN BC 337-25 (Dan 500 mA y Pot >800 mW) NOTA: Aunque en el esquema esté puesto el modelo BC 548A (NPN) Lo hago así por tener su PACKAGE en línea en lugar de forma de triangulo El (+) y (-)_TELEFONO son los 2 cables del medio del cable del teléfono PIC16876P 7805 330 220 uF 220 uF GND +5V +12V 4MHZ 22pF22pF 330 330 220 220 220 330 GND 10010K+5V GND 470 k +5V GND GND +5V GND +5V 10k 10K 10K+5V AL60PAL60P BC548ABC548A ZNS5106 GND GND +12V220 220 220 +5V GND GND GND 330 330 +5V +5V BC548A 1N4004 1N4004 1N40041N4004 1uF/100V GND 1N4004 +5V GND 560 +5V 10K 10K 10K 10K 4K7 4K7 4K7 4K7 +5V MCLR/THV 1 RA0/AN0 2 RA1/AN1 3 RA2/AN2 4 RA3/AN3 5 RA4/T0CKI 6 RA5/AN4 7 OSC1/CLKIN 9 OSC2/CLKOUT 10 RC0/T1OSO 11 RC1/T1OSI 12 RC2/CCP1 13 RC3/SCK 14 SDI/RC4 15 SDO/RC5 16 RC6 17 RC7 18 8 20 INT/RB0 21 RB1 22 RB2 23 PGM/RB3 24 RB4 25 RB5 26 PGC/RB6 27 PGD/RB7 28 19 IC1 VDD VSS 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 JP1 3 1 24 S1 IC2 GND IN OUT LED1 R1 C1 C2 Q1 C3C4 LED2 LED3 LED4 LED5 LED6 LED7 R2 R3 R4 R5 R6 R7 R9R10 C5 1 2 3 4 5 6 7 8 JP3 R13 R14 R18 2 1 SP1 2 1 SP2 Q2Q3 A2A1 K1 12 14 11 K1 X2-1 X2-2 X2-3 X2-4 X2-5 X2-6 X2-7 X2-8 X2-9 X2-10 R11 R12 R16 R8 R17 Q4 D2 D3 D4D5 C6 D1 R19 1 2 3 4 5 6 7 8 JP2 R15 R20 R21 R22 R23 R24 R25 R26 +5V RA0 RB3 RB3 RB0 RB1 RA1 RA1 RA2 RA3 RA3 RA4 RA4 RA4 LSIRENA LSIRENA LSIRENA LZONA_1 LZONA_1 LZONA_1 LZONA_2 LZONA_2 LZONA_2 LZONA_3 LZONA_3 LZONA_3 LACTIVADA LACTIVADA COL_1 COL_1 COL_2 COL_2 COL_3 COL_3 COL_4 COL_4 FILA_A FILA_A FILA_B FILA_B FILA_C FILA_C FILA_D FILA_D SALIDA_BUZZER_1 SALIDA_BUZZER_1 SALIDA_BUZZER_2 SALIDA_BUZZER_2 --_TELFNO --_TELFNO LBUZZER LBUZZER LBUZZER +_TELFNO +_TELFNO Autor: Joaquín Berrocal Piris + + + In 0 I/O 0 I/O 0 I/O 0 I/O 0 I/O 0 I/O 0 In 0 Out 0 I/O 0 I/O 0 I/O 0 I/O 0 I/O 0 I/O 0 I/O 0 I/O 0 Pwr0 Pwr0 I/O 0 I/O 0 I/O 0 I/O 0 I/O 0 I/O 0 I/O 0 I/O 0 Pwr0 Pas0 Pas0 Pas0 Pas0 Pas0 Pas0 Pas0 Pas0 Pas0 Pas0 Pas0 Pas0 Pas0 Pas0 Pas0 Pas0 Pas 2 Pas 1 Pas 1Pas 2 In 0 In0 Pas 0 Pas0Pas0Pas1Pas1 Pas0Pas0 Pas0Pas0 Sup0 Sup0 Sup0 Pas1Pas112 Pas 1 Pas 1 Pas 1 Pas 1 Pas0Pas0 Pas0Pas0 Pas0Pas0 Pas0Pas0 Pas0Pas0 Pas0Pas0 Pas1Pas1 Pas1Pas1 Pas1Pas1 Pas1Pas1 Pas1Pas1 Pas1Pas1 Sup0 Pas1Pas1Pas1Pas1Sup0 Sup0 Sup0 Pas1Pas1 Sup0 Sup0 Sup0 Sup0 Pas0 Pas0 Pas0 Pas0 Pas0 Pas0 Pas0 Pas0 Sup0Sup0 Pas1Pas1 Pas1Pas1 Pas1Pas1Sup0 Pas 0 Pas 0Pas 0 Pas 0 Pas 1 Pas3Pas2 Pas 1 Pas3Pas2 Pas0Pas0 Pas 0 Pas 0 Pas0 Pas 0 Pas 0 Pas 0 Pas 0 Pas 0 Pas 0 Pas 0 Pas 0 Pas 0 Pas 0 Sup0Sup0 Sup0 Pas1Pas1 Pas1Pas1 Pas1Pas1 Sup0 Sup0 Sup0 Sup0 Pas1Pas1 Pas1Pas1 Sup0 Sup0 Pas 1 Pas3Pas2 Pas 0Pas 0 Pas 0Pas 0 Pas 0Pas 0Pas 0Pas 0 Pas0Pas0 Sup0 Pas0Pas0Sup0 Sup0 Pas 1Pas 1 Sup0 Pas 0 Pas 0 Pas 0 Pas 0 Pas 0 Pas 0 Pas 0 Pas 0 Pas1Pas1 Pas1Pas1 Pas1Pas1 Pas1Pas1 Pas1Pas1 Pas1Pas1 Pas1Pas1 Pas1Pas1 Sup0
  • 7. 25/11/2012 17:54:46 C:PBP ALARMASMI ALARMAMI ALARMA ADAPTADA AL EAGLE 120x100 - 4 líneasMI_ALARMA.brd 1 D Buzzer 1 Buzzer Sirena 12 34 -IO 1 2 3 4 5 6 7 8 9 10 IC1 JP1 S1 IC2 LED1 R1 C1 C2 Q1 C3 C4 LED2 LED3 LED4 LED5 LED6 LED7 R2 R3 R4 R5 R6 R7 R9 R10 C5 JP3 R13 R14 R18 SP1 SP2 Q2 Q3 K1 X2 R11 R12 R16 R8R17 Q4 D2D3 D4D5 C6 D1 R19 JP2 R15 R20 R21 R22 R23 R24 R25 R26 MI_ALARMA. OCT/NOV 2012 (120 X 100 mm) PIC16876P 7805 330 220 uF 220 uF 4MHZ 22 pF 22 pF 330 330 220 220 220 330 100 10K 470 k 10k 10K 10K AL60P AL60P BC548A BC548A ZNS5106 220 220 220 330330 BC548A 1N40041N4004 1N40041N4004 1uF/100V 1N4004 560 10K 10K 10K 10K 4K7 4K7 4K7 4K7
  • 8. 26/11/2012 0:11:37 C:PBP ALARMASMI ALARMAMI ALARMA ADAPTADA AL EAGLE 120x100-- 4 Lineas faltanMI_ALARMA.
  • 9. 25/11/2012 17:53:48 C:PBP ALARMASMI ALARMAMI ALARMA ADAPTADA AL EAGLE 120x100 - 4 líneasMI_ALARMA.brd
  • 10. PROYECTO “MI_ALARMA.PBP”  (Abril‐Nov. 2012)    1  JOAQUÍN BERROCAL PIRIS  PROYECTO “MI_ALARMA.PBP”    '****************************************** '* Nombre : Mi_Alarma.pbp * '* Autor : Joaquín Berrocal * '* Copyright : Copyright * '* Fecha : NOV-2012 * '* Versión : 1.0 * '****************************************** '********************* FUNCIONAMIENTO **********************   ;MI_ALARMA; DE TRES ZONAS CON LLAMADAS A TELÉFONO CELULAR    'REALIZADA PARA EL PIC16F876A.  ;SE USA UN TECLADO 4 X 4 ; Bornes----> 1 2 3 4 5 6 7 8 ; (Columnas) C1-C2-C3-C4-FA-FB-FC-FD (Filas) ;***************OBSERVACIONES PREVIAS:*************** '* 1) Los tiempos de Entrada y Salida los tengo configurados en '* Segundos en lugar de minutos para hacer pruebas y no aburrirme '* tan sólo modificar los PAUSE para obtener minutos. '* Por defecto lo tengo configurado a 4sg. para pulsar la tecla '* de configurar "B" '* y 5 Sg para salir y/o entrar. '* 2) Por otro lado se aconseja utilizar un cuarzo de 10, 12 o mejor de 20 MHZ '* pero por no tenerlos utilizo uno de 4 MHZ. La fiabilidad para conseguir los '* tonos de teléfono es menor pero tengo comprobado que SÍ FUNCIONA aunque '* algunas veces no lo consigue. tan sólo esperar y que se efectúa la llamada. '* los condensadores para el cuarzo son de 22 pf. Se aceptan de 15 a 30 pf '* (ver anotaciones en página 94 de los apuntes 3ª edición) '* (En el programador "ICPROG" marcar tipo de oscilador HS; esta opción se debe '* utilizar cuando empleemos un cristal de cuarzo igual o superior a 8 MHZ.) '* Como en éste programa utilizo uno de 4 MHZ marcar tipo de oscilador XT. ;-----------------FUNCIONAMIENTO-------------------------- ;Cuando se conecta la alarma, y si se pulsa la "Tecla B"  en los    ;primeros 4 segs SE PUEDEN CONFIGURAR :      ;A)‐. Los Tiempos de Salida y Entrada de 1 a 10 minutos.   ;    (en principio está configurado a 5' la entrada y salida)     ;B)‐. El Teléfono a llamar en caso de activación de la alarma   ; (en este caso Sólo se permite la lectura de los números del teclado.)     ;A continuación nos pide la clave para poner operativa el sistema.   ;Se permiten como máximo 3 fallos caso contrario Activación de sirena   ; y teléfono.      ;‐. La "Tecla A" ‐‐‐Permite la activación directa de la alarma   ;‐. La "Tecla B" ‐‐‐Permite la Configuración (tiempos entrada‐salida + telefno.)   ;‐. La "Tecla C" ‐‐‐Permite Cambiar la clave ("Acepta números, letras y signos)   ;‐. La "Tecla D" ‐‐‐Permite Desconectar, pero pedirá validar Clave. 
  • 11. PROYECTO “MI_ALARMA.PBP”  (Abril‐Nov. 2012)    2  JOAQUÍN BERROCAL PIRIS     ;En caso de Activación se conecta una sirena y se marca el número. Se chequea   ;la tecla de Desconexión "Tecla D" que en caso de ser pulsada pedirá la clave.      ;Otros Datos: en memoria EEPROM:     ;‐. Posición 0 ‐‐Se graba el flag indicador de que ya se grabó la clave     ;                 y el teléfono en el 1er montaje.   ;‐. Posición 1 a 6 ‐‐ La clave; en principio será la 1‐2‐3‐4‐5‐6   ;                       (se aceptan números, letras y signos)   ;‐. Posición 10 ‐‐Tiempo de Salida; valor 1 a 10 1l. (1 representa 1 minuto   ;                  el 0 representa los 10 minutos)   ;‐. Posición 11 ‐‐Tiempo de Entrada; valor 1 a 10 1l. (1 representa 1 minuto   ;                  el 0 representa los 10 minutos)   ;‐. Posición 20 a 28 ‐‐El número de Teléfono para avisar si se dispara       ;OBSERVACIÓN:   ;La simulación en proteus ; da problemas con la LCD pero todo está OK. de hecho    ;si se deja y espera la LCD vuelve a verse OK.   ;También problemas con la instrucción DTMFOUT Y SOUND. ;OBSERVACIONES: ;La simulación en proteus da problemas con la LCD pero todo está OK. de hecho ;si se deja y espera la LCD vuelve a verse OK. ;También problemas en la simulación del proteus con las instrucciones ;DTMFOUT Y SOUND.        1) Al encender la alarma, tenemos 4 sgdos. Si deseamos configurar:  ‐. Los tiempos de SALIDA, ENTRADA y el Nº de teléfono con el que se conectará si salta la alarma     
  • 16. PROYECTO “MI_ALARMA.PBP”  (Abril‐Nov. 2012)    7  JOAQUÍN BERROCAL PIRIS  3) Lo primero antes de poner activa la alarma, se chequea si alguna Zona está abierta (representada  por los interruptores). Si es así, hasta que no se cierren no dejará ponerla operativa    4) Todas cerradas, Mensaje de bienvenida y petición de clave de Acceso.      5) La clave es de 6 cifras, por defecto es la “123456” pero se puede cambiar en la configuración.  (se aceptan números, letras y signos)    6) Se permiten un máximo de 3 fallos para poner la clave. Si se supera se activará la alarma; activación  del zumbador (Sirena) y llamada de teléfono al número establecido.    7)  Una vez metida la clave correcta, tenemos un tiempo de 1 a 10 minutos según lo que se haya  configurado para SALIR y/o ENTRAR.      8) Si deseamos DESACTIVAR la alarma pulsar la “Tecla D”. Nos pedirá la clave.    9) En el display se nos indica el tiempo que aún nos queda para entrar y/o salir sin que salte la Alarma.  También el número de teléfono al que se está llamando si es que hubiese saltado la alarma.  Sería interesante poner el nº de la Policía;   Por supuesto, siempre que entremos tendremos que “pulsar la tecla D” con la clave para  desactivarla, de lo contrario se activará en el tiempo establecido.         
  • 27. C:PBP ALARMASMI ALARMAMI ALARMA ADAPTADA AL EAGLE 120x100-- 4 Lineas faltanARCHIVOS '****************************************** '* Nombre : Mi_Alarma.pbp * '* Autor : Joaquín Berrocal * '* Copyright : Copyright * '* Fecha : NOV-2012 * '* Versión : 1.0 * '****************************************** '********************* FUNCIONAMIENTO ********************** ;MI_ALARMA.PBP; DE TRES ZONAS CON LLAMADAS A TELÉFONO CELULAR ;REALIZADA PARA EL PIC16F876A. ;SE USA UN TECLADO 4 X 4 ; Bornes--> 1 2 3 4 5 6 7 8 ; (Columnas) C1-C2-C3-C4-FA-FB-FC-FD (Filas) ;***************OBSERVACIONES PREVIAS:*************** '* 1) Los tiempos de Entrada y Salida los tengo configurados en '* Segundos en lugar de minutos para hacer pruebas y no aburrirme '* tan sólo modificar los PAUSE para obtener minutos. '* Por defecto lo tengo configurado a 4sg. para pulsar la tecla '* de configurar "B" '* y 5 Sg para salir y/o entrar. '* 2) Por otro lado se aconseja utilizar un cuarzo de 10, 12 o mejor de 20 MHZ '* pero por no tenerlos utilizo uno de 4 MHZ. La fiabilidad para conseguir los '* tonos de teléfono es menor pero tengo comprobado que SÍ FUNCIONA aunque '* algunas veces no lo consigue. tan sólo esperar y que se efectúa la llamada. '* los condensadores para el cuarzo son de 22 pf. Se aceptan de 15 a 30 pf '* (ver anotaciones en página 94 de los apuntes 3ª edición) '* (En el programador "ICPROG" marcar tipo de oscilador HS; esta opción se debe '* utilizar cuando empleemos un cristal de cuarzo igual o superior a 8 MHZ.) '* Como en éste programa utilizo uno de 4 MHZ marcar tipo de oscilador XT. ;************************************************* ;-----------------FUNCIONAMIENTO-------------------------- ;Cuando se conecta la alarma, y si se pulsa la "Tecla B" en los ;primeros 4 segs SE PUEDEN CONFIGURAR : ;NOTA: ;(en este programa lo tengo en segundos en lugar de minutos ) ;-. Los Tiempos de Salida y Entrada de 1 a 10 minutos. ; (en principio está configurado a 5' la entrada y salida ;-. Y el Teléfono a llamar en caso de activación de la alarma ; (Sólo se permite la lectura de los números del teclado.) ;-. A continuación nos pide la clave para poner operativa el sistema. ;-. Se permiten como máximo 3 fallos caso contrario Activación de sirena ; y teléfono. ;-. La "Tecla A" ---Permite la activación directa de la alarma ;-. La "Tecla B" ---Permite la Configuración (tiempos entrada-salida+telefno.) ;-. La "Tecla C" ---Permite Cambiar la clave ("Acepta números,letras y signos) ;-. La "Tecla D" ---Permite Desconectar, pero pedirá validar Clave. ;En caso de Activación se conecta una sirena y se marca el número. Se chequea ;la tecla de Desconexión "Tecla D" que en caso de ser pulsada pedirá la clave. ;Otros Datos: en memoria EEPROM: ;-. Posición 0 --Se graba el flag indicador de que ya se grabó la clave ; y el teléfono en el 1er montaje. ;-. Posición 1 a 6 -- La clave; en principio será la 1-2-3-4-5-6 ; (se aceptan numeros,letras y signos) ;-. Posición 10 --Tiempo de Salida; valor 1 a 10 1l. (1 representa 1 minuto ; el 0 representa los 10 minutos) Page 1 of 22 19/03/2013 0:48
  • 28. C:PBP ALARMASMI ALARMAMI ALARMA ADAPTADA AL EAGLE 120x100-- 4 Lineas faltanARCHIVOS ;-. Posición 11 --Tiempo de Entrada; valor 1 a 10 1l. (1 representa 1 minuto ; el 0 representa los 10 minutos) ;-. Posición 20 a 28 --El número de Teléfono para avisar si se dispara ;OBSERVACIONES: ;La simulación en proteus dá problemas con la LCD pero todo está OK. de hecho ;si se deja y espera la LCD vuelve a verse OK. ;También problemas en la simulación del proteus con las instrucciones ;DTMFOUT Y SOUND. '********************************************************** 'DEFINICIONES INICIALES. Fusibles de configuración. ''@ hs_osc 'Cambia automáticamente a un oscilador de de alta velocidad ' el HS va de 8 MgHz A 20 Mghz Para que los tonos DTMF sean '100% validos utilizar un cristal de 10-12 ó 20 MHZ mejor el 'de 20MHZ (ver pag 94 3ª edicion.) define Osc 4 ' Define el Oscilador para un Cristal ' de 10 Mhz. 'WDT_OFF PWRT_ON 'BOD_OFF ;ESTOS OTROS NO LO ACEPTA Y NO SÉ PORQUÉ 'LVP_OFF 'CPD_OFF 'WRT_OFF 'DEBUG_OFF PROTECT_OFF ' Configuración de Puertos: ADCON1=7 'PARA CONFIGURAR EL PUERTO A COMO ENTRADA/SALIDA TRISA = %00000000 'Todo como salida TRISB = %01110000 'entradas ZONAS ->B4-B5-B6 resto salidas TRISC = %11110000 'Conexión Teclado RC0,1,2,3 Columnas 'conexión teclado RC4,5,6,7 Filas 'TRISD = %01111000 'el pic 16F876A no dispone de puerto D ;INICIAMOS LAS PUERTAS de salida PORTA = 0 PORTB = 0 PORTC = 1 'Todos los pines configurados como salida a nivel 1 (Teclado) ' Declaramos las variables: Flag var bit 'flag para no tener que escribir de nuevo la clave X var word Tiempo_E_S var word 'VARIABLE COMUN COMO Tiempo de Entrada Salida Tiempo_LCD var word Contaje var byte VAR1 var byte NFallos var byte : NFallos = 0 'para iniciarla a cero DIGITO var byte[9] ' Lo utilizo también para lectura del Telfno CLV var byte[7] DIRECCION_EEPROM var byte 'Para indicar el comienzo de grabación en la EEPROM POSICION_LCD var byte 'para indicar * en lcd al cambiar la clave Page 2 of 22 19/03/2013 0:48
  • 29. C:PBP ALARMASMI ALARMAMI ALARMA ADAPTADA AL EAGLE 120x100-- 4 Lineas faltanARCHIVOS NumZona1 var byte 'para los mensajes de cerrar la zona X NumZona2 var byte 'para los mensajes de cerrar la zona X NumZona3 var byte 'para los mensajes de cerrar la zona X LZona_1 var PORTB.4 'Nombre LZona_1 para pin B.4 LZona_2 var PORTB.5 'Nombre LZona_1 para pin B.5 LZona_3 var PORTB.6 'Nombre LZona_1 para pin B.6 LActivada var PORTB.7 'Nombre LActivada para pin B.7 LSirena var PORTB.2 'Nombre LSirena para B.2 LBuzzer var PORTA.5 'Nombre LBuzzer para A.5 Rele var PORTB.1 Col_1 var PORTC.0 'Nombre Col_1 para C.0 Col_2 var PORTC.1 'Nombre Col_1 para C.1 Col_3 var PORTC.2 'Nombre Col_1 para C.2 Col_4 var PORTC.3 'Nombre Col_1 para C.3 Fila_A var PORTC.4 'Nombre Fila_A para C.4 Fila_B var PORTC.5 'Nombre Fila_B para C.5 Fila_C var PORTC.6 'Nombre Fila_C para C.6 Fila_D var PORTC.7 'Nombre Fila_D para C.7 'Para leer la posición 0 de EEPROM si ya se grabó en fabrica no volver 'a grabar mas la clave de fabrica. read 0, CLV[0] ' leemos la 1ª posición de la EEPROM y lo guardamos en CLV[0] if CLV[0]= 170 then goto CONFIGURAR 'Si ya se grabo saltar configurar, de lo contrario 'proceder a grabar el flag (170) y la clave de fabrica y 'el teléfono establecido de fabca. ' Guardamos cada digito de la clave en las posiciones elegidas previamente: else 'SI ES LA 1ª VEZ QUE SE ARRANCA EL PIC EN FÁBRICA write 0,170 'grabo en la posición 0 el valor 170 b'1010101010' pause 10 '10 ms no es necesario pero por si acaso ; PASS INICIAL eeprom 1,[1,2,3,4,5,6] ; Carga la memoria EEPROM desde la posición ;1 en adelante con los valores posición 1 valor 1 ;posición 6 valor 6 eeprom 10,[5,5] 'guardo el valor 1 en posición 10 y 11 de la EEPROM 'Representan el valor de 5 minuto para Salida y entrada eeprom 20,[1,2,3,4,5,6,7,8,9] 'son 9 números de un teléfono "ficticio" 'para no poner el mío. Pulsando "B" puedo 'añadir cualquier nº de teléfono 'al que quiera que active la alarma endif ;++LO 1º ES UN TIEMPO PARA PODER CONFIGURAR LOS TIEMPOS DE SALIDA ++++++ ;++Y ENTRADA Y EL Nº DE TELFNO A LLAMAR. este tiempo será de aprox +++++ ;++++++4 sgds . Si pulso la Tecla "B" ir a Configurar_Tiempos_Telfno donde ;preguntará si quiero o No configurar. Si "SÍ" activo Flag = 1 y 'goto Chequeo_Inicial, El flag lo utilizo para no repetir la Clave. ' si "NO" directamente go Chequeo_Inicial. Page 3 of 22 19/03/2013 0:48
  • 30. C:PBP ALARMASMI ALARMAMI ALARMA ADAPTADA AL EAGLE 120x100-- 4 Lineas faltanARCHIVOS CONFIGURAR: Flag = 0 'Como seguridad inicio el flag a 0 para evitar repetir 'la clave 2 veces en caso de hacer configuración lcdout $fe, 1 'limpia LCD lcdout $fe, 2 ' Posiciona el cursor en el inicio lcdout "CONFIGURAR" lcdout $fe,$C0, "PULSAR B" call Beep 'pongo 205 para que sean 4 sgs con cristala de 10 Mghz for X = 1 to 205 'TIEMPO ESPERA DE 4 Sgs PARA PULSAR "B" a 4 MHZ seria 80 pause 50 'pausa de 50 ms high Col_1:high Col_2:high Col_3:low Col_4 if Fila_B = 0 then call Beep_Estabilizacion:goto Configurar_Tiempos_Telfno high Col_4 'para que en el PROTEUS reconozca que se pulsa 'NO SERÍA NECESARIO PERO SÍ EN LA SIMULACIÓN next 'PASADO EL TIEMPO DE ESPERA PARA CONFIGURAR, CONTINÚA Chequeo_Inicial: ;chequeo de las Zonas si hay alguna abierta no permitir continuar ;hasta que no estén cerradas todas. NumZona1 = 0 'inicializamos variables NumZona2 = 0 'EL VALOR 0 indica que estan todas cerradas NumZona3 = 0 pause 100 'Eespera 100 ms antirebote normal de 20 a 30 ms A 4 MHZ 'como trabajo a 10 MHZ pongo 100 ms '************************************************** if lzona_1 = 1 then NumZona1 = 1 ' si la zona1 esta abierta asignar valor 1 if lzona_2 = 1 then NumZona2 = 2 ' si la zona2 esta abierta asignar valor 2 if lzona_3 = 1 then NumZona3 = 3 ' si la zona3 esta abierta asignar valor 3 '************************************************** 'Si alguna zona está abierta mensaje if lzona_1 = 1 or lzona_2 = 1 or lzona_3 = 1 then goto Mensaje_Zonas_Abiertas else goto Inicio 'Si todas las zonas están cerradas permitir continuar endif '+++++*************************++++ Mensaje_Zonas_Abiertas: lcdout $fe, 1 'limpia la pantalla pause 1000 'para dar efecto intermitente lcdout $fe,$85,"CERRAR" ' Posiciona el cursor posicion 6 línea 1 lcdout $fe,$C0, "ZONA: ",#NumZona1," - ",#NumZona2," - ",#NumZona3," " 'posicion 1 de línea 2 pause 1000 ' Hacemos una pausa de 1 segundo Page 4 of 22 19/03/2013 0:48
  • 31. C:PBP ALARMASMI ALARMAMI ALARMA ADAPTADA AL EAGLE 120x100-- 4 Lineas faltanARCHIVOS call beep ' Generamos un sonido call beep ' Generamos un sonido call beep ' Generamos un sonido goto Chequeo_Inicial 'vuelve a chequear ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ;ESTE CONJUNTO DE SUBRUTINAS es llamada de la Subrutina "Desconectar:" ;verifca que se conoce la clave antigua para poder desconectar ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Clave_Desconectar: pause 50 X = 0 'INICIAMOS LA VARIABLE lcdout $fe, 1 ' Limpia la LCD lcdout $fe, 2 ' Posiciona el cursor en el inicio lcdout "INTRODUCIR CLAVE" 'NO LE PONGO LA "¿" por no reconocerla la LCD 'LCDOut $fe,$C0, "Si,pulsar 1 NO 2" call Beep ' Generamos un sonido '----Iniciamos la posicion inicial para escribir en LCD y EEPROM---- POSICION_LCD= $C8 'primera posición en la LCD para sacar "******" '------------------------------------------------------------------- 'Chequea la clave para poder desconectar. Chequeo_Clave_Desconectar: call Teclado ' Si ninguna tecla fue pulsada salta a "Chequeo_Clave_Desconectar" if VAR1 = 170 then Chequeo_Clave_Desconectar '' call Beep no es necesaria por haber un Beep en el Teclado lcdout $fe,$C0, "Valor: ",#VAR1 lcdout $fe,POSICION_LCD, "*" 'ocultarlo 'incrementamos la posición, se deben poner un máximo de 6 digitos POSICION_LCD = POSICION_LCD + 1 X = X + 1 DIGITO[X] = VAR1 ' El valor de la tecla pulsada lo ' guardamos en la variable correspondiente ' Si X = 6 estamos guardando en DIGITO[6] ' el último valor introducido desde el ' teclado matricial if X >= 6 then Comprobar_Clave_Desconectar goto Chequeo_Clave_Desconectar ' Si X es diferente de 6 continuamos ' esperando el siguiente valor a ser ' ingresado desde el teclado ' A partir de la siguiente etiqueta empezamos la comprobación, Page 5 of 22 19/03/2013 0:48
  • 32. C:PBP ALARMASMI ALARMAMI ALARMA ADAPTADA AL EAGLE 120x100-- 4 Lineas faltanARCHIVOS ' y el formato es: ' Comprobar_Clave_Desconectar: X = 0 'iniciamos la variable por seguridad 'Si no son iguales ir a error ' de lo contrario pasar al siguiente If .. 'si Todos OK retornar a la rutina inicial que es la de ;Desconectar: if DIGITO[1] <> CLV[1] then goto error pasar_a1: if DIGITO[2] <> CLV[2] then goto error pasar_a2: if DIGITO[3] <> CLV[3] then goto error pasar_a3: if DIGITO[4] <> CLV[4] then goto error pasar_a4: if DIGITO[5] <> CLV[5] then goto error pasar_a5: if DIGITO[6] <> CLV[6] then goto error 'Desde la subrutina error: se activa la alarma. else 'Si la clave es correcta DESCONECTAR LSirena/relé telfno/ir va 'a chequeo_Inicial de aquí pedirá de 'nuevo la clave para poner Operativa la Alarma 'Desconectamos LA SIRENA,EL RELÉ TELFNO. Y el LED de Alarma Operativa low LSirena low rele low LActivada 'led indicador de que la alarma está Operativa 'INDICARLO EN LA LCD DE MANERA INTERMITENTE 'PARA EFECTO INTERMITENCIA 4 sgos lcdout $fe, 1 'limpia LCD lcdout $fe, 2 ' Posiciona el cursor en el inicio lcdout "ALAR DESACTIVADA" 'LCDOut $fe,$C0, "** Bienvenido **" pause 2000 ' Hacemos una pausa de 2 segundos lcdout $fe, 1 'limpia LCD lcdout $fe, 2 ' Posiciona el cursor en el inicio lcdout "ALAR DESACTIVADA" pause 2000 ' Hacemos una pausa de 2 segundos 'VOLVER A CHEQUEO_INICIAL goto Chequeo_Inicial endif ;++++++CONFIGURAR TIEMPOS SALIDA/ENTRADA Y EL TELFNO +++++++++++ ' RUTINAS PARA configurar los tiempos de Salida y Entrada 'y para el Teléfono a llamar en caso de Alarma. 'Estas rutinas son llamadas al pulsar la tecla "B" desde 'la Rutina "Chequeo_Zonas:" o bien de la rutina "Chequeo_Inicial:" ;El TIEMPO DE SALIDA se guarda en posición 10 EEPROM ;El TIEMPO DE ENTRADA se guarda en posición 11 EEPROM ;El TELÉFONO se guarda DESDE LA POSICIÓN 20 A 28 EEPROM (son 9 números ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ;proviene de la rutina "Chequeo_inicial:" o bien de "Chequeo_Zonas:" Configurar_Tiempos_Telfno: Page 6 of 22 19/03/2013 0:48
  • 33. C:PBP ALARMASMI ALARMAMI ALARMA ADAPTADA AL EAGLE 120x100-- 4 Lineas faltanARCHIVOS call Consulta_Clave 'primero consulta si sabemos la clave 'si no lo sabemos Activar_Alarma 'Si pulso que "SI" poner un Flag para que al ir a Chequeo_Inicial 'no tenga que volver a poner la Clave. pues ya lo hemos hecho al 'configurar los tiempos y el telfno. ;+++++++++++++++++ pause 50 'Con estos pauses evito que en la simulacion en PROTEUS 'salga CPU cargada lcdout $fe, 1 ' Limpia la LCD lcdout $fe, 2 ' Posiciona el cursor en el inicio lcdout " CONFIGURAR?" 'NO LE PONGO LA "¿" por no reconocerla la LCD lcdout $fe,$C0, "Si,pulsar 1 NO 2" call Beep ' Generamos un sonido Chequeo_1_2: 'chequeo de si se pulsa 1 o 2 para cambiar la clave pause 50 'Con estos pauses evito que en la simulacion en PROTEUS 'salga CPU cargada Col_1 = 0 ' Columna 1 = 0 RC.0 a RC.3 Col_2 = 1 ' Columna 2 = 1 Col_3 = 1 ' Columna 3 = 1 Col_4 = 1 ' Columna 4 = 1 if Fila_A = 0 then ' tecla "1" SÍ QUIERO CAMBIAR LA CLAVE Flag = 1 'flag para evitar tener que repetir la clave al 'ir a Chequeo_Inicial una vez hecho la configuración 'de los tiempos y el Telfno. call Beep_Estabilizacion; goto Tiempo_De_Salida 'Ir a Tiempo_De_Salida para comenzar la Configu 'ración de los tiempos y el Teléfono al final 'hay un RETURN endif Col_1 = 1 ' Columna 1 = 1 RC.0 a RC.3 Col_2 = 0 ' Columna 2 = 0 Col_3 = 1 ' Columna 3 = 1 Col_4 = 1 ' Columna 4 = 1 if Fila_A = 0 then ' tecla "2" No quiero cambiar clave call Beep_Estabilizacion goto Chequeo_Inicial 'para chequear las zonas e ir a Inicio endif goto Chequeo_1_2 'a la espera de que se pulse una u otra acción '+++++++++++++++++ ;+++++SI PONGO LO DEL SÍ- NO CONFIGURAR ESTO SOBRA++++++ lcdout $fe, 1 'limpia LCD lcdout $fe, 2 ' Posiciona el cursor en el inicio lcdout "CONFIGURAR ..." 'LCDOut $fe,$C0, "** Bienvenido **" pause 2000 ' Hacemos una pausa de 2 segundos Page 7 of 22 19/03/2013 0:48
  • 34. C:PBP ALARMASMI ALARMAMI ALARMA ADAPTADA AL EAGLE 120x100-- 4 Lineas faltanARCHIVOS ;+++++++++++++++++++++++++++++++++++++++++++++++++++++ Tiempo_De_Salida: lcdout $fe, 1 'limpia LCD lcdout $fe, 2 ' Posiciona el cursor en el inicio lcdout "Tiempo de Salida" lcdout $fe,$C0, "Pulsar 1 a 10 mi" pause 2000 ' Hacemos una pausa de 2 segundos call Teclado_Configuracion 'Sólo verifica los Números if VAR1 = 0 then VAR1 = 10 ;el valor 0 es el valor 10 ;El valor del tiempo de SALIDA se guarda en posicón 10 de la EEPROM write 10,VAR1 call Mensaje_Tiempos ;En LCD ver el valor grabado Tiempo_De_Entrada: lcdout $fe, 1 'limpia LCD lcdout $fe, 2 ' Posiciona el cursor en el inicio lcdout "Tiempo Entrada" lcdout $fe,$C0, "Pulsar 1 a 10 mi" pause 2000 ' Hacemos una pausa de 2 segundos call Teclado_Configuracion 'Sólo verifica los Números if VAR1 = 0 then VAR1 = 10 ;el valor 0 es el valor 10 ;El valor del tiempo de ENTRADA se guarda en posicón 11 de la EEPROM write 11,VAR1 call Mensaje_Tiempos ;En LCD ver el valor grabado goto Telefono ;ir a rutina "Telefono:" para Grabaciónd el Nº de tefno. Mensaje_Tiempos: ;En LCD ver el valor grabado lcdout $fe, 1 'limpia LCD lcdout $fe, 2 ' Posiciona el cursor en el inicio lcdout " GRABADO ... " lcdout $fe,$C0, "Tiempo ",#VAR1," minuto" ;justo 16 (incluso si es 10) pause 2000 ' Hacemos una pausa de 2 segundos return 'Para añadir el Teléfono al que se desea llamar en caso de 'que salte la alarma Telefono: '----Iniciamos la posicion inicial para escribir en LCD y EEPROM--- '---El número de Teléfono comienza en posicion 20 de EEPROM ----- POSICION_LCD = $C7 'primera posición en la LCD para sacar 'los números de telefono en la LCD DIRECCION_EEPROM = 20 'primera posición de la EEPROM para grabar 'el número de Telefono son 9 digitos X = 0 ' Iniciamos la variable POR SI ACASO. '------------------------------------------------------------------- lcdout $fe, 1 'limpia LCD lcdout $fe, 2 ' Posiciona el cursor en el inicio Page 8 of 22 19/03/2013 0:48
  • 35. C:PBP ALARMASMI ALARMAMI ALARMA ADAPTADA AL EAGLE 120x100-- 4 Lineas faltanARCHIVOS lcdout "Telefno a Llamar" 'sin la (o) son 16 lcdout $fe,$C0, "Numero " '1ª posicion línea 2 pause 2000 ' Hacemos una pausa de 2 segundos Numero: 'Rutina para poner el Número telefónico call Teclado_Configuracion 'Sólo verifica los Números lcdout $fe,POSICION_LCD,#VAR1'Se añade el numero 956678... write DIRECCION_EEPROM,VAR1 'incrementamos la posición, se deben poner un máximo de 9 digitos Nº Tefno. X = X + 1 POSICION_LCD = POSICION_LCD + 1 ' Escribe el valor en la memoria de datos.El 1º en 'la posición 20 de la EEPROM y el 9º en la 28 DIRECCION_EEPROM = DIRECCION_EEPROM + 1 'Al llegar al noveno nº del telfno. Mensaje y vuelta Chequeo_Inicial 'desde donde ya no habrá que poner de nuevo la clave por tener el 'Flag activo. Y SALDRÁ EN LCD "Chequeando ..." if X = 9 then pause 1000 'para dar sensación de estar grabando lcdout $fe,2, "Telefono GRABADO" '16 caracteres pause 1500 lcdout $fe,2, " " pause 1500 lcdout $fe,2, "Telefono GRABADO" pause 1500 lcdout $fe,2, " " pause 1500 lcdout $fe,2, "Telefono GRABADO" pause 3000 goto Chequeo_Inicial endif goto Numero ' Si aún no se han metido los 9 dígitos ir a Numero: '++++++RUTINA DE LECTURA DE TECLADO SÓLO LOS NÚMEROS ++++++ Mens_Solo_Numeros: ' LCDOut $fe, 1 'limpia LCD lcdout $fe, 2 ' Posiciona el cursor en el inicio lcdout " Solo Numeros " 'sin la (o) son 16 digitos pause 1000 lcdout $fe, 2 lcdout "Telefno a Llamar" 'sin la (o) son 16 return Teclado_Configuracion: call Teclado if VAR1 = 170 then Teclado_Configuracion 'No se ha pulsado ninguna if VAR1 = "A" then call Mens_Solo_Numeros:goto Teclado_Configuracion if VAR1 = "B" then call Mens_Solo_Numeros:goto Teclado_Configuracion if VAR1 = "C" then call Mens_Solo_Numeros:goto Teclado_Configuracion if VAR1 = "D" then call Mens_Solo_Numeros:goto Teclado_Configuracion Page 9 of 22 19/03/2013 0:48
  • 36. C:PBP ALARMASMI ALARMAMI ALARMA ADAPTADA AL EAGLE 120x100-- 4 Lineas faltanARCHIVOS if VAR1 = "#" then call Mens_Solo_Numeros:goto Teclado_Configuracion if VAR1 = "*" then call Mens_Solo_Numeros:goto Teclado_Configuracion return '++++++++++++++++++++++++++++++++++++++++++++++++++++++++ '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 'Rutina para consultar la clave si OK retorna de los contrario 'salta a Error: y de ahí a Activar_Alarma '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Consulta_Clave: 'SI ESTÁ TODAS LAS ZONAS CERRADAS INICIAR LA entrada de clave para 'activar la alarma lcdout $fe, 1 'limpia LCD lcdout $fe, 2 ' Posiciona el cursor en el inicio lcdout "Cont. de Acceso" lcdout $fe,$C0, "** Bienvenido **" pause 2000 ' Hacemos una pausa de 2 segundos call Beep ' Generamos un sonido Clave: X = 0 ' inicializamos la variable X = 0 ;nota en la posición CLV[0] guardo el valor 170 de haberse grabado ; el pass inicial : 123456 read 1, CLV[1] ' leemos el primer dígito y lo guardamos en CLV[1] read 2, CLV[2] ' leemos el segundo dígito y lo guardamos en CLV[2] read 3, CLV[3] ' leemos el tercer dígito y lo guardamos en CLV[3] read 4, CLV[4] ' leemos el cuarto dígito y lo guardamos en CLV[4] read 5, CLV[5] ' leemos el quinto dígito y lo guardamos en CLV[5] read 6, CLV[6] ' leemos el sexto dígito y lo guardamos en CLV[6] lcdout $fe, 1 ' Limpia la LCD lcdout $fe, 2 ' Posiciona el cursor en el inicio lcdout "Introduzca su " lcdout $fe,$C0, "Clave de Acceso:" call Beep ' Generamos un sonido ;****SE PERMITEN NÚMEROS Y SIGNOS DEL TECLADO****** Consulta: call Teclado ;consultamos el Teclado if VAR1 = 170 then consulta ' Si no hay una tecla pulsada vuelve a consultar '170=1010101010' y lo pongo en lugar de var1= 0 'para que se cheque también el 0 en caso de cambiar 'clave. ' Seguidamente lo que hacemos es almacenar ' en seis variables definidas ' por el programador los dígitos introducidos Page 10 of 22 19/03/2013 0:48
  • 37. C:PBP ALARMASMI ALARMAMI ALARMA ADAPTADA AL EAGLE 120x100-- 4 Lineas faltanARCHIVOS ' desde el teclado matricial ' para luego ser comparados con los valores ' almacenados en la memoria de datos. X = X + 1 DIGITO[X] = VAR1 ' El valor de la tecla pulsada lo ' guardamos en la variable correspondiente if X = 6 then comprobar ' Si X = 6 estamos guardando en DIGITO[6] ' el último valor introducido desde el ' teclado matricial goto Consulta ' Si X es diferente de 6 continuamos ' esperando el siguiente valor a ser ' ingresado desde el teclado ' A partir de la siguiente etiqueta empezamos la comprobación, ' y el formato es: ' ' Si DIGITO[X] es igual a CLV[X] el digito es correcto, ' y salta a la etiqueta "paseX", ' si es diferente salta a la subrutina "error"; veamos… Comprobar: if DIGITO[1] = CLV[1] then pase1:goto error 'de error hay un goto Activar_Alarma pase1: if DIGITO[2] = CLV[2] then pase2:goto error pase2: if DIGITO[3] = CLV[3] then pase3:goto error pase3: if DIGITO[4] = CLV[4] then pase4:goto error pase4: if DIGITO[5] = CLV[5] then pase5:goto error pase5: if DIGITO[6] = CLV[6] then correcto:goto error ' Si los seis dígitos han sido correctos ' se ejecuta la subrutina correspondiente. Correcto: high lactivada 'activar led ROJO indicador de estar ACTIVADA LA ALARMA pause 500 lcdout $fe, 1 ' Limpia la LCD lcdout $fe, 2 ' Posiciona el cursor en el inicio lcdout " * * * * * * " lcdout $fe,$C0, "Clave Correcta!" call beep ' RA.5 Generamos un sonido + led Lbuzzer pause 2000 ' Pausa para visualizar el mensaje return ;++++++++++++++++++++++++++++INICIO+++++++++++++++++++++++++++++ ' Iniciamos el sistema con una bienvenida: 'Y CHEQUEAMOS el teclado "SE PERMITEN TODAS LAS TECLAS" para 'asignar la CLAVE. (Consulta:) ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Tiempo_Para_Salir: ' "es llamado desde un GOTO en lugar de un CALL" Page 11 of 22 19/03/2013 0:48
  • 38. C:PBP ALARMASMI ALARMAMI ALARMA ADAPTADA AL EAGLE 120x100-- 4 Lineas faltanARCHIVOS read 10,Tiempo_E_S 'En posición 10 EEPROM 'lee el tiempo de Salida va de 1 a 10 'EL "0" representa el valor 10 y por ello 'se guarda como 10 dicho valor en la eeprom. 'Variable Byte Tiempo_LCD = Tiempo_E_S lcdout $fe, 1 ' Limpia la LCD lcdout $fe, 2 ' Posiciona el cursor en el inicio lcdout "Tiempo a SALIR :" for X = 1 to Tiempo_E_S '+++LO REDUZCO a Segundos PARA NO ABURRIRME++++++ lcdout $fe,$C0, "Aprox.: ",#Tiempo_LCD," seg " ;Utilizo un pause de 1 sgdo en lugar de 1 minuto ;PARA CONTAR POR SEGUNDOS EN LUGAR DE POR MINUTOS ;Y NO ABURRIRME EN LAS PRUEBAS. Tan sólo cambiar el pause ;a pause 60000 Y ya lo tendré en minutos el contaje. pause 1000''60000 'pausa de 1 seg. Podría llegar hasta 65535 ms Tiempo_LCD = (Tiempo_LCD) - 1 '+++PARA LEER TECLADO PARA PERMITIR DESCONECTAR en caso de no querer salir++ call Teclado ;chequea CADA 1 sgdo para ver si deseo Desconectar if VAR1 = "D" then goto Desconectar '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ next goto Chequeo_Zonas 'IR A CHEQUEAR LAS ZONAS 'quedaría colgado si pulsara la tecla de desconectar "D" Inicio: 'saltarse el volver a poner la clave y reiniciar el Flag en caso de 'haber configurado los tiempos y el teléfono a llamar ;y poner el tiempo de Salida if Flag = 1 then Flag = 0:goto Tiempo_Para_Salir':goto Chequeo_Zonas call Consulta_Clave 'verifica si se conoce la Clave. si no ir a Error: 'y de ahí Activar_Alarma ;lo primero, el Tiempo para SALIR goto Tiempo_Para_Salir Chequeo_Zonas: ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ;CHEQUEO DE LAS ZONAS Y RECLAS ESPECIALES "A" Activar_Alarma ;"D" Desconectar . "C" Cambio_Clave 'SI SE ABRE UN INTERRUPTOR QUE CONTROLA UNA DE LAS ZONAS. ESPERAR '100 MS para que no haya rebote de contactos. NO hacerlo desde la 'rutina de estabilización, porque este es al abrirse se pone a 1 'Espera 100 ms antirebote normal de 20 a 30 ms A 4 MHZ 'como trabajo a 10 MHZ pongo 100 ms ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ NumZona1 = 0 'inicializamos variables Page 12 of 22 19/03/2013 0:48
  • 39. C:PBP ALARMASMI ALARMAMI ALARMA ADAPTADA AL EAGLE 120x100-- 4 Lineas faltanARCHIVOS NumZona2 = 0 'EL VALOR 0 indica que estan todas cerradas NumZona3 = 0 if lzona_1 = 1 then pause 100:NumZona1= 1 'zona1 abierta: asignar valor 1 if lzona_2 = 1 then pause 100:NumZona2= 2 'zona2 abierta: asignar valor 2 if lzona_3 = 1 then pause 100:NumZona3= 3 'zona3 abierta: asignar valor 3 Chequeo_Especiales: 'para chequear teclas A (Activar) C (Cambiar Clave) 'D (Desactivar) call Teclado 'chequea teclado pero sólo las teclas especiales if VAR1 = "A" then goto Activar_Alarma 'activar telefono y alarma ''''''''if var1 = "B" then goto Configurar_Tiempos_Telfno if VAR1 = "D" then goto Clave_Desconectar'pide clave para poder desconectar 'Desactivar alarma. y vuelta a Chequeo_Inicial 'donde se comprueba que esté todo Cerrado y luego pedirá 'clave para volver a poner ACTIVA LA ALARMA if VAR1 = "C" then goto Cambio_Clave 'cambiar clave '*************ESTA RUTINA HABRÍA QUE DEPURARLA MEJOR DE FORMA PRÁCTICA***** '*************CON LOS CÁLCULOS DE LOS TIEMPOS************************* Continuar: 'si elijo que no quiero cambiar retornar a esta rutina 'para poder continuar con los mensajes y el chequeo 'si alguna zona está abierta mensaje if Lzona_1 = 1 or Lzona_2 = 1 or Lzona_3 = 1 then read 11,Tiempo_E_S 'En posición 11 EEPROM 'lee el tiempo de ENTRADA va de 1 a 10 'Variable Byte Tiempo_LCD = Tiempo_E_S lcdout $fe, 1 ' Limpia la LCD lcdout $fe, 2 ' Posiciona el cursor en el inicio lcdout "Tiempo a ENTRAR:" for X = 1 to Tiempo_E_S lcdout $fe,$C0, "Aprox.: ",#Tiempo_LCD," seg " pause 1000''60000 'pause de 1 sgds si pongo 60000 contaría por minuto 'con el pause puedo llegar hasta 65535 ms Tiempo_LCD = (Tiempo_LCD) - 1 '+++PARA LEER TECLADO PARA PERMITIR DESCONECTAR en caso de no querer salir++ call Teclado ;chequea CADA 1 sgdo para ver si deseo Desconectar if VAR1 = "D" then goto Desconectar '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ next else Page 13 of 22 19/03/2013 0:48
  • 40. C:PBP ALARMASMI ALARMAMI ALARMA ADAPTADA AL EAGLE 120x100-- 4 Lineas faltanARCHIVOS 'Con este borrado de pantalla consigo que no se mantenga fijo el último 'mensaje de zona violada 'pause 200 'POR SEGURIDAD EN LA SIMULACION lcdout $fe, 1 'limpia la pantalla pause 1000 'para dar efecto intermitente lcdout $fe,2,"CHEQUEANDO..." ' Posiciona el cursor INICIO línea 1 pause 1000 'para dar efecto intermitente goto Chequeo_Zonas 'Si todas las zonas están cerradas: chequear Zonas ;y teclas especiales endif '+++++*************************++++ Mensaje_Zonas_Violadas: NumZona1 = 0 'inicializamos variables NumZona2 = 0 'EL VALOR 0 indica que estan todas cerradas NumZona3 = 0 if lzona_1 = 1 then pause 100:NumZona1= 1 'zona1 abierta: asignar valor 1 if lzona_2 = 1 then pause 100:NumZona2= 2 'zona2 abierta: asignar valor 2 if lzona_3 = 1 then pause 100:NumZona3= 3 'zona3 abierta: asignar valor 3 'Si alguna zona está abierta mensaje y salta a "Activar_Alarma" 'Si todas las zonas están cerradas no hace el mensaje y Salta "Activar_Alarma" if Lzona_1 = 1 or Lzona_2 = 1 or Lzona_3 = 1 then lcdout $fe, 1 'limpia la pantalla lcdout $fe,2," VIOLADA: " ' Posiciona el cursor INICIO línea 1 'posicion 1 de línea 2 lcdout $fe,$C0, "ZONA: ",#NumZona1," - ",#NumZona2," - ",#NumZona3," " 'Pause 400 ' Hacemos una pausa de 4 msegundos call beep ' Generamos un sonido call beep ' Generamos un sonido call beep ' Generamos un sonido 'Pause 1500 ' Pausa para visualizar el mensaje endif goto Activar_Alarma ;+++++++++++++++++++++ ERROR AL METER CLAVE +++++++++++++++++++++++++ Error: low lactivada 'APAGAR led VERDE indicador de estar ACTIVADA LA ALARMA NFallos = NFallos + 1 'incrementa para limitar a un max de 3 fallos pause 500 lcdout $fe, 1 ' Limpia la LCD lcdout $fe, 2 ' Posiciona el cursor en el inicio lcdout "Maxi. 3 intentos" '" * * * * * * " Page 14 of 22 19/03/2013 0:48
  • 41. C:PBP ALARMASMI ALARMAMI ALARMA ADAPTADA AL EAGLE 120x100-- 4 Lineas faltanARCHIVOS lcdout $fe,$C0, "Numero: ",#NFallos '" ERROR! " call beep ' Generamos un sonido call beep ' Generamos un sonido call beep ' Generamos un sonido pause 2000 ' Pausa para visualizar el mensaje 'Máximo nº de Fallos 3 para meter la clave if NFallos >= 3 then NFallos = 0 :goto Activar_Alarma goto Clave ' Salta a "Clave" para nueva oportunidad ;******RUTINA DE ACTIVACIÓN DE ALARMA CON EL Nº DE TELÉFONO ***** Activar_Alarma: 'TARDARÁ APROX 12 SEGS para volver a la rutina '"Chequeo_Zonas:" desde la cual se verifica si se 'pulsa alguna tecla Especial con "A" activar '"C" Cambiar Clave "D" Desconectar. high lactivada 'ACTIVAR led VERDE indicador de estar 'ACTIVADA LA CENTRAL DE ALARMA high LSirena 'RB2 activa led y sirena ;Para DESACTIVAR LA ALARMA pulsar "D" e INTRODUCIR LA CLAVE. ; si NO es correcta se vuelve a activar la alarma desde la rutina Error: ; Si la clave es OK ir a "Chequeo_Inicial:" habrá que volver a meter la clave ; pero no estará nada operativa. Desconectar: high Col_1 : high Col_2 : high Col_3 : low Col_4 if Fila_D = 0 then call Beep_Estabilizacion :goto Clave_Desconectar high Col_4 'lo pongo a 1 para que reconozca que pulso la Tecla "D" 'NO LO ENTIENDO PERO HAGO COMO CON "Confirmar_Copia_Clave:" '+++++ ACTIVA LLAMADAS TELÉFONICA +++++ ;SI NO SE HA PULSADO LA TECLA "D" HACER la LLAMADAS: LLAMADAS: 'ME FALTA POR PONER EL DTMFOUT con el teléfono de la eeprom 'recordar que si if var1 = 0 then var1 = 10 'Que es el tono dtmfout 'correspondiente al 0 pause 2000 ;espera 2 segundos antes de empezar '------- Para Desconectar rápido en caso de pulsar "D"---------- high Col_1 : high Col_2 : high Col_3 : low Col_4 if Fila_D = 0 then call Beep_Estabilizacion :goto Clave_Desconectar high Col_4 'lo pongo a 1 para que reconozca que pulso la Tecla "D" 'NO LO ENTIENDO PERO HAGO COMO CON "Confirmar_Copia_Clave:" '------------------------------------------------------------ high rele ; energice la bobina del rele pause 2000 ; espere 2 segundos hasta obtener tono de marcar '------- Para Desconectar rápido en caso de pulsar "D"---------- high Col_1 : high Col_2 : high Col_3 : low Col_4 if Fila_D = 0 then call Beep_Estabilizacion :goto Clave_Desconectar Page 15 of 22 19/03/2013 0:48
  • 42. C:PBP ALARMASMI ALARMAMI ALARMA ADAPTADA AL EAGLE 120x100-- 4 Lineas faltanARCHIVOS high Col_4 'lo pongo a 1 para que reconozca que pulso la Tecla "D" 'NO LO ENTIENDO PERO HAGO COMO CON "Confirmar_Copia_Clave:" '------------------------------------------------------------ 'EL VALOR 0 en código DTMFOUT es el valor 10. por ello la conversión 'del valor 0 en valor DTMFOUT read 20,DIGITO[1]:if DIGITO[1]= 0 then DIGITO[1]= 10 read 21,DIGITO[2]:if DIGITO[2]= 0 then DIGITO[2]= 10 read 22,DIGITO[3]:if DIGITO[3]= 0 then DIGITO[3]= 10 read 23,DIGITO[4]:if DIGITO[4]= 0 then DIGITO[4]= 10 read 24,DIGITO[5]:if DIGITO[5]= 0 then DIGITO[5]= 10 read 25,DIGITO[6]:if DIGITO[6]= 0 then DIGITO[6]= 10 read 26,DIGITO[7]:if DIGITO[7]= 0 then DIGITO[7]= 10 read 27,DIGITO[8]:if DIGITO[8]= 0 then DIGITO[8]= 10 read 28,DIGITO[9]:if DIGITO[9]= 0 then DIGITO[9]= 10 pause 50 'Pongo este pause para mayor seguridad de que se han copiado todos los digitos. ;Colocar el Número celular a llamar dtmfout PORTB.0,[#DIGITO[1],#DIGITO[2],#DIGITO[3],#DIGITO[4],#DIGITO[5], #DIGITO[6],#DIGITO[7],#DIGITO[8],#DIGITO[9]] lcdout $fe, 1 ' Limpia la LCD lcdout $fe, 2," Llamando ... " 'Posiciona el cursor en el inicio 'Posiciona el cursor inicio linea 2 lcdout $fe,$C0,"Telfno ",#DIGITO[1],#DIGITO[2],#DIGITO[3],#DIGITO[4], #DIGITO[5],#DIGITO[6],#DIGITO[7],#DIGITO[8],#DIGITO[9] pause 8000 'Espera de 8 sgs hasta que alguien conteste. 'en otros ejemplos ponen sólo 4 sgs '------- Para Desconectar rápido en caso de pulsar "D"---------- high Col_1 : high Col_2 : high Col_3 : low Col_4 if Fila_D = 0 then call Beep_Estabilizacion :goto Clave_Desconectar high Col_4 'lo pongo a 1 para que reconozca que pulso la Tecla "D" 'NO LO ENTIENDO PERO HAGO COMO CON "Confirmar_Copia_Clave:" '------------------------------------------------------------ 'PASADOS LOS 8 SEGUNDOS ;SONIDO DE SIRENA por el telefno PARA ADVERTIR for X= 1 to 25 ;repetir 25 veces equivale a 6 segundos a 20 MHZ ;ver explicación pag 97 3era edición 'enviar el sonido de sirena por el teléfono sound portB.0,[100,10,50,10]'Este otro es interesante[125,4,123,5] next ;siguiente repetición low rele 'desconectar el relé el cual cierra la llamada '++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 'Chequea zonas para de esta forma poder ver en LCD 'las zonas violadas. En caso de cerrarse la zona no saldría mensaje 'y volvería a "Activar_Alarma". En cuanto se habra una zona saldrá el 'mensaje y de nuevo a "Activar_Alarma. goto Mensaje_Zonas_Violadas ' Chequeo_Zonas Page 16 of 22 19/03/2013 0:48
  • 43. C:PBP ALARMASMI ALARMAMI ALARMA ADAPTADA AL EAGLE 120x100-- 4 Lineas faltanARCHIVOS '++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ '-----RUTINA ANTI-REBOTE PULSADORES DEL TECLADO-------------- ' La siguiente subrutina genera un "Beep" en el Buzzer ' conectado en RC0. cada vez que se pulse una tecla. '++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Beep_Estabilizacion: 'SE PUEDE SUSTITUIR POR "CALL Beep" 'cada vez que se pulse una tecla producir un Beep high LBuzzer ' Estado Lógico Alto para RA5 pause 100 ' Pausa de 100 milisegundos low LBuzzer ' Estado Lógico Bajo para RA5 Espera_Suelte_Tecla: 'De RC4 a RC7 son las filas del teclado if Fila_A = 0 then Espera_Suelte_Tecla 'Hasta que no deje de ser pulsada ' no retornará para seguir leyendo if Fila_B = 0 then Espera_Suelte_Tecla 'Hasta que no deje de ser pulsada ' no retornará para seguir leyendo if Fila_C = 0 then Espera_Suelte_Tecla 'Hasta que no deje de ser pulsada ' no retornará para seguir leyendo if Fila_D = 0 then Espera_Suelte_Tecla '(*) Hasta que no deje de ser pulsada ' no retornará para seguir leyendo pause 25 'otros programas lo tienen, pero no lo creo necesario return '------------------------------------------------------------------------ Beep: 'cuando sale mensaje produce un Beep 'cada vez que se pulse una tecla producir un Beep high LBuzzer ' Estado Lógico Alto para RA5 pause 100 ' Pausa de 100 milisegundos low LBuzzer ' Estado Lógico Bajo para RA5 return '*************************************************************** '* lee el teclado y cuando hay una tecla pulsada * '* (25 a 30 ms), carga la variable con el valor de la tecla * '* y espera a que se suelte la tecla. * '* cuando lo haga retornará a la rutina "Consulta" * '* Garantizamos el rebote de contacto garantizando que solo * '* una tecla sea cargada y no varias veces por cada pulso * '* de cierre. '* SE PERMITE LA LECTURA DE TODAS LAS TECLAS PARA LA CLAVE * '*************************************************************** Teclado: ;SI NO SE PULSA NINGUNA TECLA VAR1 = 170 VAR1 = 170 '170=1010101010' y lopongo en lugar de var1= 0 'para que se cheque también el 0 en caso de cambiar 'clave. Page 17 of 22 19/03/2013 0:48
  • 44. C:PBP ALARMASMI ALARMAMI ALARMA ADAPTADA AL EAGLE 120x100-- 4 Lineas faltanARCHIVOS pause 100 'CON estos pauses evito que en la simulacion en PROTEUS 'salga CPU cargada Col_1 = 0 ' Columna 1 = 0 Col_1 var PORTC.0 Col_2 = 1 ' Columna 2 = 1 Col_3 = 1 ' Columna 3 = 1 Col_4 = 1 ' Columna 4 = 1 if Fila_A = 0 then VAR1 = 1:goto Beep_Estabilizacion ' tecla "1" if Fila_B = 0 then VAR1 = 4:goto Beep_Estabilizacion ' tecla "4" if Fila_C = 0 then VAR1 = 7:goto Beep_Estabilizacion ' tecla "7" if Fila_D = 0 then VAR1 = "*":goto Beep_Estabilizacion' tecla "*" 11 Col_1 = 1 ' Columna 1 = 1 Col_2 = 0 ' Columna 2 = 0 Col_3 = 1 ' Columna 3 = 1 Col_4 = 1 ' Columna 4 = 1 if Fila_A = 0 then VAR1 = 2:goto Beep_Estabilizacion ' tecla "2" if Fila_B = 0 then VAR1 = 5:goto Beep_Estabilizacion ' tecla "5" if Fila_C = 0 then VAR1 = 8:goto Beep_Estabilizacion ' tecla "8" if Fila_D = 0 then VAR1 = 0:goto Beep_Estabilizacion ' tecla "0" 10 Col_1 = 1 ' Columna 1 = 1 Col_2 = 1 ' Columna 2 = 1 Col_3 = 0 ' Columna 3 = 0 Col_4 = 1 ' Columna 4 = 1 if Fila_A = 0 then VAR1 = 3:goto Beep_Estabilizacion ' tecla "3" if Fila_B = 0 then VAR1 = 6:goto Beep_Estabilizacion ' tecla "6" if Fila_C = 0 then VAR1 = 9:goto Beep_Estabilizacion ' tecla "9" if Fila_D = 0 then VAR1 ="#":goto Beep_Estabilizacion ' tecla "#" 12 Col_1 = 1 ' Columna 1 = 1 Col_2 = 1 ' Columna 2 = 1 Col_3 = 1 ' Columna 3 = 1 Col_4 = 0 ' Columna 4 = 0 '"A" La utilizo para ACTIVAR EMERGENCIA" if Fila_A = 0 then VAR1 = "A":goto Beep_Estabilizacion ' tecla "A" ->13 if Fila_B = 0 then VAR1 = "B":goto Beep_Estabilizacion ' tecla "B" ->14 '"C" La utilizo para CAMBIAR CLAVE" Page 18 of 22 19/03/2013 0:48
  • 45. C:PBP ALARMASMI ALARMAMI ALARMA ADAPTADA AL EAGLE 120x100-- 4 Lineas faltanARCHIVOS if Fila_C = 0 then VAR1 = "C":goto Beep_Estabilizacion ' tecla "C" ->15 ''"D" La utilizo para DESACTIVAR ALARMA" if Fila_D = 0 then VAR1 = "D":goto Beep_Estabilizacion ' tecla "D" ->0 'SI NO SE HA PULSADO NINGUNA TECLA RETORNAR return ' Retorna una línea después del llamado "Call" ;+++++++++++++++++++++ CAMBIO DE CLAVE ++++++++++++++++++++++++++++ Cambio_Clave: pause 50 'Con estos pauses evito que en la simulacion en PROTEUS 'salga CPU cargada lcdout $fe, 1 ' Limpia la LCD lcdout $fe, 2 ' Posiciona el cursor en el inicio lcdout " Cambiar Clave?" 'NO LE PONGO LA "¿" por no reconocerla la LCD lcdout $fe,$C0, "Si,pulsar 1 NO 2" call Beep ' Generamos un sonido Chequeo: 'chequeo de si se pulsa 1 o 2 para cambiar la clave pause 100 'Con estos pauses evito que en la simulacion en PROTEUS 'salga CPU cargada Col_1 = 0 ' Columna 1 = 0 RC.0 a RC.3 Col_2 = 1 ' Columna 2 = 1 Col_3 = 1 ' Columna 3 = 1 Col_4 = 1 ' Columna 4 = 1 if Fila_A = 0 then ' tecla "1" SÍ QUIERO CAMBIAR LA CLAVE call Beep_Estabilizacion; goto Nueva_Clave endif Col_1 = 1 ' Columna 1 = 1 RC.0 a RC.3 Col_2 = 0 ' Columna 2 = 0 Col_3 = 1 ' Columna 3 = 1 Col_4 = 1 ' Columna 4 = 1 if Fila_A = 0 then ' tecla "2" No quiero cambiar clave call Beep_Estabilizacion goto Continuar 'retorna a "Continuar:" endif goto chequeo 'a la espera de que se pulse una u otra acción '+++++++++++++++++++++++NUEVA CLAVE+++++++++++++++++++++ Nueva_Clave: pause 100 'pausa de 1/2 segundo ;PRIMERO DEBE PONER LA CLAVE ANTERIOR: y después la actual lcdout $fe, 1 ' Limpia la LCD Page 19 of 22 19/03/2013 0:48
  • 46. C:PBP ALARMASMI ALARMAMI ALARMA ADAPTADA AL EAGLE 120x100-- 4 Lineas faltanARCHIVOS lcdout $fe, 2 ' Posiciona el cursor en el inicio lcdout "CLAVE ANTERIOR:" 'NO LE PONGO LA "¿" por no reconocerla la LCD call Beep ' Generamos un sonido ' goto Comparar_Clave_Antigua ;verifca que se conoce la clave antigua para ;poder cambiarla. '----Iniciamos la posicion inicial para escribir en LCD y EEPROM---- POSICION_LCD= $C8 'primera posición en la LCD para sacar "******" DIRECCION_EEPROM = 1 'primera posición de la EEPROM para grabar la clave de 6 digitos 'ocupará de la 1 a la 6 SON 6 DÍGITOS DE CLAVE '------------------------------------------------------------------- X = 0 ' Iniciamos la variable POR SI ACASO. Introducir_Clave_Antigua: call Teclado ' Si ninguna tecla fue pulsada salta a "Introducir_Clave_Antigua" if VAR1 = 170 then Introducir_Clave_Antigua lcdout $fe,$C0, "Valor: ",#VAR1 lcdout $fe,POSICION_LCD, "*" 'ocultarlo 'incrementamos la posición, se deben poner un máximo de 6 digitos POSICION_LCD = POSICION_LCD + 1 X = X + 1 DIGITO[X] = VAR1 ' El valor de la tecla pulsada lo ' guardamos en la variable correspondiente if X >= 6 then Comprobar_Clave_Antigua ' Si X = 6 estamos guardando en DIGITO[6] ' el último valor introducido desde el ' teclado matricial goto Introducir_Clave_Antigua 'Si X es diferente de 6 continuamos 'esperando el siguiente valor a ser 'ingresado desde el teclado ' A partir de la siguiente etiqueta empezamos la comprobación, ' y el formato es: ' ' Si DIGITO[X] es igual a CLV[X] el digito es correcto, ' y salta a la etiqueta "paseX", ' si es diferente salta a la subrutina "error"; veamos… Comprobar_Clave_Antigua: X = 0 'iniciamos la variable por seguridad if DIGITO[1] = CLV[1] then pasar1:goto error pasar1: if DIGITO[2] = CLV[2] then pasar2:goto error pasar2: if DIGITO[3] = CLV[3] then pasar3:goto error pasar3: Page 20 of 22 19/03/2013 0:48
  • 47. C:PBP ALARMASMI ALARMAMI ALARMA ADAPTADA AL EAGLE 120x100-- 4 Lineas faltanARCHIVOS if DIGITO[4] = CLV[4] then pasar4:goto error pasar4: if DIGITO[5] = CLV[5] then pasar5:goto error pasar5: if DIGITO[6] = CLV[6] then goto Introducir_Nueva_Clave: goto error 'Si no son iguales ir a error 'si son iguales los 6 digitos continuar e introducir "La Nueva Clave" '--------------------------------------------------------------------------- '+++DESDE AQUÍ SE HACE LECTURA DE LA NUEVA CLAVE Y SE GUARDA A PARTIR +++++ '+++ DE LA POSICIÓN 10 DE LA EEPROM +++++ Introducir_Nueva_Clave: lcdout $fe, 1 ' Limpia la LCD lcdout $fe, 2 ' Posiciona el cursor en el inicio lcdout "Int. Nueva Clave" lcdout $fe,$C0, " 6 DIGITOS " call Beep ' Generamos un sonido pause 2000 lcdout $fe,$C0, " " ;limpia la línea 2 '----Iniciamos la posicion inicial para escribir en LCD y EEPROM---- POSICION_LCD= $C8 'primera posición en la LCD para sacar "******" DIRECCION_EEPROM = 1 'primera posición de la EEPROM para grabar la clave de 6 digitos 'ocupará de la 1 a la 6 SON 6 DÍGITOS DE CLAVE '------------------------------------------------------------------- Lectura_Teclado_EEPROM: call teclado ' Si ninguna tecla fue pulsada salta a "Lectura_Teclado_EEPROM" if VAR1 = 170 then Lectura_Teclado_EEPROM lcdout $fe,$C0, "Valor: ",#VAR1 lcdout $fe,POSICION_LCD, "*" 'ocultarlo 'incrementamos la posición, se deben poner un máximo de 6 digitos POSICION_LCD = POSICION_LCD + 1 write DIRECCION_EEPROM,VAR1 ' Escribe el valor en la memoria de datos ' Revisa si llegamos al límite asignado por ' el programador en la memoria de datos if DIRECCION_EEPROM = 6 then Apuntar_Clave DIRECCION_EEPROM = DIRECCION_EEPROM + 1 ' Aumentamos la posición en una unidad goto Lectura_Teclado_EEPROM 'si aún no se ha llegado a introducir los 6 digitos ;AL LLEGAR A 16 ANOTAR LA CLAVE Apuntar_Clave: pause 100 'X = 0 ' inicializamos la variable X = 0 no hace falta aquí read 1, CLV[1] ' leemos el primer dígito y lo guardamos en CLV[1] read 2, CLV[2] ' leemos el segundo dígito y lo guardamos en CLV[2] read 3, CLV[3] ' leemos el tercer dígito y lo guardamos en CLV[3] Page 21 of 22 19/03/2013 0:48
  • 48. C:PBP ALARMASMI ALARMAMI ALARMA ADAPTADA AL EAGLE 120x100-- 4 Lineas faltanARCHIVOS read 4, CLV[4] ' leemos el cuarto dígito y lo guardamos en CLV[4] read 5, CLV[5] ' leemos el quinto dígito y lo guardamos en CLV[5] read 6, CLV[6] ' leemos el sexto dígito y lo guardamos en CLV[6] pause 200 'Para preparar la LCD, no es necesario, pero para simulación lcdout $fe, 1 ' Limpia la pantalla lcdout $fe, 2 ' Posiciona el cursor en el inicio lcdout "ANOTE LA CLAVE: " pause 1500 lcdout $fe, 2 , "PULSE < 1 > OK " lcdout $fe,$C0," ", #CLV[1],"-",#CLV[2],"-",#CLV[3],"-",#CLV[4],"-", #CLV[5],"-",#CLV[6] ;+++++++++++++++++++ CONFIRMAR COPIA CLAVE ++++++++++++++++++++++ ;confirmar pulsando la Tecla 1 que hemos copiado la clave nueva. Confirmar_Copia_Clave: 'chequeo de si se pulsa 1 o 2 para cambiar la clave pause 100 'Con estos pauses evito que en la simulacion en PROTEUS 'salga CPU cargada Col_1 = 0 ' Columna 1 = 0 RC.0 a RC.3 Col_2 = 1 ' Columna 2 = 1 Col_3 = 1 ' Columna 3 = 1 Col_4 = 1 ' Columna 4 = 1 ' tecla "1" SÍ QUIERO CAMBIAR LA CLAVE if Fila_A = 0 then call Beep_Estabilizacion:goto Inicio ;NOTA EN LA SIMULACION DEL PROTEUS SI NO MODIFICO EL VALOR DE "Col_1" NO 'ACTUARÍA Y NO HARÍA NADA AL PULSAR LA "TECLA 1" Y NO LO ENTIENDO 'PERO ESTÁ MÁS QUE DEMOSTRADO. Por ello le pongo el valor Col_1 = 1 ;antes de volver a confirmar Col_1 = 1 ' Columna 1 = 1 RC.0 a RC.3 'Col_2 = 0 ' Columna 2 = 0 'Col_3 = 1 ' Columna 3 = 1 'Col_4 = 1 ' Columna 4 = 1 goto Confirmar_Copia_Clave 'a la espera de que se pulse la Tecla 1 ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ end Page 22 of 22 19/03/2013 0:48