Autor Tema: Ayuda con TMR0 en lenguaje C  (Leído 7190 veces)

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

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Ayuda con TMR0 en lenguaje C
« en: 30 de Noviembre de 2009, 14:06:52 »
Hola compañeros de correrias estoy empezando con el lenguaje C y tengo una duda con el TMR0 que no entiendo:

Para generar una señal de 1KHz se necesita un semiperiodo de 500us segun la ecuacion, utilizando un cristal de 4MHz y un prescaler de 2:

 T=Tcm·Prescaler·(256-CargaTMR0)
 
  500us = (4/4000000)·2·(256-x)  donde x = 6 Hasta aqui lo tengo claro.

Luego sigo leyendo el texto y me dice:
Pero esta relacion solo se cumple si se trabaja en ASM. Al trabajar en C, el compilador genera lineas de codigo que aumentan el tiempo de ejecucion del programa y, por ello, es necesario ajustar el valor final. En este caso se ha utilizado un valor de carga de 29 (0x1D).
Mi duda: Como calculo este valor.
Gracias.

Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Ayuda con TMR0 en lenguaje C
« Respuesta #1 en: 30 de Noviembre de 2009, 14:21:30 »
mmm... es medio complicado, porque depende de cuantas interrupciones manejes, el microcontrolador que utilices, ect. La única manera de ver (Que sepa yo :mrgreen:) es en el debug de Proteus, donde presionando CTRL + D, se puede visualizar el asm del código desarrollado en C. A partir de allí se puede estimar cuanto demora el gurdado de contexto.

Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Re: Ayuda con TMR0 en lenguaje C
« Respuesta #2 en: 30 de Noviembre de 2009, 18:17:05 »
Gracias Suky por tu respuesta, voy a probar de la manera que dices ya que en ASM me defiendo mejor, y creo que no tendre problemas para contar los ciclos de cada instruccion.
 
 Saludos y gracias de nuevo.
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Ayuda con TMR0 en lenguaje C
« Respuesta #3 en: 30 de Noviembre de 2009, 18:22:30 »
Hola, la otra opción es usar un osciloscopio y agregar o quitar bits al tmr0 jeje

Yo tengo una tarjeta de muestreo de 22kHz con periodo de 45.45us, pero los tiempos duraban 47us. Tuve que estar reprogramando el pic y midiendo con el osciloscopio hasta que le atiné a los 45.45us  ;-)

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: Ayuda con TMR0 en lenguaje C
« Respuesta #4 en: 30 de Noviembre de 2009, 18:26:05 »
si se requiere ser mas exactos, no se puede implementar la rutina del timer en asm?
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Ayuda con TMR0 en lenguaje C
« Respuesta #5 en: 30 de Noviembre de 2009, 18:34:06 »
si se requiere ser mas exactos, no se puede implementar la rutina del timer en asm?

Hola Jhozate, sí se puede pero lo que retrasa el tiempo es la rutina que no vemos en C que es la que hace una copia de seguridad de W, STATUS, memoria scratch de C (si es que así se llama) y demás registros que hay que proteger cuando se atiende una interrupción.

También hay una forma de atender la interrupción en CCS sin que se haga la copia de seguridad pero no recuerdo con qué directivas se hace.

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: Ayuda con TMR0 en lenguaje C
« Respuesta #6 en: 30 de Noviembre de 2009, 19:28:00 »
sino estoy mal...en proteus hay una herramienta q permite mostrar la frecuencia de alguna entrada de pulsos, (counter timer,que alguien me diga si estoy equivocado) para los no poseemos osciloscopio, qué tan fiable seria esa herramienta?..asi se podrian pobrar distintos ajustes del timer sin reprogramar el micro
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Ayuda con TMR0 en lenguaje C
« Respuesta #7 en: 30 de Noviembre de 2009, 23:18:15 »
sino estoy mal...en proteus hay una herramienta q permite mostrar la frecuencia de alguna entrada de pulsos, (counter timer,que alguien me diga si estoy equivocado) para los no poseemos osciloscopio, qué tan fiable seria esa herramienta?..asi se podrian pobrar distintos ajustes del timer sin reprogramar el micro

El counter timer no me parece nada preciso, porque cuenta la cantidad de pulsos en un segundo, y eso trae mucho error dependiendo de la frecuencia. Yo creo que ya establecidas todas las interrupciones que se van a trabajar en el proyecto, lo mejor es controlar como dice MigSantiago  :undecided:

Sino utilizar el Timer2, o el timer1 junto al módulo CCP en modo comparador evento especial, creo que se tiene mayor precisión.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Re: Ayuda con TMR0 en lenguaje C
« Respuesta #8 en: 01 de Diciembre de 2009, 05:21:39 »
Gracias a todos por vuestra ayuda.
  :-/ :-/ :-/
Miquel_S
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Re: Ayuda con TMR0 en lenguaje C
« Respuesta #9 en: 01 de Diciembre de 2009, 12:31:22 »
Hola, la otra opción es usar un osciloscopio y agregar o quitar bits al tmr0 jeje

Yo tengo una tarjeta de muestreo de 22kHz con periodo de 45.45us, pero los tiempos duraban 47us. Tuve que estar reprogramando el pic y midiendo con el osciloscopio hasta que le atiné a los 45.45us  ;-)

Exactamente es lo que tambien hago jeje  :mrgreen:.
Pero para encontrar los valores a cargar en los timers uso el programa  Pic Timer Calculator by redraven, luego busco el valor a cargar en los timer experimentando con el osciloscopio de proteus.
Saludos.
A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Ayuda con TMR0 en lenguaje C
« Respuesta #10 en: 01 de Diciembre de 2009, 12:43:21 »
Pero para encontrar los valores a cargar en los timers uso el programa  Pic Timer Calculator by redraven...

Y yo uso el ConfigPIC  :mrgreen: Que tiene la herramienta de calcular temporizaciones.

Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: Ayuda con TMR0 en lenguaje C
« Respuesta #11 en: 01 de Diciembre de 2009, 14:26:39 »
estan muy buenas las dos aplicaciones...yo tambien uso un programita sencillo...pero estos me han gustados mas..aunque siempre me gusta tener presente la formulita tipica
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Ayuda con TMR0 en lenguaje C
« Respuesta #12 en: 01 de Diciembre de 2009, 16:11:51 »
 :mrgreen:

Yo uso mi calculadora

 :mrgreen:

Pero siempre verifico la frecuencia de salida con un frecuencimetro, ya que a mayor uso de interrupciones mayor es el error en la frecuencia de salida.
El papel lo aguanta todo

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Ayuda con TMR0 en lenguaje C
« Respuesta #13 en: 01 de Diciembre de 2009, 18:23:04 »
:mrgreen:

Yo uso mi calculadora

 :mrgreen:

Pero siempre verifico la frecuencia de salida con un frecuencimetro, ya que a mayor uso de interrupciones mayor es el error en la frecuencia de salida.

jeje yo también  :mrgreen: nada como el papel y lápiz :D

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Re: Ayuda con TMR0 en lenguaje C
« Respuesta #14 en: 02 de Diciembre de 2009, 19:01:40 »
Gracias por los programas compañeros.
Miquel_S
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.