TODOPIC

Microcontroladores PIC => Primeros pasos - Iniciación a los microcontroladores => Mensaje iniciado por: Vanesa en 23 de Mayo de 2006, 13:44:06

Título: retardo de 1 sg con tmr0
Publicado por: Vanesa 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:
Título: Re: retardo de 1 sg con tmr0
Publicado por: MSK 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
Título: Re: retardo de 1 sg con tmr0
Publicado por: Vanesa 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
Título: Re: retardo de 1 sg con tmr0
Publicado por: MSK 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
Título: Re: retardo de 1 sg con tmr0
Publicado por: JavisusII 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. :?


                  
Título: Re: retardo de 1 sg con tmr0
Publicado por: BrunoF 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
Título: Re: retardo de 1 sg con tmr0
Publicado por: Vanesa 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!
Título: Re: retardo de 1 sg con tmr0
Publicado por: MSK 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