Autor Tema: retardo de 1 sg con tmr0  (Leído 6174 veces)

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

Desconectado Vanesa

  • PIC10
  • *
  • Mensajes: 29
retardo de 1 sg con tmr0
« en: 23 de Mayo de 2006, 13:44:06 »
Hola a todos!!

Alguien sabe como se puede realizar un retardo de un segundo para una interrupción del timer 0?? Es decir, que se desborde cada segundo para que me incremente un contador... Es que con el reloj de 4 Mhz que utilizo y el mayor preescaler (256) como que no llega...


Gracias!! :lol:

Desconectado MSK

  • PIC12
  • **
  • Mensajes: 53
Re: retardo de 1 sg con tmr0
« Respuesta #1 en: 23 de Mayo de 2006, 15:17:20 »
Hola   una forma de lograrlo es con un cristal de 32.768 khz ( de reloj) el presc. a 32, pero tenes un tiempo de inst. algo lento dependiendo la aplicacion que sea
« Última modificación: 23 de Mayo de 2006, 21:47:24 por MSK »

Desconectado Vanesa

  • PIC10
  • *
  • Mensajes: 29
Re: retardo de 1 sg con tmr0
« Respuesta #2 en: 23 de Mayo de 2006, 15:43:29 »
Muchas gracias MSK por tu respuesta. Está claro que con un reloj de menor frecuencia conseguiré un tiempo mayor para generar el retardo pero es que necesito hacerlo con el cristal de 4MHz, aunque me parece que va a ser imposible. Es solo un añadido a un proyectillo que estoy haciendo así que se terminará quedando sin poner y listo, pero me picaba la curiosidad.

Es que también pueden hacerse preescalers o algo así con el wdt pero no sé muy bien como funciona. En fin, rezaré al patrón de los imposibles... jejeje

Desconectado MSK

  • PIC12
  • **
  • Mensajes: 53
Re: retardo de 1 sg con tmr0
« Respuesta #3 en: 23 de Mayo de 2006, 17:47:00 »
Bueno es posible agregando algo mas, por ejemplo que en cada int. del tmr0 incrementas otro contador hasta llegar a la cuenta correspondiente al segundo que buscas pero tambien hay que recargar el tmr0 (131) +125=256      1000000/32 (presc)/125 =250
 cuando el contador este en 250 es 1 seg.  simulalo si es correcto

Desconectado JavisusII

  • PIC12
  • **
  • Mensajes: 79
Re: retardo de 1 sg con tmr0
« Respuesta #4 en: 23 de Mayo de 2006, 17:51:08 »
Buenas,

Hombre está claro que para realizar un RTC lo mejor es un cristal de 32768 Hz por ser facilmente divisible por potencias
de 2. Ejemplo 2e15=32768.

Por lo tanto si dividimos la frecuencia por 2e15(32768) tenemos el requerido herzio.

A ver 4Mhz , tenemos internamente 1Mhz si se trata del oscilador principal :
  si dividimos por 256 --> 1000000/256=3906,25 Hz ,en fin ya véis que tenemos decimales.
  
Si contamos con el TMR0 3906 pulsos, es decir: (es lo mismo)
         - Multiplicamos el período por 3906
  o     - Dividimos la frecuencxia por 3906

tendremos 0,999936 s  en fin casi un segundo,  con un pequeño retraso. :?


                  
Xavi (Barcelona)

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: retardo de 1 sg con tmr0
« Respuesta #5 en: 23 de Mayo de 2006, 20:01:11 »
Obviamente es posible hacer que cuente 1 segundo exacto(bueno, con mucha precision) en 4 mhz, pero deberias calcular muy bien los tiempos que le lleva hacer cada subrutina, pero como ser posible, lo es.
Saludos
« Última modificación: 23 de Mayo de 2006, 20:06:53 por BrunoF »
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado Vanesa

  • PIC10
  • *
  • Mensajes: 29
Re: retardo de 1 sg con tmr0
« Respuesta #6 en: 24 de Mayo de 2006, 08:27:42 »
Muchas gracias a todos por vuestra ayuda. Al final lo hemos hecho con un contador adicional como decía MSK y seguro que no da el segundo exacto (los microsegundos de retraso andarán por ahí) pero va bastante bien.

Gracias!

Desconectado MSK

  • PIC12
  • **
  • Mensajes: 53
Re: retardo de 1 sg con tmr0
« Respuesta #7 en: 24 de Mayo de 2006, 12:55:51 »
Hola si el problema es que cuando se carga el tmr0 se borra el prescaler, entonces te da 3.990 cada int. los 10us se pierden al borrar el prescaler, con el 2 contador a 251 mejora el error creo