Autor Tema: Una ayudita con una alarma por favor  (Leído 2055 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado Helena

  • PIC10
  • *
  • Mensajes: 30
Una ayudita con una alarma por favor
« 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

« Última modificación: 12 de Junio de 2006, 04:40:01 por LordLafebre »

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
Re: Una ayudita con una alarma por favor
« Respuesta #1 en: 12 de Junio de 2006, 04:52:41 »
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:

Desconectado Helena

  • PIC10
  • *
  • Mensajes: 30
Re: Una ayudita con una alarma por favor
« Respuesta #2 en: 12 de Junio de 2006, 09:17:49 »
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:

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Una ayudita con una alarma por favor
« Respuesta #3 en: 12 de Junio de 2006, 09:54:52 »
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.
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado Helena

  • PIC10
  • *
  • Mensajes: 30
Re: Una ayudita con una alarma por favor
« Respuesta #4 en: 12 de Junio de 2006, 11:28:11 »
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.