Autor Tema: Duda matematica  (Leído 1858 veces)

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

Desconectado Skualo

  • PIC10
  • *
  • Mensajes: 42
Duda matematica
« 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

Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
Re: Duda matematica
« Respuesta #1 en: 16 de Agosto de 2008, 15:40:58 »
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

Desconectado Fer_TACA

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4069
Re: Duda matematica
« Respuesta #2 en: 16 de Agosto de 2008, 15:51:28 »
Hola Skualo:

62500 sale de dividir 1segundo=1000000 por 16

Saludos
Fermin
Todos los días se aprende algo nuevo.

Desconectado Fer_TACA

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4069
Re: Duda matematica
« Respuesta #3 en: 16 de Agosto de 2008, 15:53:12 »
1sg.=1.000.000 microsegundos
Todos los días se aprende algo nuevo.

Desconectado Skualo

  • PIC10
  • *
  • Mensajes: 42
Re: Duda matematica
« Respuesta #4 en: 16 de Agosto de 2008, 16:41:17 »
Muchisimas gracias a los dos  :)

Saludos


 

anything