Autor Tema: Temporizador  (Leído 2944 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado J1M

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1960
Temporizador
« en: 18 de Septiembre de 2004, 09:48:00 »
Hola!

Estoy tratando de hacer un temporizador, le doy el valor de la hora de encendido, y la hora de apagado, y debe estar encendido ese periodo... y la verdad esq no se como hacerlo ya que:

si T.on es: 8.00 y T.off 22.00 aki sería facil ya que el segundo número es mayor que el primero, pero en el caso de que keramos que esté funcionando de 22.00 a 8.00 la cosa cambia, y no se por donde engancharlo!!

Como solucionar el problema?


Gracias!

Desconectado cucaracha

  • PIC24H
  • ******
  • Mensajes: 1409
    • CUCAWEB
RE: Temporizador
« Respuesta #1 en: 18 de Septiembre de 2004, 10:39:00 »
Pero cuál es el problema?? No entiendo donde te quedastes...
Difícil ayudarte con los datos que das de como lo estás haciendo, ninguno vamos...
Es que no entiendo. Supongo que tendrás implementado un reloj que es el que luego comparas, supongo. Pues crea un registro que será el que se compare. Primero ese registro llevará el inicio y una vez coincida cambiará al de finalización. Así con lo que das es lo que se me ocurre...

Saludos!!
Saludos desde Huelva (ESPAÑA)

Desconectado kruskal

  • PIC16
  • ***
  • Mensajes: 108
RE: Temporizador
« Respuesta #2 en: 18 de Septiembre de 2004, 10:40:00 »
Por curiosidad estas usando un reloj de tiempo real (RTC) para mantener la hora?, si no es asi te recomendaria que usaras uno son baratos y muy faciles de manejar.

Con un reloj de 24 horas habria que separar el horario a comparar. Seria los mayores o iguales a 22:00 cumplen la condicion o los menores a 8:00.
En lenguaje C

if (reloj>=22:00 || reloj<=08:00)
variable=1;
else
variable=0;

consultando el estado de variable se determina si se esta dentro del periodo temporizado o no.

Espero haber contribuido en algo  con tu problema.

Salud2


Desconectado J1M

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1960
RE: Temporizador
« Respuesta #3 en: 18 de Septiembre de 2004, 14:38:00 »
cucaracha... sip la verdad es que no he explicado nada

Es lo que ha dixo kruskal ...

Tengo un ds1307 que me da la hora, y quiero programar una salida, para que esté activa en el intervalo de tiempo que le indique, por ejemplo, activa desde las 22.00 hasta las 9.00 la salida X, y parece que me ha dado kruskal la solución, era mas sencillo que por las ramas que yo estaba yendome :P

Muchas Gracias por la ayuda

pd: no estoy seguro.. pro no seria?:
if (reloj>=22:00 && reloj<=08:00)
variable=1;
else
variable=0;

Desconectado kruskal

  • PIC16
  • ***
  • Mensajes: 108
RE: Temporizador
« Respuesta #4 en: 18 de Septiembre de 2004, 20:38:00 »
La funcion logica es una "OR" (||), o esta en ese intervalo o en el otro, no una "AND" (&& como escribiste es erroneo, como el "reloj" va a ser al mismo tiempo mayor que 22 y menor a 8, nunca se cumpliria esa condicion.
Podiras hacer una funcion para llamarla cuando sea necesario.

byte reloj(void)
{
byte variable;
if (reloj>=22:00 || reloj<=08:00)
{
 variable=1;
}
else
{
variable=0;
}
return (variable);
}

Desconectado J1M

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1960
RE: Temporizador
« Respuesta #5 en: 05 de Octubre de 2004, 14:55:00 »
Pienso que estamos confundidos, te explico:

sigamos con el ejemplo de que T.ON son las 22.00, y T.OFF son las 8.00

Leemos la variable hora, y obtenemos que son las 9.00, por lo que la salida estaría a 0 (OFF).

Utilizando la función lógica OR tenemos que la primera condicion (reloj >= 22.00) no se cumple, la segunda condición (reloj <= 8.00) tampoco se cumple, por lo que, en efecto la salida estaría a 0 (OFF)

Ahora bien, cambiamos el T.ON a 8.00 y el T.OFF a 9.00, reloj ahora es 10.00 ... la primera condicion se cumple, puesto que reloj es mayor que 8.00, la segunda no se cumple, ya que es mayor, pero puesto que estamos usando una OR, como se cumple la primera la salida estaría activa, y en este caso habría un error, aquí si que habría que usar la función logica &&, para tenerlo dentro del intervalo.

Resumiendo... Cuando T.ON > T.OFF se usa ||

si T.ON < T.OFF se usa &&


Por lo que reescribiendo el codigo, en pseudocodigo, y si no me equivoco quedaría de la siguiente forma:

Codigo:

byte temporizador(void)
{
byte salida;
if (T.ON > T.OFF)
     {
     if (reloj>=T.ON || reloj<=T.OFF)
          {
          salida=1;
          }
     else
          {
          variable=0;
          }
     }
else if (T.ON < T.OFF)
     {
     if (reloj>=T.ON && reloj<=T.OFF)
          {
          salida=1;
          }
     else
          {
          variable=0;
          }
     }
return (variable);



Salu2!

Desconectado J1M

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1960
RE: Temporizador
« Respuesta #6 en: 05 de Octubre de 2004, 14:58:00 »
Creo que se me ha ido el kiko
leyendo todas las respuestas creo q el problema estaba ya resuelto antes... weno da = .. asi está explicado entero por si alguien lo necesita ... ejejej :P