Autor Tema: Temporizador programable  (Leído 9592 veces)

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

Desconectado Helena

  • PIC10
  • *
  • Mensajes: 30
Re: Temporizador programable
« Respuesta #15 en: 24 de Abril de 2006, 18:31:38 »
Hola Lord,

Muchas gracias por tu ayuda voy a hacer las pruebas y subo el còdigo que tenga que adicionar.

Gracias a todos!


Helena :g) :D






Hola:

Se me olvido algo, puse un led mas en A0 para ver cuando entra al bucle de retardo, ese codigo te puede servir y si necesitas algo mas me dices y te ayudo a hacerlo, pero solo indicaciones... ahora te toca postear codigo a ti   :D

Suerte...!!!  :mrgreen:

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
Re: Temporizador programable
« Respuesta #16 en: 24 de Abril de 2006, 19:09:18 »
Hola:

para eso estamos...  :mrgreen:, espero te sirva

Desconectado Helena

  • PIC10
  • *
  • Mensajes: 30
Re: Temporizador programable
« Respuesta #17 en: 25 de Abril de 2006, 09:44:18 »
Hola chicos,

Anoche estuve estudiando muy bien los còdigos expuestos comienzo entonces con la preguntadera:


led1 var portb.0
led2 var portb.1
led3 var portb.2
boton var portb.3
led4 var portb.7
aviso var porta.0
cont var byte
x var word
i var word

cont=0
i=0
loop:
    if boton=0 then
        cont = cont+1              SUMO 1 UNIDAD AL CONTADOR CADA VEZ QUE SEA INVOCADO
        select case cont           ESTE SI NO LO CONOZCO
            case 1
                high led1
                x=3000
            case 2
                high led2             ESTOS CASE 1,2,3 ME IMAGINO QUE SON LOS RELACIONADOS A INICIO
                x=6000
            case 3
                high led3
                x=9000
        end select
        pause 200 'antirebote
        if cont>3 then                  SI CONT ES MAYOR A 3 PULSOS LLEGA A 3000
            cont=1
            x=3000
            high led1:low led2: low led3
        endif
    endif
    pause 10
    if cont<>0 then                  ESTE NO LO TENGO MUY CLARO
        i=i+1                            VAMOS SUMANDO 1 A LA VARIABLE i
        if i>100 then                 ME EXPLICAN MAYOR 100 A QUE?
            high aviso
            goto inicio
        endif
    endif
    goto loop

inicio:
    for i=x to 0 step -1      ACA RESTAMOS CADA VEZ QUE SE CUMPLEN 5,10 O 15 MINUTOS                 
        pause 100                       
        select case i
            case 6000
                low led3
            case 3000           ACA VOLVEMOS CON LOS CASE PERO NO ENTIENDO PARA QUE SON
                low led2
            case 0
                low led1:high led4
        end select
    next i
end


Como ven es poco lo que he logrado entender el programa pero si tengo muchas ganas de comprenderlo "todo" saben una cosa me gusta mucho esto!.


Besos


Helena :g) :D

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
Re: Temporizador programable
« Respuesta #18 en: 25 de Abril de 2006, 11:26:04 »
Hola:

Aqui te comento lo que hace el codigo:

Código: [Seleccionar]
led1 var portb.0
led2 var portb.1
led3 var portb.2
boton var portb.3
led4 var portb.7
aviso var porta.0
cont var byte
x var word
i var word

cont=0
i=0
loop:
    if boton=0 then         'si el boton es presionado
        cont = cont+1       'incrementamos a un contadot para saber el tiempo de espera
        select case cont    'este de aqui suprime a los IF pregunta por el estado de cont
            case 1          'si es uno se enciende el led 1 y esperará 5 min
                high led1
                x=3000
            case 2          'si es dos se enciende el led 1 y esperará 10 min
                high led2
                x=6000
            case 3         'si es tres se enciende el led 1 y esperará 15 min
                high led3
                x=9000
        end select         'fin del select
        pause 200 'antirebote
        if cont>3 then  'si el contador es mayor que tres apagamos los leds
            cont=1      'y volvemos a asignar 5 min, para que no se exceda en el
            x=3000      'los valores que se quieren
            high led1:low led2: low led3
        endif
    endif
    pause 10
    if cont<>0 then      'este if de aqui es para que si se presionó
        i=i+1            'el boton espere un segundo y salte a la
        if i>100 then    'subrrutina de temporizacion, si no se preciona el
            high aviso   'boton se queda en el bucle loop.
            goto inicio
        endif
    endif
    goto loop

inicio:
    for i=x to 0 step -1  'este es el bucle de retardo, el numero de iteraciones                     
        pause 100         'multiplicado por la pausa de 100 ms, te da el tiempo
        select case i     'total que esperara. EJ x=3000   
            case 6000     '3000*100=300000milisegundos.  300000/1000 = 300 seg
                low led3  '300/60 = 5min
            case 3000     'El bucle no se incrementa sino se decrementa en -1
                low led2  'y preguntamos el valor de i para ir indicando el tiempo
            case 0        'restante apagando los leds. 
                low led1:high led4
        end select
    next i
end

El case es para evitar tener que utilizar multiples IF cuando te refieras a la misma variable, esto es lo que dice la ayuda con respecto al CASE, pero aun no me dices si el codigo te sirvio...  :mrgreen:

Código: [Seleccionar]
SELECT...CASE PRO STD

SELECT CASE var
   CASE expr1 {, expr...}
      statements
   CASE expr2 {, expr...}
      statements
   {CASE ELSE statements}
END SELECT

CASE statements, in some cases, are easier to use than multiple IF.. THENs. These statements are used to compare a variable with different values or ranges of values, and take action based on the value.

The variable used in all of the comparisons is specified in the SELECT CASE statement. Each CASE is followed by the statements to be executed if the CASE is true. IS may be used to specify a comparison other than equal to. If none of the CASEs are true, the statements under the optional CASE ELSE statement are executed. An END SELECT closes the SELECT CASE.

Example

SELECT CASE x
  CASE 1
    y = 10
  CASE 2, 3
    y = 20
  CASE IS > 5
    y = 100
  CASE ELSE
    y = 0
END SELECT

Desconectado Helena

  • PIC10
  • *
  • Mensajes: 30
Re: Temporizador programable
« Respuesta #19 en: 25 de Abril de 2006, 18:07:04 »
Hola Lord,

Upsss, se me habia olvidado decirte que el código es muy bueno y esa era la idea que tenia en mente. Me ha quedado claro la explicacion del codigo pues tenia mis dudillas.

Lo del CASE no lo etendia muy bien pero es una muy buena alternativa para no llenar el codigo de tantos IF.

Bueno, voy a ver que le adiciono y lo comparto para que veas como avanzo... te parece?.


Muchaaaaas gracias a todos!


Helena :g)
« Última modificación: 25 de Abril de 2006, 18:26:49 por LordLafebre »

Desconectado Helena

  • PIC10
  • *
  • Mensajes: 30
Re: Temporizador programable
« Respuesta #20 en: 25 de Abril de 2006, 23:28:11 »
Hola chicos,

Una preguntita, en la variable x donde se almacena temporalmente el tiempo a fijar cuanto sería el tiempo máximo que podria asignar se que tiene un límite pero no se cual es.


Helena :g)

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
Re: Temporizador programable
« Respuesta #21 en: 26 de Abril de 2006, 00:48:49 »
Hola:

esa es una variable de tipo WORD, soporta hasta 65535.

Desconectado Helena

  • PIC10
  • *
  • Mensajes: 30
Re: Temporizador programable
« Respuesta #22 en: 26 de Abril de 2006, 09:41:30 »
Hola Lord,

Gracias por tu ayuda, seguire haciendo algunas preguntillas.


Helena :g)



Hola:

esa es una variable de tipo WORD, soporta hasta 65535.

Desconectado olotill

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 249
Re: Temporizador programable
« Respuesta #23 en: 26 de Abril de 2006, 18:37:33 »
Que tal Helena...

Aun pofundizando un poquito mas en la explicacion de mi compadre Giovanni... vamos a hacer algunos calculos del tiempo maximo que podrias sensar, primero variando el valor de la variable x y luego el valor del delay dentro del lazo for hasta un maximo de 250 ms (que equivaldria a pulsar lentamente el pulsador)..

Si mantienes en el lazo for un delay de 100ms( valor recomendado para detectar la pulsacion del boton)... entonces lo maximo que podria valer x es 65535, lo que al ser multiplicado por los 100 ms de espera de cada iteracion del for nos da 6553500 ms = 6553.5 s = 109,225 min = 1,82h...

Del mismo modo veremos q si varias el pause dentro del for a unos 250 ms como maximo (no recomendado para sensar pulsacion del boton) y con el maximo valor de x, obtendrias... 273 min = 4,55 h...

Pero la verdad esta manera de controlar tiempos no es tan correcta, ni practica tampoco, esta bien para aprender y para talvez como tu haces unos 15 min, pero para otras aplicaciones que neceseciten mayor control de tiempo te recomendaria que uses un RTC (real time clock) o el Timer del micro, o en su defecto algun algoritmo que te contabilize segundos, minutos, horas, etc...

Bueno espero haber ayudado un poco, aunque veo que tu problema esta resuelto.... a proponer otro  :-/
"La imaginación es más importante que el conocimiento"  A. Einstein..

Desconectado Helena

  • PIC10
  • *
  • Mensajes: 30
Re: Temporizador programable
« Respuesta #24 en: 26 de Abril de 2006, 20:39:32 »
Hola olotill,

Respecto de la presicion lo que tu dices no es lo más indicado pero como quiero ir un paso mas adelante ya estoy haciendo el codigo para utilizar segundos, minutos y horas precisamente anoche estuve hasta tarde realizándolo pero como no tengo mucha practica me demoraré un poquito.

Cualquier duda los molesto... ji ji ji  :-/


Besos


Helena :g)
« Última modificación: 27 de Abril de 2006, 00:49:22 por LordLafebre »

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
Re: Temporizador programable
« Respuesta #25 en: 27 de Abril de 2006, 00:44:54 »
Hola:

Helena, solo te pido un pequeño favor, como notaras, he venido editando algunos de tus post... porque se hace un poco incomodo ver nuevamente algo que ya se expuso, me refiero a las citas... por favor hazlo solo cuando quieras citar algo específico... gracias por tu comprension...  :mrgreen:

Desconectado Helena

  • PIC10
  • *
  • Mensajes: 30
Re: Temporizador programable
« Respuesta #26 en: 27 de Abril de 2006, 09:17:20 »
Upps!

Perdon no lo habia tenido en cuenta.


Helena :shock:

Desconectado liminix

  • PIC12
  • **
  • Mensajes: 58
Re: Temporizador programable
« Respuesta #27 en: 06 de Diciembre de 2006, 00:41:49 »
hola vi ese codigo que pusiste lord, aver si me puedes explicar un poco el codigo pero lo que no entiendo muy bien esla parte de inicio osea los retardos,osea que presiono una ves y el valor que toma s es de 3000 no,y el case 6000 ,3000 como es eso
por fa responder si no es mucha molestia

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
Re: Temporizador programable
« Respuesta #28 en: 07 de Diciembre de 2006, 01:08:29 »
Hola:

Lo que hago es utilizar un contador que se incremente cada ves que se presiona el boton, y luego dependiendo del valor del contador, se le da una pausa determinada, por ejemplo si precionas una ves el boton el contador se incrementara en uno, y luego hay una parte que pregunta cuanto es el valor del contador, dependiendo de ese valor entra en un condicional y hace la accion determinada.

Desconectado liminix

  • PIC12
  • **
  • Mensajes: 58
Re: Temporizador programable
« Respuesta #29 en: 17 de Diciembre de 2006, 23:34:30 »
me quedo claro gracias por responder ,lord

aver si me das una manita con dos temas que metienen cabezon uno es conlas memorias eeprom y el otro con pwm