Autor Tema: duda con timer0  (Leído 1986 veces)

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

Desconectado Marttyn

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1835
    • IDEAA
duda con timer0
« en: 04 de Abril de 2007, 17:30:39 »
hola!
tengo el timer0 con prescaler de 16, con lo que un rtcc se produce cada 4.096mS
yo quiero que ocurra cada 4mS exactos, por eso le resto 6 ticks de reloj.
ahora mi duda... tengo que poner set_timer0(X) para empezar a contar por X... si quiero restarle 6 ticks, tengo que poner 5 en X, no? debido a que empezamos a contar desde 0...
y cuando quiero saber por que tick va el timer0 recurro a get_timer0()... el reultado que me da tengo que restarle 5 o 6 para obtener el valor real de ticks que ha contado timer 0?
siempre me lio con esto de empezar a contar desde 0!!!
salu2 y gracias!
La gente ve las cosas que existen y se pregunta por qué.
Yo prefiero imaginar lo que no existe y preguntarme por qué no.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: duda con timer0
« Respuesta #1 en: 04 de Abril de 2007, 18:34:01 »
hola!
tengo el timer0 con prescaler de 16, con lo que un rtcc se produce cada 4.096mS
yo quiero que ocurra cada 4mS exactos, por eso le resto 6 ticks de reloj.
ahora mi duda... tengo que poner set_timer0(X) para empezar a contar por X... si quiero restarle 6 ticks, tengo que poner 5 en X, no? debido a que empezamos a contar desde 0...
y cuando quiero saber por que tick va el timer0 recurro a get_timer0()... el reultado que me da tengo que restarle 5 o 6 para obtener el valor real de ticks que ha contado timer 0?
siempre me lio con esto de empezar a contar desde 0!!!
salu2 y gracias!

Mira, lo de los mseg exactos en C, depende mucho de cómo compile el C la rutina de interrupción (cuantas instrucciones tenga).  Y esto también depende si usas un pic 16F o 18f.

Lo mejor es tantear a mano cual te da el valor justo, probandolo con el simulador MPSIM que anda muy bien para estas cuestiones.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado Marttyn

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1835
    • IDEAA
Re: duda con timer0
« Respuesta #2 en: 05 de Abril de 2007, 00:57:58 »
ok, dije exactos, pero no creo que por una demora de algunos uS pueda haber un problema. es para manejar un servo.
lo que me interesa de esto es entender si tengo que setear el timer a 6 o a 5...
y cuando quiero saber cuanto tiempo paso si tengo que restarle 6 o 5...
solo para saber como hacerlo bien en TEORIA
yo creo que para que cuente 4mS tengo que setearlo a 5, y si quiero saber cuantos ticks van tengo que restarle 6. pero la verdad que me llio un poco y no estoy seguro. alguien me lo puede confirmar?
lo que dices de que las rtcc dependen del micro, de las instrucciones de la interrupcion y del compilador es muy interesante, sobre todo para tener en cuenta cuando quiera hacer algo mas preciso que lo que hago ahora. tienes mas informacion sobre esto? tambien me gustaria saber algo mas del mpsim, que hasta ahora no habia escuchado nada sobre el... y el manual que encontre en internet tiene unas 200 paginas  :?
salu2 y gracias por la ayuda!  :)
La gente ve las cosas que existen y se pregunta por qué.
Yo prefiero imaginar lo que no existe y preguntarme por qué no.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: duda con timer0
« Respuesta #3 en: 05 de Abril de 2007, 10:32:47 »
solo para saber como hacerlo bien en TEORIA
yo creo que para que cuente 4mS tengo que setearlo a 5, y si quiero saber cuantos ticks van tengo que restarle 6. pero la verdad que me llio un poco y no estoy seguro. alguien me lo puede confirmar?

Si dices qué micro usas y que clock usas ....

lo que dices de que las rtcc dependen del micro, de las instrucciones de la interrupcion y del compilador es muy interesante, sobre todo para tener en cuenta cuando quiera hacer algo mas preciso que lo que hago ahora. tienes mas informacion sobre esto?

¿Información sobre esto? pero es que depende de cada compilador y de cada programa que hagas y de cada código que se genere.  Incluso usando siempre el mismo compilador depende de qué opciones de optimizacion setees o que cosas quieras grabar/recuperar en la rutina de interrupción.

El flag se va a setear siempre al tiempo marcado, pero el problema es que no lo vas a atender igual de rápido si usas assembler que si usas C18 o CCS o mikroc o Basic.



tambien me gustaria saber algo mas del mpsim, que hasta ahora no habia escuchado nada sobre el... y el manual que encontre en internet tiene unas 200 paginas  :?

La página de Microchip con su manual y su foro, son la fuente de información mas precisa sobre el uso del MPSIM.
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado Marttyn

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1835
    • IDEAA
Re: duda con timer0
« Respuesta #4 en: 05 de Abril de 2007, 11:19:37 »
el micro es cualquiera con un timer de 8bits... osea todos.
el oscilador es de 4mhz. es decir que tengo un tic cada 1uS, con prescaler de 16 el tick es de 16uS = 0.016mS
0.16mS * 250 = 4mS ---> osea que tengo que contar de 0 a 249, o de ¿5? a 255?
y cuando quiero saber cuanto tiempo transcurrio miro los ticks que pasaron y los multiplico por 16us... pero como el timer empezo en ¿5? tengo que restarle ¿6? ticks?
salu2
La gente ve las cosas que existen y se pregunta por qué.
Yo prefiero imaginar lo que no existe y preguntarme por qué no.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: duda con timer0
« Respuesta #5 en: 05 de Abril de 2007, 17:44:58 »
Inicias en el 6.  Cuando sea 7, transcurrio 1 ciclo de 16useg.

Cuando sea 8, transcurrieron 2 ciclos de 16 useg.

Cuando sea 255, es porque transcurrieron 249 ciclos.

Cuando sea 256 -> que se hace 0 y enciende el Flag -> transcurrieron 250 ciclos de 16 useg.


Saludos



- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)


 

anything