Autor Tema: Contar pulsos con el TMR1. Aplicación en velocímetros, relojes etc  (Leído 7429 veces)

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

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
Os dejo el fuente en C, el .hex y el .dsn para la simulación en PROTEUS.

El tema se desarrolló AQUÍ

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 17895
    • MicroPIC
Re: Contar pulsos con el TMR1. Aplicación en velocímetros, relojes etc
« Respuesta #1 en: 20 de Octubre de 2007, 03:09:23 »
Una pregunta y una sugerencia, gran Pocher.

¿No crees que la inicialización de la precarga del timer debería ser lo primero que se hace tras comprobar que estás en la centésima interrupción?. Es que lo pones después de varios cálculos y printf que comen bastantes ciclos de reloj, y puede que te esté distorsionando las medidas.
Creo que si va justo detrás del if y luego haces los cálculos y los printf, no habrá error ni diferencias entre la centésima interrupción y el resto.

La sugerencia es la siguiente: si utilizas 4MHz (1MIPS), puedes poner un prescaler de 8 (125KIPS) y una precarga de 131, para que las interrupciones salten cada 125 ticks del reloj, o sea, cada milisegundo. De esta manera conseguirás el segundo exacto y sin decimales.
Un saludo desde Sevilla, España.
Visita MicroPIC                                                                                        ɔ!doɹɔ!ɯ ɐʇ!s!ʌ

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
Re: Contar pulsos con el TMR1. Aplicación en velocímetros, relojes etc
« Respuesta #2 en: 20 de Octubre de 2007, 05:08:43 »
Hola Manolo, tú sí que eres grande. ¿No sé de donde sacas tiempo para ayudar a tanta gente?

Te comento lo que yo pienso respecto a tu pregunta. Si meto la pata corregirme, estoy un mucho desentrenado en esto de los PICs.

A mi modo de ver el meter la precarga del TMR1 justo detrás del if o hacerlo al final daría igual pués de lo que se trata es de contar los pulsos que llegan en 1s a partir de hacer la precarga del TMR0 que debe de ir irremediablemente unida a la precarga del TMR1.

La sugerencia que me haces es muy buena, ya no recordaba que con esos valores (Prescaler=8, TMR0=131 y fosc=4MHz) también se consigue un número exacto trabajando con 4MHz. Aquí lo que pasa es que habría que entrar en la interrupción 1000 veces (1000·1ms=1s) y el hecho de entrar en una interrupción también resta tiempo. Para hacer un reloj posiblemente (casi seguro) que atrasaría, pero para el caso que nos ocupa de contar pulsos si la frecuencia no es muy elevada creo (casi seguro) que funcionaría bien y sería una mejora del programa. Lo probaré.

Agradezco tus comentarios Manolin, perdona por la confianza pero te conozco en el FORO desde hace tanto tiempo ...

Desconectado Trev_11

  • PIC10
  • *
  • Mensajes: 44
Re: Contar pulsos con el TMR1. Aplicación en velocímetros, relojes etc
« Respuesta #3 en: 22 de Octubre de 2007, 08:37:54 »
Gracias Pocher quedo de pelos te agradezco nuevamente :-/ :-/ salu2

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
Re: Contar pulsos con el TMR1. Aplicación en velocímetros, relojes etc
« Respuesta #4 en: 22 de Octubre de 2007, 13:26:55 »
De nada Trev_11.

Manolo, con 1ms no funcionaría ya que como te comentaba habría que entrar en la interrupción 1000 veces (1000·1ms=1s) y el hecho de entrar en una rutina de interrupción también resta tiempo dando lugar después de entrar 1000 veces a que el TMR1 cuente varios pulsos de más (5 ó 6, comprobado con el simulador) dando lugar a una medida totalmente incorrecta.

Con 8ms támpoco habrían decimales (Preescaler=64, TMR0=131, fosc=4 MHz) y aquí solo habría que entrar en la interrupción 125 veces. Está claro, resumiendo que cuanto mayor es la temporización menos veces tenemos que entrar y menor error se comete en el contaje de los pulsos.

Un saludo

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 17895
    • MicroPIC
Re: Contar pulsos con el TMR1. Aplicación en velocímetros, relojes etc
« Respuesta #5 en: 22 de Octubre de 2007, 14:28:56 »
No acabo de entender que se pierdan pulsos, pero si lo has comprobado, me rindo ante la evidencia.
Un saludo desde Sevilla, España.
Visita MicroPIC                                                                                        ɔ!doɹɔ!ɯ ɐʇ!s!ʌ

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
Re: Contar pulsos con el TMR1. Aplicación en velocímetros, relojes etc
« Respuesta #6 en: 22 de Octubre de 2007, 14:42:25 »
No, no se pierden pulsos, sino que al durar más de 1s debido a entrar 1000 veces en la interrupción se marcan mas pulsos de los que tendrían que ser.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 17895
    • MicroPIC
Re: Contar pulsos con el TMR1. Aplicación en velocímetros, relojes etc
« Respuesta #7 en: 22 de Octubre de 2007, 15:58:44 »
Ah, ahora lo pillo. Los ciclos que se gastan desde que se lanza la interrupción hasta que se establece la precarga del timer acumulan un error que se hace patente tras 1000 ejecuciones.
Habría que cuantificarlo para tenerlo en cuenta en la precarga.
Claro, eso se minimiza con tu truco de prescaler=64
Un saludo desde Sevilla, España.
Visita MicroPIC                                                                                        ɔ!doɹɔ!ɯ ɐʇ!s!ʌ


 

anything