Autor Tema: Duda con Manejo de TMR0  (Leído 2701 veces)

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

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Duda con Manejo de TMR0
« en: 31 de Marzo de 2009, 19:58:33 »
saludos a todos, resulta q estoy un poco confundido con el manejor del TMR0, tengo unos apuntes en donde para calcular el valor a cargar en el TMR0 se toma en cuenta la Frecuencia del XT y otro apunte donde no se toma en cuenta la Frecuencia de XT, entonces les pongo un ejemplo para generar dosmilisegundos y luego pongo las dudas:

prescaler rate

bit value    TMR0 RATE
000--------1:2
001--------1:4
010--------1:8
011--------1:16
100--------1:32
101--------1:64
110--------1:128
111--------1:256

Precarga TMR0= 255 - #incrementos TMR0

Tms=(#incrementos * Rate)/1000                             donde Tms=tiempo en milisegundo
#incrementos=(2 * 1000)/8                                                 #=numero  :D
#incrementos=250                                                              *=multiplicacion

Precarga TMR0= 255 - 250
Precarga TMR0= 5

para generar dosmilosegundos entonces

dosmili    movlw .5
              movwf TMR0
no          btfss intcon,2
              goto no
              bcf intcon,2
              return

ahora tambien tengo unos apuentes donde para calcular el tiempo tenemos en cuenta la frecuencia de XT

Tiempo=(4*TMR0*RATE)/Fosc

entonces estoy confundido porque para el primer caso no tenemos en cuenta en la ecuacioncita la Fosc, para la segunda Si.
ademas ¿q pasa si uso un XT=20MHZ en el primer caso?

yo se q ambas ecuaciones me van a llevar al mismo resultado, pero entonces ¿la primera es unicamente para un XT=4MHZ?


« Última modificación: 31 de Marzo de 2009, 20:17:31 por jhozate »
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Duda con Manejo de TMR0
« Respuesta #1 en: 01 de Abril de 2009, 09:38:23 »
Para el calculo del tiempo, sea por timer o por bucle siempre hay que tener en cuenta la frecuencia. Seguramente en el primero da por descontado que la frec. es de 4mhz.
No tienes que estar testeando el TOIF constantemente porque el timer al desbordarse provoca una interrupcion y te envia el programa a ORG 0X04 y de ahi ya haces lo que quieras. Precisamente esta es su mayor ventaja no tener que estar pendiente de el.

saludos tapi8

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Duda con Manejo de TMR0
« Respuesta #2 en: 01 de Abril de 2009, 12:42:54 »
Se debe tener en cuenta la frecuencia del oscilador, porque lo que hace el Timer en modo temporizador es contar ciclos de instruccion del microcontrolador, ademas se puede agregrar un preescaler para contar cada 2, cada 4, etc. Aquí se explica esto.
No contesto mensajes privados, las consultas en el foro

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: Duda con Manejo de TMR0
« Respuesta #3 en: 01 de Abril de 2009, 13:19:28 »
muchas gracias por la aclararion  tapi8 :-),
suky tengo una duda en tu post,  textualmente dice "Para calcular una temporización se necesita el tiempo de un ciclo de instrucción (es decir 1 microsegundo, si estas trabajando con un XT de 4 Mhz), el valor del Divisor de Frecuencia (el que seleccionabas con los bits PS2, PS1 y PS0), y finalmente el complemento del valor cargado en TMR0 (es decir 255-TMR0). Entonces tenemos: Temporización = Ciclo de instrucción. (256-TMR0) .Divisor de Frecuencia
De este modo si queremos temporizar 4 ms con un divisor de frecuencia de 32, tendríamos:
TMR0=256-[4000uS/(1uS*32)]

porque el "256", el TMR0 va de 0 a 255? por ejemplo en mi ecuacion se toma el valor del TMR0 como 255 , en tu ecuacion se toma el numero real de incrementos del TMR0 es decir 256?


Vemos que la máxima temporización posible es con TMR0 = 0, y Divisor de Frecuencia en 256, lográndose unos 65.5 ms aprox.
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Duda con Manejo de TMR0
« Respuesta #4 en: 01 de Abril de 2009, 13:23:05 »
Exacto, pero cuando ponemos TMR0=0, se cuentan 256 ciclos de instrucción, como esta en la ecuación.
No contesto mensajes privados, las consultas en el foro

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: Duda con Manejo de TMR0
« Respuesta #5 en: 01 de Abril de 2009, 13:25:55 »
son mas exactas las demoras q son hechas por ciclo de instruccion q las q son hechas con el TMR0?
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: Duda con Manejo de TMR0
« Respuesta #6 en: 01 de Abril de 2009, 13:42:19 »
La exactitud es la misma ya que los pulsos los domina el mismo clock. La ventaja de hacer una demora con el timer, es q se autoincrementa, entonces tu programa puede seguir ejecutando y cuando el timer desborde larga la interrupcion. En cambio si la demora la haces en el programa principal, vas a tener al procesador ocupado incrementando un contador o algo asi.
saludos!

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein