TODOPIC

Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: 16f en 08 de Mayo de 2008, 22:24:03

Título: rele alternador de bomba
Publicado por: 16f en 08 de Mayo de 2008, 22:24:03

hola amigos como podriamos llevar esto a proton.
he usado contadores , interrupciones  y no le doy


Los relés de alternadores de bomba son relés que reciben señal de un contacto que indica que es necesario bombear agua. El relé cierra un contacto que hace que la bomba Nº 1 actúe. Cuando el contacto exterior al relé abre el contacto del relé también abre. Posteriormente ese contacto exterior vuelve a operar cuando sea necesaria de nuevo la operación de una bomba. En este último caso el relé hace que opere el contacto de la bomba Nº 2. Esto hace posible una operación alternada de las bombas.

sw1 activa , motor1 activa :)
sw1 desactiva, motor1 desactiva :(
sw1 activa , motor2 activa :)
sw1 desactiva , motor2 desactiva :(

se repite la   accion


(http://[img])[/img]
Título: Re: rele alternador de bomba
Publicado por: raul_juarez_chihuahua en 09 de Mayo de 2008, 09:46:43
inicio:

if sw = 1 then
       M1 = 1
       else
       goto inicio
end if

perro:
if sw = 1 then
        M1 = 0
        else
        goto perro
end if

gato:
if sw = 1 then
        M2 = 1
        else
        goto gato
end if

loro:
if sw = 1 then
       M2 = 0
       else
       goto loro
end if
   
End



SALUDOS desde cd. Juarez
CHihuahua Mexico
Título: Re: rele alternador de bomba
Publicado por: elreypic2 en 09 de Mayo de 2008, 11:38:33
Que tal 16f,

mmmm, en cuanto a la solucion que te ofrece raul_juarez_chichuahua no seria muy correcta. Porque de esa manera cuando el SW genere un 1 puede entrar a cualquier IF y eso no se desea. La mejor manera es que utilices un contador. No se como este configurado tu lecterua de switch, es decir si estes usando un puul-up o un pull-down. Suponiendo que estas usando un pull-down, tu codigo seria algo asi:

INICIO:
Contador = 0
INI:
If SW = 1 then
   IF Contador = 0 then
             HIGH MOTOR1           ;Enciende el motor1
             Contador = Contador + 1
            GOTO       INI
   Endif
  If Contador = 1 then
            LOW MOTOR1             ;Apaga el motor1
           Contador = Contador + 1
          GOTO         INI
  Endif
  If Contador = 2 then
            HIGH    MOTOR2
            Contador = Contador + 1
           GOTO     INI
   Endif
   If Contador = 3 then
          LOW     MOTOR2
          GOTO     INI
   Endif
Endif

Debo hacer la alcaracion que en el codigo no esta considerado los rebotes del switch, por lo que deberas eliminarlos. Saludos y espero que te sirva la solucion.

Elreypic.
Título: Re: rele alternador de bomba
Publicado por: firepic en 09 de Mayo de 2008, 12:37:49
Saludos!  :-)
Bueno no soy tan experimentado como elreypic2.
Pero, en el último if no debería ir un goto inicio en vez de goto ini? Para que el contador sea aclarado y el ciclo pueda volver a repetirse? O sino colocar dentro del último if, después de Low Motor2 un "contador=0"?
Creo que eso falta, si estoy equivocado me dicen...
Ok nos leemos!  :mrgreen:
Título: Re: rele alternador de bomba
Publicado por: elreypic2 en 09 de Mayo de 2008, 12:46:44
Gracias firepic, tienes razon ahi cometi un error. En el ultimo IF el GOTO deberia ir INICIO, es decir sera asi:

INICIO:
Contador = 0
INI:
If SW = 1 then
   IF Contador = 0 then
             HIGH MOTOR1           ;Enciende el motor1
             Contador = Contador + 1
            GOTO       INI
   Endif
  If Contador = 1 then
            LOW MOTOR1             ;Apaga el motor1
           Contador = Contador + 1
          GOTO         INI
  Endif
  If Contador = 2 then
            HIGH    MOTOR2
            Contador = Contador + 1
           GOTO     INI
   Endif
   If Contador = 3 then
          LOW     MOTOR2
          GOTO     INICIO
   Endif
Endif
Título: Re: rele alternador de bomba
Publicado por: firepic en 09 de Mayo de 2008, 12:51:08
Saludos reypic2!
Ah ok, entonces estaba en lo cierto...
Bueno como diría ALF... no hay problema! Cualquiera se equivoquea  :D
Nos leemos!  :mrgreen:
Título: Re: rele alternador de bomba
Publicado por: dogflu66 en 09 de Mayo de 2008, 17:19:04
INI:
   Pause = 3000 'Hace una pausa de 3 segundos
   If SW = 1 then
      If Contador = 3 then
          LOW     MOTOR2
      Endif
       If Contador = 2 then
          HIGH    MOTOR2
      Endif
      If Contador = 1 then
          LOW MOTOR1             ;Apaga el motor1
      Endif
      IF Contador = 0 then
          HIGH MOTOR1           ;Enciende el motor1
      Endif
      contador = contador + 1
      if contador > 3 then contador = 0
   endif
goto ini
End

Asi quedara un poco mejor y los reles no parecerán una orquesta cada vez que se pulsa la tecla.

PD. No conozco la sintaxis del lenguaje, asi que no compilara el programa... :mrgreen:
Título: Re: rele alternador de bomba
Publicado por: firepic en 09 de Mayo de 2008, 17:36:17
Uf! Muchísimo mejor!  :-/
Tienes razón dogflu, de la forma anterior los contactos de los relés estarían continuamente como bailando samba  :D
Ok nos leemos!  :mrgreen:
Título: Re: rele alternador de bomba
Publicado por: RALF2 en 09 de Mayo de 2008, 17:47:51
DE igual forma funcionaria con un select case  :mrgreen:

Saludos
Título: Re: rele alternador de bomba
Publicado por: firepic en 09 de Mayo de 2008, 18:05:03
Bueno todavía mejor pues, qué decir?
Eso evitaría tener que invertir la cosa y colocar 0,1,2,3 (que se ve más elegante) en lugar de 3,2,1,0...
Entonces, modificando el codigo de dogflu, quedaría así Ralph?:

INI:
   Pause = 3000 'Hace una pausa de 3 segundos
   If SW = 1 then
      Select case Contador
          case 0
              HIGH MOTOR1           ;Enciende el motor1
          case 1
              LOW MOTOR1             ;Apaga el motor1               
          case 2
              HIGH MOTOR2
          case 3
              LOW MOTOR2
      End Select
      contador = contador + 1
      if contador > 3 then contador = 0
   Endif
   goto ini

Bueno así se ve más dindo dindo  :D
Se aceptan más mejoras!  :)

Ok nos leemos!  :mrgreen:
Título: Re: rele alternador de bomba
Publicado por: RALF2 en 09 de Mayo de 2008, 18:23:35
Asi es firepic!

Saludos
Título: Re: rele alternador de bomba
Publicado por: dogflu66 en 09 de Mayo de 2008, 18:28:23
Si, asi quedo mas elegante... :D
Título: Re: rele alternador de bomba
Publicado por: 16f en 09 de Mayo de 2008, 20:37:27
hola amigos gracias por los aportes pero es mas menos lo que he hecho. el programa que uds expucieron tiene un problema
que al quedar el sw enganchado recorrera toda secuencia, es efectivo para un pulsador que solo interviene en un segundo.

la idea es que si el sw se activa enviando un 1  el  motor 1 se activa, pero si dejo de precionar deja de funcionar el m1

luego tendremos una nueva secuencia  con el mismo pulsador  pero ahora activando el motor 2

esto se repite     
Título: Re: rele alternador de bomba
Publicado por: dogflu66 en 09 de Mayo de 2008, 20:57:56
INI:
      If Contador = 3 then
         while sw=1
             LOW     MOTOR2
             gosub wait
         wend
         contador = 4
      Endif
       If Contador = 2 then
          while sw=1
              HIGH    MOTOR2
              gosub wait
          wend
          contador = 3
      Endif
      If Contador = 1 then
          while sw=1
              LOW MOTOR1             ;Apaga el motor1
              gosub wait
          wend
          contador = 2
      Endif
      IF Contador = 0 then
          while sw=1
              HIGH MOTOR1           ;Enciende el motor1
              gosub wait
          wend
          contador = 1
      Endif
      if contador >= 4 then contador = 0
goto ini
End
wait:
    pausa 3000
return

Me parece que esto si que lo hace...  :-)
Título: Re: rele alternador de bomba
Publicado por: firepic en 09 de Mayo de 2008, 21:48:13
Saludos!  :-)
Bueno no había visto la respuesta de dogflu, pero por aquí tienes este código... esta vez no utilizo contador, tal vez sea un poco rudimentaria la lógica pero por lo menos el código es más corto.
Lo simulé en proteus y va de lo lindo, allí te dejo el archivo con la simulación y el .bas y .hex para que lo pruebes.

Código: [Seleccionar]
SW      var PORTB.0
motor_1 Var PORTB.1
motor_2 Var PORTB.2

loop:   if SW==0 then
           pause 100
           while SW==0
             HIGH motor_1
           wend
        else
           goto loop
        endif
        LOW motor_1
evalua: if SW==0 then
           pause 100
           while SW==0
             HIGH motor_2
           wend
        else
           goto evalua
        endif
        LOW motor_2
goto loop
END

El switch está simulado por un pulsador NA, conectado de forma tal que al cerrarlo = GND. Lo coloqué así porque es la configuración que más uso, pero si deseas que al presionar sea = 1, entonces simplemente cambia donde dice SW==0 por SW==1...
Los motores están simulados por un par de leds azules.
Por cierto, usé PIC16F84A y frecuencia de trabajo 4MHz solo para probar... como sabrás eso también lo puedes cambiar.

Ok espero te ayude, nos leemos!  :mrgreen:

P.D. Como verás, esto lo hice con pic basic... tu pedías proton, pero es que no manejo ese compilador... :D  aunque creo que no te costará adaptarlo a proton... :mrgreen:
Título: Re: rele alternador de bomba
Publicado por: 16f en 09 de Mayo de 2008, 23:08:56
 firepic  wena wena :-/

muy bien firepic  eso es lo que buscaba, agradecimientos a todos los que  buscaron solucion , nuestro amigo firepic  dio con el clavo.

compilado en proton

Código: [Seleccionar]
DEVICE 16F628A
  XTAL 20
  TRISB = 0
  TRISA = 1
 
  CMCON = 7
  CONT VAR BYTE
  contador var BYTE
  CONTT VAR BYTE
  CONTTa VAR BYTE
  SYMBOL sw1 = PORTA.0
  SYMBOL sw2 = PORTA.1
  SYMBOL sw3 = PORTA.2
  SYMBOL sw4 = PORTA.3
  SYMBOL sw5 = PORTA.4
  SYMBOL SW6 = PORTA.7
  SYMBOL motor1 = PORTB.0
  SYMBOL motor2 = PORTB.1
  SYMBOL led3 = PORTB.2
  SYMBOL led4 = PORTB.3
  SYMBOL led5 = PORTB.4
  SYMBOL led6 = PORTB.5
  SYMBOL led7 = PORTB.6
  SYMBOL led8 = PORTB.7
  CONT = 0
  CONTAdor = 0
  CONTT = 2
  contta = 3
  PORTB = 0


 INI:
 
loop:   IF sw1=0 THEN
           DELAYMS 100
           WHILE sw1=0
             HIGH motor1
           WEND
        ELSE
           GOTO loop
        ENDIF
        LOW motor1
evalua: IF sw1=0 THEN
           DELAYMS 100
           WHILE sw1=0
             HIGH motor2
           WEND
           ELSE
           GOTO evalua
        ENDIF
        LOW motor2
GOTO loop
END
Título: Re: rele alternador de bomba
Publicado por: firepic en 09 de Mayo de 2008, 23:33:08
Me alegra que hayas resuelto tu problemilla 16f!  :-/
Nuevamente cito del maestro nocturno: enhorabuena! (es que suena bien la frase eh  :D )
Ok nos leemos!  :mrgreen: