TODOPIC
Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: Helena en 11 de Junio de 2006, 23:45:15
-
Hola Chicos,
Necesito una ayudita por favor, este còdigo lo realicè para una pequeña
alarma y funciona de la siguiente manera:
Tengo 3 zonas a controlar mediante 3 SW cuando es abierto cada uno de ellos
temporizan 1 seg, 2 seg y 3 seg, antes de esto verifico que todos esten normalmente abiertos
de lo contrario el led correspondiente parpadeara indicando que la puerta de esa
zona se encuentra normalmente cerrada,(esta es la logica que estoy aplicando aunque la puedo variar)
una vez cerrada se enciende el led de armado y la alarmita esta lista para trabajar.
Pero tengo un problema, no he logrado que cuando tenga mas de 1 puerta cerrada lo
muestre, es decir, por ejemplo si la puerta 1 y 2 estan cerradas los leds correspondientes
parpadearan y si abro la numero 2 se apague el led correspondiente.
En fin lo que quiero es que si los tres SW estan cerrados parpadeen los tres leds y si voy
abriendo uno a uno se apague el led en su caso y luego me muestre el led de armado encendido.
Alguna sugerencia chicos.
Besos
Helena
'"*******************************************************
'"* Name : ALARMA.BAS *
'"* Author : [select VIEW...EDITOR OPTIONS] *
'"* Notice : Copyright (c) 2005 [select VIEW...EDITOR OPTIONS] *
'"* : All Rights Reserved *
'"* Date : 11/06/06 *
'"* Version : 1.0 *
'"* Notes : UTILIZA EL PIC16F84 *
'"* : ALARMITA, HELENA *
'"********************************************************
ASM
device pic16F84A, pwrt_on, xt_osc, wdt_off, protect_off
ENDASM
LED1 var PortB.0 '"PIN 6
LED2 var PortB.1 '"PIN 7
LED3 var PortB.2 '"PIN 8
Arm VAR PortB.3
SW1 var PortB.5 '"PIN 17
SW2 var PortB.6 '"PIN 18
SW3 var PortB.7 '"PIN 1
low LED1
LOW LED2
LOW LED3
LOW SW1
LOW SW2
LOW SW3
TRISA = %11111111 '"PUERTO A COMO ENTRADAS
TRISB = %00000000 '"PUERTO B COMO SALIDAS
PORTB = 0
loop:
IF SW1 = 0 AND SW2 = 0 AND SW3 = 0 THEN inicio 'SI TODOS LOS SW ESTAN EN 0 VOY A INICIO
IF SW1 = 1 AND SW2 = 0 AND SW3 = 0 THEN pa1 'SI ALGUNO ESTA CERRADO ME ENVIA A LA RUTINA
IF SW1 = 0 AND SW2 = 1 AND SW3 = 0 THEN pa2 'PARA INDICAR QUE DEBO DEJAR ABIERTO TODOS LOS
IF SW1 = 0 AND SW2 = 0 AND SW3 = 1 THEN pa3 'SW
GOTO LOOP
pa1:
high led1 'PARPADEA SI SW1 ESTA CERRADO
pause 300
low led1
pause 300
goto loop
pa2:
high led2 'PARPADEA SI SW2 ESTA CERRADO
pause 300
low led2
pause 300
goto loop
pa3:
high led3 'PARPADEA SI SW3 ESTA CERRADO
pause 300
low led3
pause 300
goto loop
inicio:
PAUSE 300
HIGH ARM 'ENCIENDO LED EN PORTB.3 PARA INDICAR CIRCUITO ACTIVO
Pause 200
IF SW1 = 1 THEN
PAUSE 1000 'CUENTO 1 SEGUNDO
high led1 '"PERIMETRO 1
endif
IF SW2 = 1 THEN
PAUSE 2000 'CUENTO 2 SEGUNDOS
high led2 '"PERIMETRO 2
endif
IF SW3 = 1 THEN
PAUSE 3000 'CUENTO 3 SEGUNDOS
high led3 '"PERIMETRO 3
endif
goto inicio
goto loop
-
Hola:
Helena, puede que esta parte te este dando conflictos
SW1 var PortB.5 '"PIN 17
SW2 var PortB.6 '"PIN 18
SW3 var PortB.7 '"PIN 1
TRISB = %00000000 '"PUERTO B COMO SALIDAS
pon como entradas los pines que corresponden a los switchs, y otra cosa, utiliza parentecis entre AND y AND y para todo el comando If.
Suerte :mrgreen:
-
Hola Lord,
Pues el circuito me funciona bien de acuerdo al codigo y al esquema lo que pretendo es que los leds me muestren cuando esta mas de un SW abierto, me explico, al estar cerrados SW1, SW2 y SW3 cada led deberia parpadear indicando que los debo abrir primero para que el circuito este armado entonces si abro SW3 deja de parpadear ZONA3 si abro SW2 deja de parpadear ZONA2 y finalmente si abro SW1 deja de parpadear ZONA1 y en este momento se activa el led de armado de la alarmita.
Sucede que no encuentro la manera de cotejar el còdigo para que haga esto, no se si puedas darme una luz.
Besos
Helena :g)
Hola:
Helena, puede que esta parte te este dando conflictos
SW1 var PortB.5 '"PIN 17
SW2 var PortB.6 '"PIN 18
SW3 var PortB.7 '"PIN 1
TRISB = %00000000 '"PUERTO B COMO SALIDAS
pon como entradas los pines que corresponden a los switchs, y otra cosa, utiliza parentecis entre AND y AND y para todo el comando If.
Suerte :mrgreen:
-
Aunque no programo en Basic parece evidente el error, ya que excluyes explicitamente el estado de los otros interruptores:
IF SW1 = 0 AND SW2 = 0 AND SW3 = 0 THEN inicio 'SI TODOS LOS SW ESTAN EN 0 VOY A INICIO
IF SW1 = 1 AND SW2 = 0 AND SW3 = 0 THEN pa1 'SI ALGUNO ESTA CERRADO ME ENVIA A LA RUTINA
IF SW1 = 0 AND SW2 = 1 AND SW3 = 0 THEN pa2 'PARA INDICAR QUE DEBO DEJAR ABIERTO TODOS LOS
IF SW1 = 0 AND SW2 = 0 AND SW3 = 1 THEN pa3 'SW
GOTO LOOP
Deberia de quedar como:
IF SW1 = 0 AND SW2 = 0 AND SW3 = 0 THEN inicio 'SI TODOS LOS SW ESTAN EN 0 VOY A INICIO
IF SW1 = 1 THEN pa1 'SI ALGUNO ESTA CERRADO ME ENVIA A LA RUTINA
IF SW2 = 1 THEN pa2 'PARA INDICAR QUE DEBO DEJAR ABIERTO TODOS LOS
IF SW3 = 1 THEN pa3 'SW
GOTO LOOP
De esta forma el parpadeo de un led solo depende de su pulsador y no obligas a que los otros esten desactivados.
Un saludo.
-
Hola,
Gracias por tu respuesta voy a intentarlo.
Besos
Helena :g)
Aunque no programo en Basic parece evidente el error, ya que excluyes explicitamente el estado de los otros interruptores:
IF SW1 = 0 AND SW2 = 0 AND SW3 = 0 THEN inicio 'SI TODOS LOS SW ESTAN EN 0 VOY A INICIO
IF SW1 = 1 AND SW2 = 0 AND SW3 = 0 THEN pa1 'SI ALGUNO ESTA CERRADO ME ENVIA A LA RUTINA
IF SW1 = 0 AND SW2 = 1 AND SW3 = 0 THEN pa2 'PARA INDICAR QUE DEBO DEJAR ABIERTO TODOS LOS
IF SW1 = 0 AND SW2 = 0 AND SW3 = 1 THEN pa3 'SW
GOTO LOOP
Deberia de quedar como:
IF SW1 = 0 AND SW2 = 0 AND SW3 = 0 THEN inicio 'SI TODOS LOS SW ESTAN EN 0 VOY A INICIO
IF SW1 = 1 THEN pa1 'SI ALGUNO ESTA CERRADO ME ENVIA A LA RUTINA
IF SW2 = 1 THEN pa2 'PARA INDICAR QUE DEBO DEJAR ABIERTO TODOS LOS
IF SW3 = 1 THEN pa3 'SW
GOTO LOOP
De esta forma el parpadeo de un led solo depende de su pulsador y no obligas a que los otros esten desactivados.
Un saludo.