Autor Tema: Este sencillo código no cuenta cada segundo exacto, pq?  (Leído 3317 veces)

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

Desconectado Lager.

  • Moderadores
  • PIC18
  • *****
  • Mensajes: 477
RE: Este sencillo código no cuenta cada segundo exacto, pq?
« Respuesta #15 en: 01 de Enero de 2005, 17:45:00 »
Solo aclarando lo ya aclarado,: Esta formula es muy sencilla y te dice exactamente lo que necesitas,:
T. de DESBORDE= (4/Fosc)*(-TMR0)* N
Donde, N es el divisor de frecuencia, Fosc es el Xtal que usas y –TMR0 es  desde donde empiezas.
Ejemplo:
a)Xtal 20 mhz sin D.F.(divisor de frecuencia) con 175 pasos de conteo
(4/20,000000)*(175)*(1) =35 Us, OJO!!!!! Que no cargas ese valor a timer, sino su complemento =  Valor maximo CUANTITATIVO DE TMRX – (-TMRX)
=256-175= 81
por tanto:
set_timer0(81);        ß- esto es lo correcto, no al reves!!!!!!!!!!!!

b)Otro ejemplo
Xtal 4 mhz con 4 de D.F. con 5 pasos de conteo
(4/4,000000)* (5)*(4) =0.02 ms ~~~(256-5) : set_timer0(251)

c)Otro ejemplo
Xtal 4 mhz con 4 de D.F. con 251 pasos de conteo
(4/4,000000)* (251)*(4) =1.004 ms ~~~(256-251) : set_timer0(5)

d)Un  ejemplo mas para deshabilitar TODA interrupcion inesperada ene este post, jejeje.
Xtal 4 mhz con 4 de D.F. con 250 pasos de conteo
(4/4,000000)* (250)*(4) =1 ms ~~~(256-250) : set_timer0(6) <<--


Un abraso panas

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
RE: Este sencillo código no cuenta cada segundo exacto, pq?
« Respuesta #16 en: 02 de Enero de 2005, 05:46:00 »
Si se usa la instrucción de recarga del TMR0, set_rtcc(6), al descomponerse esta instrucción en instrucciones en ensamblador se pierde tiempo, durante el cual no cuenta el TMR0.

Aunque parezca mentira fijaros lo importante que es que no se pierdan microsegundos:

Para un retraso de 10us en 4ms ----> 2,5ms en 1s ----> 150ms en 1minuto ----> 9s en 1h ----> 3,6minutos en 1día ..... sin comentarios.

Un saludo

PD. Usar por ejemplo un cristal de 3,2768MHz, no usar interrupción y no hacer recarga del TMR0 sería la solución

Desconectado Lager.

  • Moderadores
  • PIC18
  • *****
  • Mensajes: 477
RE: Este sencillo código no cuenta cada segundo exacto, pq?
« Respuesta #17 en: 02 de Enero de 2005, 11:35:00 »
Asi es pocher, de hecho para ser precisos, son 2 ciclos de instruccion por cada cargado del Registro, mas lo que añada CADA compilador( epa! loco  ) .

Salu2 panas

Desconectado JonGoten

  • PIC10
  • *
  • Mensajes: 21
RE: Este sencillo código no cuenta cada segundo exacto, pq?
« Respuesta #18 en: 04 de Enero de 2005, 20:19:00 »
Como bien dice pocher he hecho mal los cálculos. En la fórmula es 256 (de 0 a 255) y no 255 como yo ponia.
Eso sumado a la pérdida de instrucciones y al error del oscilador interno, pues es lo que me provocaba ese pequeño error.

De todas formas, no puedo comprobarlo porque ya no dispongo del hardware con el que hacia las pruebas.