TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: Skualo en 16 de Agosto de 2008, 15:34:25
-
Ajustando TIMER0 para conseguir un segundo.
Por Jóse Modulay del Foro Todopic
Esas mates...
Con un cristal de 4 MHz tienes un periodo de reloj de 1/4 MHz = 0.25 us
Como cada ciclo máquina son 4 ciclos de reloj, tienes un ciclo máquina de 0.25 us * 4 = 1 us.
Es decir, el timer se incrementa en una unidad cada microsegundo.
La idea es buscar que el timer interrumpa cada cierto tiempo x,y que ese tiempo x sea divisor exacto de 1 segundo, por ejemplo 25 us, 100 us, 2 ms, 10 ms, etc...
Además de esto, habrá que usar una variable contador que se irá incrementando cada vez que el timer se desborde, comprobando su valor cada vez que esto sucede y así llevar el control del tiempo transcurrido.
La fórmula, medida en segundos, que determina el periodo de desbordamiento de un timer de 8 bits (timer 0) es:
T = (256 - precarga) * Preescaler * 4 / Fosc
Si fijamos el Preescaler a 16...
T = (256 - precarga) * 16 * 4 / 4 MHz
=> precarga = 256 - T * 62500
T es la base de tiempos que andamos buscando y precarga es el valor que se le carga al timer tras cada interrupción para que vuelva a empezar a contar a partir de él.
Se trata de buscar un valor para T que sea divisor de 1 segundo y que al multiplicarlo por 62500 el resultado sea un número entero.
Por ejemplo 4 ms:
precarga = 256 - 4 ms * 62500 = 256 - 250 = 6
O sea, para conseguir la base de tiempos de 4 ms tendrás que cargar al timer con el valor 6 (con Preescaler establecido a 16).
Hecho esto, para temporizar un segundo tendrás que contar:
1 s / 4 ms = 250 interrupciones
Hola lo siento tener que preguntar esto pero llevo dandole vueltas 30 minutos buscando informacion incluso y no para mas mi cerebro no consigo averiguar la parte que esta en rojo el 62500 como al multiplicar 16*4/4Mhz puede dar 62500 me va a explotar la cabeza y necesito saber como es eso porque es que me a dejado una duda de esas que no te puedes quitar de la cabeza aver si me lo resolveis por favor y lo siento porque seguro que sale de ai pero no lo veo.
SAludos :P
-
Al realizar las operaciones para despejar "precarga" y dejarla sola a un lado del igual...de ahí sale la expresión de la segunda línea en rojo : precarga = 256 - T * 62500
-
Hola Skualo:
62500 sale de dividir 1segundo=1000000 por 16
Saludos
Fermin
-
1sg.=1.000.000 microsegundos
-
Muchisimas gracias a los dos :)
Saludos