[Aporte] Central de Alarma con PIC

torres.electronico

Well-known-Alfil
ALARMA_FE_2.JPG

Saludos; Bueno, aqui voy a ir subiendo mis avances con este proyecto que lo tengo en un 70% finalizado.
Basicamente, lo que les voy a compartir en esta oportunidad, es un sistema de alarma domestico, que en lo posible, no va a tener nada que envidiarle a un sistema comercial (DSC,HONEYWELL,X28,etc...).
Habia armado un sistema con opcion salida backup celular (un simple telefono arcaico motorrolla C115), y ahora quiero hacer algo mas complejo para que el usuario pueda sacarle mas jugo a este proyecto.
En el primer proyecto (ver archivo ejemploALARMA), el sistema monitorea 6 entradas todo/nada (pueden conectar sensores magneticos, barreras o PIR) y una entrada extra para uso exclusivo del pulsador de PANICO.
Todo muy lindo hasta acá, pero hoy estaba haciendo el PCB y mientras lo diseñaba, se me pasaron un par de ideas que las quiero poner en practica, por que el sistema tendria que ser lo mas amoldable posible para el cliente... o sea, la opcion de poder configurar los sensores en 3 modos difierentes (Instantaneo-Presente/Ausente-Interior) seria ideal, ya que con ello, podemos luego armar el sistema en modo presente o ausente y darle un valor de importancia a cada sensor segun zona.

Ver el archivo adjunto ALARMA_c115.PDF
 

Adjuntos

  • ejemploAlarmBackUP.rar
    299.8 KB · Visitas: 97
  • ALARMA_FE_1.JPG
    ALARMA_FE_1.JPG
    101.5 KB · Visitas: 59
Bueno, voy compartiendo lo que tengo hasta ahora y que esta funcional... deje unos comentarios en el programa por si quieren ir jugando un poco y colaborar.
En la ultima parte del programa, estoy arrancando con lo que va a ser la configuracion de las zonas y tengo que sumarle como programar desde teclado los dos numeros de telefono...
el teclado tenia en mente hacer algo extra y con comunicacion RF o un simple hilo de pin a pin... lo estoy carburando bien ya que dos display en un proyecto no seria nada barato... quizas meta el display en el teclado y quede mejor... alguna idea, sugerencia, modificacion para mejora? Saludos



Código:
'****************************************************************
'*  Name   : BackupCelular_c115.BAS                             *
'*  Author : Alejandro Martin Torres                            *
'*  Notice : Copyright (c) 2015 BIOEEA desarrollos Tecnologicos *
'*  Notice:      Prohibida su venta - www.forosdeelectronica.com    *
'*         : All Rights Reserved                                *
'*  Date   : 05/06/2015                                         *
'*  Version: 1.0                                                *
'*  Notes  :  comandos AT                                       *
'*         :at+cmgf= formato del mensaje (1-0)                  *
'*         :at+cmgs=enviar mensaje                              *
'*         :at+cmgd=borrar mensaje                              *
'*         :at+cbc=estdo bateria                                *
'*         :at+chup=cuelga la llamada                           *
'*         :at+cmod=                                            *
'****************************************************************
include "modedefs.bas"
ADCON1=7
DEFINE OSC 20
  
define LCD_DREG PORTD
DEFINE LCD_DBIT 4
DEFINE LCD_RSREG PORTD
DEFINE LCD_RSBIT 3
DEFINE LCD_EREG PORTD
DEFINE LCD_EBIT 2

LEDROJO VAR PORTA.3
LEDAMARILLO VAR PORTA.4
LEDVERDE VAR PORTA.5

zona1 var PORTB.2
zona2 var PORTB.3
zona3 var PORTB.4
zona4 var PORTB.5
zona5 var PORTB.6
zona6 var PORTB.7

RELE1 VAR PORTC.0
RELE2 VAR PORTC.1
RELE3 VAR PORTC.2
RELE4 var PORTC.4
BIP VAR PORTC.3

OPTION_REG=%10000010        
;INTCON=%10100001           
;TMR0=0 
;T2CON = %00000110
;PR2=124

TRISB=%11111111

;--DEFINICION DE VARIABLES-- 
x var byte
Z VAR BYTE
Z1 VAR BYTE
Z2 VAR BYTE
Z3 var byte
Z4 var byte
Z5 var byte
Z6 var byte
Z7 var byte
m var byte
n var byte
o var byte
SENAL VAR BYTE
NUM0 var byte

TZONA1 var byte
TZONA2 VAR BYTE
TZONA3 VAR BYTE
TZONA4 VAR BYTE
TZONA5 VAR BYTE
TZONA6 VAR BYTE
TIEMPO VAR BYTE

NUMA1 var byte
NUMB1 var byte
NUMC1 var byte
NUMD1 var byte
NUME1 var byte
NUMF1 var byte
NUMG1 var byte
NUMH1 var byte

NUMA2 var byte
NUMB2 var byte
NUMC2 var byte
NUMD2 var byte
NUME2 var byte
NUMF2 var byte
NUMG2 var byte
NUMH2 var byte

COD1 VAR BYTE
COD2 VAR BYTE
COD3 VAR BYTE
COD4 VAR BYTE

contador var byte
;***CODIGO DE AREA*****************
COD1 = 0                         ;* aca colocamos
COD2 = 2                         ;* el codigo
COD3 = 9                         ;* de area de sus
COD4 = 7                         ;* telefonos
;***numero de usuario1*************
NUM0  = 1                        ;*
NUMA1 = 5                        ;*
NUMB1 = 6                        ;* aca colocamos
NUMC1 = 2                        ;* el numero de 
NUMD1 = 5                        ;* telefono
NUME1 = 6                        ;* al que queremos
NUMF1 = 1                        ;* llamar 1ero
NUMG1 = 7                        ;*
NUMH1 = 3                        ;*
;***numero de usuario2*************
NUMA2 = 1                        ;*
NUMB2 = 1                        ;*
NUMC2 = 1                        ;* aca colocamos
NUMD2 = 1                        ;* el numero de
NUME2 = 1                        ;* telefono
NUMF2 = 1                        ;* al que queremos
NUMG2 = 1                        ;* llamar 2do
NUMH2 = 1                        ;*
;**********************************
n = "D"
m = "D"
O = "D"

;***********************************************
ON INTERRUPT GoTo DISPARO
;***********************************************

BOOT:
LCDOUT $FE,1
PAUSE 200
LCDOUT $FE,$80,"-Proyectos  ETI-"
LCDOUT $FE,$C0,"ALARMA BackUP v1"
PAUSE 4000
LCDOUT $FE, 1 
LCDOUT $FE,$80,"- version DEMO -"                                  
FOR CONTADOR = 184 TO 120 STEP -1               'Cuenta atras    
LCDOUT $FE, CONTADOR, 20, 0, 1, "-www.forosdeelectronica.com"      'Imprimir en pantalla
PAUSE 100                                       'Pausa de 0,15 segundos
NEXT CONTADOR                                   'Regresa a CONTADOR
PAUSE 100                                      'Pausa de 2 segundos
FOR CONTADOR = 120 TO 189                       'Cuenta hacia delante
LCDOUT $FE, CONTADOR, 20, 0, 1, "-www.forosdeelectronica.com"      'Imprimir en pantalla
PAUSE 100                                       'Pausa de 0,15 segundos
NEXT CONTADOR 
pause 2000    
IF PORTA.0 = 0 THEN CONFIG
IF PORTA.1 = 0 THEN BACKUP
GOTO BOOT

;*************************************************
;*En esta seccion, tenemos el cuerpo del programa*
;*para el control de la alarma y backup          *
;*************************************************
BACKUP:
SENAL=0
LCDOUT $FE,1
PAUSE 200
LCDOUT $FE,$80,"  MODO ALARMA   "
LCDOUT $FE,$C0,"  DESACTIVADA   "
BACKUP2:
SERIN PORTB.1,T2400,50,BACKUP2,SENAL       ; señal rf proveniente de un llavero o teclado RF
if SENAL="A" then 
    HIGH BIP
    PAUSE 900
    LOW BIP
    GOTO CHECK
   ENDIF
GOTO BACKUP2

;******************************************
;En esta seccion monitoreamos los sensores*
;******************************************
CHECK:
if zona1 = 0 then Z1=1
if zona2 = 0 then Z2=2
if zona3 = 0 then Z3=3
if zona4 = 0 then Z4=4
if zona5 = 0 then Z5=5
if zona6 = 0 then Z6=6
IF PORTB.0=0 THEN Z7=7

if Z1 > 0 THEN ERROR   ;si el sensor esta activado, no dejar armar
if Z2 > 0 THEN ERROR
if Z3 > 0 THEN ERROR
if Z4 > 0 THEN ERROR
if Z5 > 0 THEN ERROR
if Z6 > 0 THEN ERROR
IF Z7 > 0 THEN ERROR
GOTO INICIO

;*******************************************************
;*En esta seccion monitoreamos cuales son las zonas con*
;*errores o problemas que no nos permite armar sistema *
;*******************************************************
ERROR:
LCDOUT $FE,1
PAUSE 200
LCDOUT $FE,$80,"ERROR EN ZONAS: "
LCDOUT $FE,$C0,DEC Z1," ",DEC Z2," ",DEC Z3," ",DEC Z4," ",DEC Z5," ",DEC Z6," ",DEC Z7
PAUSE 2000
Z1=0
Z2=0
Z3=0
Z4=0
Z5=0
Z6=0
Z7=0
GOTO BACKUP

;***************************
;En esta seccion, la alarma trabaja en modo armado
;***************************

INICIO:
LCDOUT $FE,1
PAUSE 200
LCDOUT $FE,$80,"  MODO ALARMA   "
LCDOUT $FE,$C0,"    ACTIVADA    "

RF:
SERIN PORTB.1,T2400,50,ZONAS,SENAL
if SENAL="A" then BACKUP    
if SENAL="B" then DISPARO 
if SENAL="C" then DISPARO
if SENAL="D" then DISPARO

zonas:
if zona1 = 0 then disparo
if zona2 = 0 then disparo
if zona3 = 0 then disparo
if zona4 = 0 then disparo
if zona5 = 0 then disparo
if zona6 = 0 then disparo
IF PORTB.0=0 THEN
   LCDOUT $FE,1
   LCDOUT $FE,$80," ALARMA PANICO  "
   LCDOUT $FE,$C0,"    LLAMANDO    "
   PAUSE 1500
   GOTO DISPARO
  ENDIF
PAUSE 50
goto RF

;**************************************************
;*En esta seccion, se deja un aviso en el display *
;*mencionando que se a tenido un evento y que debe*
;*ser reseteado a modo notificado/enterado.Esto es*
;por si el backup fallo en la comunicacion        *
;**************************************************
EVENTO:
LCDOUT $FE,1
   LCDOUT $FE,$80," HAY UN EVENTO  "
   LCDOUT $FE,$C0," SIN REGISTRAR  "
EVENTO2:
HIGH BIP
SERIN PORTB.1,T2400,800,EVENTO2,SENAL
if SENAL="D" then 
   LCDOUT $FE,1
   LCDOUT $FE,$80,"     ALARMA     "
   LCDOUT $FE,$C0,"   RESTAURADA   "
   PAUSE 1500
   GOTO BACKUP
ENDIF
LOW BIP
PAUSE 500
GOTO EVENTO

;***************************
;===========================
;***************************
CONTEO:
IF Z < 10 THEN HIGH RELE1 : LOW RELE2 : LOW RELE3
IF Z > 17 THEN HIGH RELE3 : LOW RELE1 : LOW RELE2
IF Z > 11 AND Z < 17 THEN HIGH RELE2 : LOW RELE1 : LOW RELE3
RETURN
;***************************
;En esta seccion, voy a sumar todo lo que comente de configuracion
;casi seguro que voy a tener que cambiar varias cosas de arriba.
;por el momento, es lo que hay
;***************************

CONFIG:
LCDOUT $FE,1
PAUSE 200
LCDOUT $FE,$80," MODO PRUEBA DE "
LCDOUT $FE,$C0,"    SISTEMA     "
PAUSE 2000
GOTO INISISTEMA
;***************************

INISISTEMA:
LCDOUT $FE,1
LCDOUT $FE,$80,"    INICIANDO   "
LCDOUT $FE,$C0,"     SISTEMA    "
FOR x = 0 to 4
high bip
pause 800
low bip
next
LCDOUT $FE,1
FOR x = 0 to 25
LCDOUT $FE,$80,"INICIANDO PASO1"
LCDOUT $FE,$C0,"%",DEC Z,"..."
high ledrojo
high ledverde
GOSUB CONTEO
pause 700
low ledrojo
low ledverde
pause 700
Z=Z+1
next
LOW RELE1:LOW RELE2:LOW RELE3
FOR x = 0 to 2
high bip
pause 800
low bip
next

pause 1000
LCDOUT $FE,1
PAUSE 200
LCDOUT $FE,$80,"INICIANDO PASO2"
LCDOUT $FE,$C0,"%30......"
high ledverde
pause 1000

serout2 portc.6,84,["AT",13]
pause 1000
LCDOUT $FE,1
PAUSE 200
LCDOUT $FE,$80,"INICIANDO PASO2"
LCDOUT $FE,$C0,"%50........."
serout2 portc.6,84,["AT",13]
pause 1000
LCDOUT $FE,1
PAUSE 200
LCDOUT $FE,$80,"PASO5 CONECTE EL"
LCDOUT $FE,$C0,"   EQUIPO GSM   "
high ledverde
high bip
PAUSE 2000
LCDOUT $FE,1
PAUSE 200
LCDOUT $FE,$80,"INICIANDO PASO2"
LCDOUT $FE,$C0,"%70..........."
LOW LEDVERDE
LOW BIP
pause 1000
;***MUESTRA LOS DOS NUMEROS DE CELULARES PROGRAMADOS***
LCDOUT $FE,1
PAUSE 200
LCDOUT $FE,$80,DEC NUMA1,DEC NUMB1,DEC NUMC1,DEC NUMD1,DEC NUME1,DEC NUMF1,DEC NUMG1,DEC NUMH1
LCDOUT $FE,$C0,DEC NUMA2,DEC NUMB2,DEC NUMC2,DEC NUMD2,DEC NUME2,DEC NUMF2,DEC NUMG2,DEC NUMH2
PAUSE 5000
;***prueba los NUMEROS DE CELULARES PROGRAMADOS***
LCDOUT $FE,1
PAUSE 200
LCDOUT $FE,$80," PRUEBA COM_CEL "
LCDOUT $FE,$C0,"%90............."
high ledrojo
serout2 portc.6,84,["AT",13]
pause 1000
serout2 portc.6,84,["AT+CMPS=",34,"SM",34,44,34,"SM",34,44,34,"SM",34,13]
pause 1500
serout2 portc.6,84,["AT+CMPS=",34,"ME",34,44,34,"ME",34,44,34,"ME",34,13]
PAUSE 1500
serout2 portc.6,84,["AT+CMGF=1",13] ; pasar modem gsm a modo texto
pause 500
gosub numeroTEL1
PAUSE 300
SEROUT2 portc.6,84,["BIENVENIDO=",m,n,o,26]; enviar
pause 200
gosub numeroTEL1
pause 300
SEROUT2 portc.6,84,["BIENVENIDO=",m,n,o,26]

pause 5000

serout2 portc.6,84,["AT",13]
pause 1000
serout2 portc.6,84,["AT+CMPS=",34,"SM",34,44,34,"SM",34,44,34,"SM",34,13]
pause 1500
serout2 portc.6,84,["AT+CMPS=",34,"ME",34,44,34,"ME",34,44,34,"ME",34,13]
PAUSE 1500
serout2 portc.6,84,["AT+CMGF=1",13] ; pasar modem gsm a modo texto
pause 500
gosub numeroTEL2
PAUSE 300
SEROUT2 portc.6,84,["BIENVENIDO=",m,n,o,26]; enviar
pause 200
gosub numeroTEL2
pause 300
SEROUT2 portc.6,84,["BIENVENIDO=",m,n,o,26]
low ledrojo
pause 300
LCDOUT $FE,1
PAUSE 200
LCDOUT $FE,$80,"FIN PRUEBA SIST "
LCDOUT $FE,$C0,"%100............"
PAUSE 3000
GOTO configSISTEMA

;===fin configuracion modem===
numeroTEL1:
serout2 portc.6,84,["AT+CMGS=",34,DEC COD1,DEC COD2,DEC COD3,DEC COD4,DEC NUM0,DEC NUMA1,DEC NUMB1,DEC NUMC1,DEC NUMD1,DEC NUME1,DEC NUMF1,DEC NUMG1,DEC NUMH1,34,13]
return
numeroTEL2:
serout2 portc.6,84,["AT+CMGS=",34,DEC COD1,DEC COD2,DEC COD3,DEC COD4,DEC NUM0,DEC NUMA2,DEC NUMB2,DEC NUMC2,DEC NUMD2,DEC NUME2,DEC NUMF2,DEC NUMG2,DEC NUMH2,34,13]
return

;DISABLE

DISPARO:
LCDOUT $FE,1
PAUSE 200
LCDOUT $FE,$80,"      ZONA      "
LCDOUT $FE,$C0,"     ALERTA     "
x = 0 
DISPARO1:
IF X = 10 THEN DISPARO2
X=X+1
high bip
pause 800
low bip
SERIN PORTB.1,T2400,300,DISPARO1,SENAL
if SENAL="A" then BACKUP
GOTO DISPARO1


DISPARO2:
HIGH BIP
;IF PORTB.0 = 0 THEN
LCDOUT $FE,1
PAUSE 200
LCDOUT $FE,$80,"    -DISPARO-   "
LCDOUT $FE,$C0,"    LLAMANDO    "
PAUSE 100
HIGH LEDrojo
SEROUT2 portc.6,84,["AT",13]
PAUSE 500
serout2 portc.6,84,["AT",13]
PAUSE 500
serout2 portc.6,84,["AT+CMPS=",34,"SM",34,44,34,"SM",34,44,34,"SM",34,13]
pause 2000
serout2 portc.6,84,["AT+CMPS=",34,"ME",34,44,34,"ME",34,44,34,"ME",34,13]
PAUSE 2000
serout2 portc.6,84,["AT+CMGF=1",13] ; pasar modem gsm a modo texto
pause 500
gosub numeroTEL1 
PAUSE 300
SEROUT2 portc.6,84,["DISPARO ALARMA",26]; enviar
pause 200
gosub NumeroTEL1
pause 300
SEROUT2 portc.6,84,["DISPARO ALARMA",26]; enviar
PAUSE 5000
SEROUT2 portc.6,84,["AT",13]
PAUSE 1000
serout2 portc.6,84,["AT+CMPS=",34,"SM",34,44,34,"SM",34,44,34,"SM",34,13]
pause 2000
serout2 portc.6,84,["AT+CMPS=",34,"ME",34,44,34,"ME",34,44,34,"ME",34,13]
PAUSE 2000
serout2 portc.6,84,["AT+CMGF=1",13] ; pasar modem gsm a modo texto
pause 500
gosub numeroTEL2
PAUSE 300
SEROUT2 portc.6,84,["DISPARO ALARMA",26]; enviar
pause 200
gosub numeroTEL2
pause 300
SEROUT2 portc.6,84,["DISPARO ALARMA",26]; enviar
PAUSE 300
LOW LEDrojo
LOW BIP
GOTO EVENTO
;ENDIF
;INTCON.2=0    
;RESUME
;ENABLE


;configSISTEMA:
;LCDOUT $FE,1
;PAUSE 200
;LCDOUT $FE,$80," CONFIGURACION  "
;LCDOUT $FE,$C0,"     ZONAS      "
;PAUSE 1500
;LCDOUT $FE,1
;PAUSE 200
;LCDOUT $FE,$80,"1(P-A) / 2(Inst)"
;LCDOUT $FE,$C0,"Z1=",dec TZONA1," (Enter)"

;LCDOUT $FE,1
;PAUSE 200
;LCDOUT $FE,$80,"1(P-A) / 2(Inst)"
;LCDOUT $FE,$C0,"Z2=",dec TZONA2," (Enter)"

;LCDOUT $FE,$C0,"Z3=",dec TZONA3," (Enter)"

;LCDOUT $FE,$C0,"Z4=",dec TZONA4," (Enter)"

;LCDOUT $FE,$C0,"Z5=",dec TZONA5," (Enter)"

;LCDOUT $FE,$C0,"Z6=",dec TZONA6," (Enter)"
;goto configSISTEMA

END
 
Hola Gerson, este mismo proyecto esta funcionando por que lo arme y probe hasta sacarle humo :LOL: ...
Lo que quizas se venga como modificacion, es usar interrupciones para leer los puertos de los sensores...gracias por tu comentario, si me indicas cual tiempo viste largo, dejamelo ver y te digo si coincido con tu opinion.
Saludos
 
Hola Gerson, este mismo proyecto esta funcionando por que lo arme y probe hasta sacarle humo :LOL: ...
Lo que quizas se venga como modificacion, es usar interrupciones para leer los puertos de los sensores...gracias por tu comentario, si me indicas cual tiempo viste largo, dejamelo ver y te digo si coincido con tu opinion.
Saludos

No es mi opinión; yo también uso pausas, delays etc. Pero aquí en el foro hay pseudo científicos :LOL: que te cortan la cabeza si usas delays en programación.:rolleyes:

La pausa mas larga que veo es: pause 5000.
 
:LOL: eso es por que no esta funcionando ahi y queria que se visualice en proteus el efecto del display. En el modo real, 1 segundo y medio es una eternidad :LOL:
Estoy esperando que se prenda papirrin para manguearle elnsoftware vb o alguna idea para programarlo jajaja



:LOL: eso es por que no esta funcionando ahi y queria que se visualice en proteus el efecto del display. En el modo real, 1 segundo y medio es una eternidad :LOL:
Estoy esperando que se prenda papirrin para manguearle elnsoftware vb o alguna idea para programarlo jajaja
 
Última edición:
Las pausas solo las use para disparar modem (necesita unas pausas), pero lo que es el programa en general, no le puse pausas para no tener problemas con los disparos... el 1er intento de este bicho fue con el tmr0 pero los efectos visuales no me gustaban... quizas tendria que reflotar los primeros programas que hice y ver que parche se queda y cuales se van...
Graxias por los aportes...esto es el inicio y se lo puede mejorar, pongo en la lista int timer,int por hardware
 
hola
Las pausas solo las use para disparar modem (necesita unas pausas), pero lo que es el programa en general, no le puse pausas para no tener problemas con los disparos... el 1er intento de este bicho fue con el tmr0 pero los efectos visuales no me gustaban... quizas tendria que reflotar los primeros programas que hice y ver que parche se queda y cuales se van...
Graxias por los aportes...esto es el inicio y se lo puede mejorar, pongo en la lista int timer,int por hardware
bueno llendo al programa., yo lo veo correcto., y no se nada pero absolutamente NADA de basic​
pero en una alarma esta bien ., porque das una orden o funcion ., y en el caso que "consulte"un periferico o sensor ., se detiene y espera a que responda​
y eso lo veo logico ., porque depende de lo que nos"responde" ., seguimos con las funciones del programa o tomamos otra opcion ., y eso esta correcto aparte de razonable y logico​
(y) (y) (y)
 
Exelente trabajo,se podria modificar para instalarla en autos.

Si, se podria, pero haciendo una reforma drastica; Le pondria algun modem directamente que es mucho mejor qie el celular... ademas, creo que tengo por ahi el comando at para que mande por sms la latitud-longitud de la triangulacion de antenas y con eso sacar un radio en el cual puede esgar el auto... esto en españa u otro lugar que no sea argentina andaria de 10 :LOL:
Aca en comodoro, la saguracion de las celdas es terrible y la antena que quizas este a dos cuadras no entras y estas usando otra que esta a 12km arriba de un cerro como me pasa a mi... dependiendo el horario tengo buena señal o mala, osea, si tengo mala es por qie estoy ancñado a la celda de rada tilly, si tengo buena, a la que esta cerca de casa :rolleyes: .... con todo esto quiero decir que un backup celular en un auto, tambien depende de la señal :facepalm:
Estoy mirando unas librerias de darrel sobre varios tipos de interrupciones... vamos a ver si funca alguna directamente con pbp sin mlab
 
Última edición:
le encontre un detalle al pcb.... me olvide de llevar las dos pistas de alimentacion al secor de borneras de entrada (para los sensores que no son pasivos :rolleyes:)... meno mal que tengo espacio por arriba :facepalm:
bueno, ya puede re-re-re-arrancar mi PC, asi que en un rato sigo subiendo avances
 
Hola torres.electronico... siento que te estas robando mi proyecto... jajajajja.
basicamente es lo mismo pero difiere en las prestaciones y metodología de implementan del firmware, una de las diferencias es que yo uso un Pic18f4550 para aprovechar su puerto USB y configurar las opciones mediante un terminal HID que tambien estoy implementando bajo VB6, otra diferencia es que estoy trabajando el firmware en CCS PIC.
Para la polémica del uso de los famosos delays soy firme partidario de "donde, como y cuando usarlos"... por ejemplo en la rutina para iniciar al módem GSM después de activarlo hay que esperar a que este listo para aceptar los comandos AT, una vez el módem admite los comandos AT hago la lectura de los SMSs guardados mediante AT+CMGL="ALL"...pero resulta que la lectura de esos SMS no son inmediatos (al menos cuando se acaba se encender el modem) y puede tardar hasta 10s en estar listos (esto en el caso particular del módem ENFORA que estoy usando). La forma en que estoy encarando esa lectura de SMSs es usar un bucle y hacer la consulta cada 3s usando el "famoso delay", Quizá alguien diga por ahí "3s de delay... eso es una atrocidad..., etc", pero tomando en cuenta que mientras se inicia el módem no se hace ninguna tarea mas no importa tener al uC "trabado" ... y si alguien diría ... pero puedes usar un timer. Pues si, si podría usarlo pero al no tener otra tarea mas que hacer seria algo así:

unsigned int1 bandera;
#INT_TIMER1
void irs_timer1()
{
...;
bandera=1; //señaliza que pasaron 3s.
}
void main()
{
...
...
while(bandera==0); //espera a que pasen 3s.
...
...
}

y todo ese código seria lo mismo que usara un delay_ms(3000);.
Podría alguien decir "en vez de perder tiempo de esa manera mejor poner al uC en modo sleep". Resulta que en la gama 16 de PIC el modo sleep detiene totalmente a los temporizadores excepto al tiemr0 cuando este esta con oscilador externo,pero esi es arina de otro costal.... En la Gama18 de Pic el timer1 puede funcionar en el modo de bajo consumo pero ese es un detalle que por el momento no interesa en lo que estoy haciendo.
Concluyendo afirmo que los delays son perfectamente utilizables siempre que haya un buen criterio para su uso.
 
Hola Saint; Es una muy buena idea implementar un micro con soporte USB; Ahorita mismo me estoy dando la cabeza contra el teclado con el tema de configuracion del sistema mediante teclado... por un lado avanzo, y por otro me estanco :rolleyes: ...
Le hago algo a CCS, pero no me es muy practico para proramar por que aun me falta aprender mas y no perderme en el intento. Ahi arranque reformando unas librerias de Darren que estan en ASM y quizas en la proxima actuallizaacion que suba se vean los avances; Hoy me di cuenta que me olvide de sumar el tiempo de desactivacion programable :facepalm:
 
bueno... no era de mucho gusto usar dos pic, asi que meti todo en uno solo y como me habia quedado corto de puertos, imlpemente un teclado analogico con bastante exito :cool:

TECLADO.JPG

les muestro como hice la seccion del teclado analogico:

Código:
LECTURA_TECLADO:
ADCIN PORTA.0,TECLA
IF TECLA = 0 THEN GOTO LECTURA_TECLADO
SELECT CASE TECLA
CASE 138             ;TECLA1
T_NUMERO = 1
CASE 156             ;TECLA2
T_NUMERO = 2
CASE 179             ;TECLA3
T_NUMERO = 3
CASE 102             ;TECLA4
T_NUMERO = 4
CASE 112             ;TECLA5
T_NUMERO = 5
CASE 124             ;TECLA6
T_NUMERO = 6
CASE 81              ;TECLA7
T_NUMERO = 7
CASE 87              ;TECLA8
T_NUMERO = 8
CASE 94              ;TECLA9
T_NUMERO = 9
CASE 72              ;TECLA0 
T_NUMERO = 0
CASE 76              ;TECLA#
T_NUMERO = 12
CASE 68              ;TECLA*
T_NUMERO = 11

END SELECT        ' Close SELECT CASE

return
en esta version ya logre poder poner una configuracion para poder programar clave nueva en memoria no volatil y numero de telefono (tengo que migrar de micro por que no me dio el espacio para que la configuracion del tel quede guardada en la eeprom :rolleyes: )...
Arrancare desde cero migrando todo a un 18F4550 y sumare tambien la configuracion de los sensores... espero que les sea de agrado lo que hay hasta ahora :oops:
se que se puede mejorar muchisimo, asi que cualquier sugerencia es bienvenida ;) SALUDOS



MODO DE EMPLEO:
A_para iniciar el sistema en modo ALARMA, colocar jumper en modo RUN
B_para ver y o configurar los parametros (prueba de hardware,numero de telefono y clave) JUMPER en modo CONFIG.

Modo CONFIG.
NUMERO = 1 TEL
NUMERO = 2 CLAVE NUEVA
NUMERO = 3 PRUEBA HARDWARE (RELAY, LED,MODEM,ETC)
NUMERO = 4 INICIA EN MODO ALARMA

Modo RUN
Al iniciar el sistema, la pantalla queda con el mensaje "MODO ALARMA DESACTIVADA", a la espera de la clave (1234 por defecto) de teclado, o la señal de un control remoto con el mensaje "A" para activar.
La condicion para activar, es que la integridad de los sensores esten en modo reposo, caso contrario, no dejara armar el sistema y mostrara cual zona esta activada.
Cuando se logra activar el sistema, por el momento, "todos" los sensores tienen un delay para desactivacion (esceptuando el boton pulsador de panico).
Para desactivar, se requiere ingresar los 4 digitos de la clave en el teclado, o bien, enviar una señal RF con el mensaje "A".
Todos los eventos de disparo, accionan el modem y deja un mensaje en pantalla "HAY UN EVENTO SIN REGISTRAR"... Para borrar y riniciar, solo requerimos enviar una señal RF o presionar cualquier tecla para desactivar...

Que estaria faltando?
1_Menu para seleccionar modo de armado (Modo Presente/Modo Ausente)
2_Poder configurar todos los sensores para que funcionen como Instantaneos o Presente/Ausente (no funcionan en modo Presente)
3_Poder configurar tiempo de salida
4_Poder configurar tiempo de entrada (Zona1 con demora)
5_Guardar numero de telefono en memoria no volatil

parece mentira, pero falta bastante :facepalm:
 

Adjuntos

  • alarma_fe_c115_v2.rar
    66.5 KB · Visitas: 56
  • alarma_fe_c115_v2.pdf
    153.4 KB · Visitas: 52
Última edición:
tal cual amigazo, pero estan puesto mas que nada por posibles ruidos en fuente, sumado a que la hoja de datos recomienda cargas de hasta 9V; De ahi lo dos diodos extras.
Me das una mano con la fuente?
Tenia pensado hacer una fuente con un LM317, ya que podria controlar mas corriente-tension; Me paso en varias oportunidades que la fuente de las alarmas era tan chica, que al conectar sirena interior y exterior en paralelo, se caia mucho la fuente... Que me recomendas? la fente con el LM317 y despues un simple monolitico para alimentar el pic (7805), o que?
abrazo

y otra cosa que queria sumar, es que la fuent en lo posible no se tiene que caer, ya que si estoy usando un teclado resistivo, me v a traer bastantes problemas
 

Adjuntos

  • uln2003lv.pdf
    1.5 MB · Visitas: 28
hola
tal cual amigazo, pero estan puesto mas que nada por posibles ruidos en fuente, sumado a que la hoja de datos recomienda cargas de hasta 9V; De ahi lo dos diodos extras.
Me das una mano con la fuente?
Tenia pensado hacer una fuente con un LM317, ya que podria controlar mas corriente-tension; Me paso en varias oportunidades que la fuente de las alarmas era tan chica, que al conectar sirena interior y exterior en paralelo, se caia mucho la fuente... Que me recomendas? la fente con el LM317 y despues un simple monolitico para alimentar el pic (7805), o que?
abrazo

y otra cosa que queria sumar, es que la fuent en lo posible no se tiene que caer, ya que si estoy usando un teclado resistivo, me v a traer bastantes problemas
yo te recomendaria ., que usaras el ULN2803​
que aparte de tener un OP mas., Tiene caracteristicas que te van ayudar en eso​
aparte sale lo mismo ., no hay diferencia en costo ., te dejo el PDF de el​
Ver el archivo adjunto 132889
 
Atrás
Arriba