Autor Tema: Temporizador de 8h  (Leído 1587 veces)

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

Desconectado rafa_y2k1

  • PIC10
  • *
  • Mensajes: 13
Temporizador de 8h
« en: 02 de Mayo de 2006, 18:10:45 »
Hola a todos !
otra vez yo, el pesado de turno....

sigo con mi proyecto !

tengo que hacer un tren de pulsos a una frecuencia de 10 hz durante 10 min. y luego parar 8 horas.
¿ Para esperar 8 horas para el nuevo tren de pulsos, como es mñas correcto y eficiente hacerlo ?
Yo había pensado en bucles anidados de segundos, minutos y horas. ¿ Es la mejor forma o hay otra más correcta ?
(Estoy programando en PCW C de CCS)

Gracias por las respuestas anteriores, me estaís ayundado mucho en mi proyecto !

Rafa

Desconectado Azicuetano

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1020
    • Aplicaciones Electrónicas en Alicante.
Re: Temporizador de 8h
« Respuesta #1 en: 02 de Mayo de 2006, 20:04:55 »
Hola rafa_y2k1!

Yo tengo implementados retardos de 4 horas en ensamblador y los hago con 3 variables 'segundos', 'minutos' y 'horas'.

Lo hago utilizando la interrupción correpondiente para que mientras se efectua el recuento del tiempo el micro se quede libre para realizar otros menesteres.

La interrupción me salta cada 50 ms. Entonces, cuando me ha saltado 20 veces yo se que tengo un retardo de 1 seg. Así iré incrementando la variable 'segundo' hasta que llegue a 60, entonces incremntaré la variable 'minuto' y así sucesivamente.

No se si es la forma más eficiente de hacerlo pero a mi me funciona muy bien.

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
Re: Temporizador de 8h
« Respuesta #2 en: 03 de Mayo de 2006, 02:14:47 »
El tan buscado, deseado y no hallado poder sobre el tiempo ...

Puedes hacerlo como te indica azicuetano, como si desearas construir un reloj. El problema que haciéndolo así cada vez va retrasando más (¡haciéndolo en C!). Se puede hacer así pero tienes que conseguir el segundo exacto (sin decimales), porque si no llegas habran retrasos. Para ello yo usaba un cristal que lo consiguiese (con 4Mhz no se puede), por ejemplo 32.768khz.

También puedes optar por un relojito I2C que van muy bien.

Un saludo


Desconectado rafa_y2k1

  • PIC10
  • *
  • Mensajes: 13
Re: Temporizador de 8h
« Respuesta #3 en: 03 de Mayo de 2006, 04:52:38 »
Hola,
pues debo conseguir hacer un retardo de 8h y encima con el oscilador interno, ya que no tengo espacio ni para poner un cristal, me explico tengo que hacer un aparato muy pequeño, que se ha de poner de mochila a un conejo, esta mochila debe enviar unos trenes de pulsos a un musculo de la pata delantera, todo esto es para un experimento de una facultat de medicina.

Así que debo conseguir retardos de hasta 8 horas con el oscilador interno, tampoco hace falta precisión de segundos.
Azicuetano, tu podrías pasarme esas funciones que ya tienes implementadas ? Yo las pensaba hacer en C, pero si las tienes en assembler mejor (ocupo menos memoria) (para el micro 12f675)

Una pregunta, por lo poco que he podido leer sobre PIC's, (acabo de empezar a estudiarlos) debo insertar en mi código de retardo la llamada al Watchdog para que no se resetee el micro, lo he hecho dentro de los bubles de tiempo así :
#asm
clrwtd //creo que se escribre así
#endasm

es correcto ?

Gracias !!!!

RAFA

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
Re: Temporizador de 8h
« Respuesta #4 en: 03 de Mayo de 2006, 05:06:09 »
Sí puedes hacerlo así o también con restart_wdt().

Si el programa no es muy extenso y crees que no se va a quedar colgado puedes pasar de resetearlo periodicamente. Entonces simplemente desactiva el FUSE para no utilizar el perro guardian.

Un saludo

Desconectado Azicuetano

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1020
    • Aplicaciones Electrónicas en Alicante.
Re: Temporizador de 8h
« Respuesta #5 en: 04 de Mayo de 2006, 20:04:56 »
Hola rafa_y2k1!

Este código es un programa que una vez reutilicé para hacerle un regalo a mi novia (muchas funciones que hay no sirven para nada pero, por perrería no las quité en su día).

Lo único que te puede servir es el vector de interrupciones.  Dependiendo del valor que pongas en TIEMPOREPITE, VECES_MIN y VECES_2_H conseguirás un retardo u otro. Leete la explicación que viene al principio de las interrupciones que ahí está más o menos explicado.

Perdona por no poder pasarte algo más limpio pero... mañana me voy de viaje a Barcelona y no quería que estubieras varios días esperando mi respuesta.

Te recomiendo inicies las variables (VECES_MIN y VECES_2_H) con unos u otros valores y que en el vector de interrupciones hagas que se enciendan y apaguen leds. Así podras pillar mejor como configurar los retados .

Cualquier duda avisa y cuando venga te lo explico todo mejor.

PD: El programa que te paso símplemente sacaba por un display mensajes que iban cambiando cada 8 o 9 minutos.

http://rapidshare.de/files/19643272/Inma_foro.asm.html


Un saludo desde Alicante.