TODOPIC

Microcontroladores PIC => Primeros pasos - Iniciación a los microcontroladores => Mensaje iniciado por: Archangels en 22 de Junio de 2013, 11:53:18

Título: Ayuda con los timer
Publicado por: Archangels en 22 de Junio de 2013, 11:53:18
Estoy empezando con un 18f4550 y el programa ccs, ya tengo conectadas algunas cositas que molan (lcd y sensor de ultrasonidos) jajaja pero mi problema es que no entiendo los timer incluso me he descargado un programa para calcularlos para ver si los entiendo como funcionan pero se ve que soy de cabeza dura jaja.

A ver si alguien puede hecharme una mano a entender como van.

Por ejemplo
20Mhz con un timer de 16bits y prescaler 1:1 hace 1 tick cada 0,2us(me lo dice el programa), he intentado hacer la mayoria de calculos para sacar 0,2 pero no lo consigo, como se llega a ese valor ?

Y luego si hago get_timer1(); el valor que me devuelve en que es expresado ? en us ?

Necesito entenderlo para calcular bien la distancia con el sensor de ultrasonidos, ya que ahora me da unos valores rarisimos jaja

Un saludo y espero su respuesta.
Título: Re: Ayuda con los timer
Publicado por: AngelGris en 22 de Junio de 2013, 15:37:16

A ver si alguien puede hecharme una mano a entender como van.

Por ejemplo
20Mhz con un timer de 16bits y prescaler 1:1 hace 1 tick cada 0,2us(me lo dice el programa), he intentado hacer la mayoria de calculos para sacar 0,2 pero no lo consigo, como se llega a ese valor ?


  Esos 200ns o 0.2us surgen de hacer 4/20MHz e indica el tiempo de instrucción. Ten en cuenta que en los PIC -creo que en todos pero no podría asegurarlo- la frecuencia de instrucción es la cuarta parte de la frecuencia de trabajo.

  Ejemplo, si tu pic trabaja a 20MHz --> frecuencia de instrucción = 5MHz --> tiempo de instrucción = 1/5MHz = 200ns



Y luego si hago get_timer1(); el valor que me devuelve en que es expresado ? en us ?

Necesito entenderlo para calcular bien la distancia con el sensor de ultrasonidos, ya que ahora me da unos valores rarisimos jaja

Un saludo y espero su respuesta.

  El valor que te devuelve no es otra cosa que el numero de ciclos de instrucción que ha contado.

  Si tienes el prescaler a 1:1 quiere decir que el timer se incrementará una vez por cada ciclo de instrucción. Si el valor devuelto por get_timer1() es 20 significa que contó 20 ciclos de instrucción. Sabiendo cuanto dura cada ciclo de instrucción y haciendo la cuenta... valor del timer * ciclo de instrucción = tiempo transcurrido

  Ejemplo.... valor timer1 = 35, tiempo de instrucción 200ns --> tiempo transcurrido = 35 * 200ns --> tiempo = 7us
Título: Re: Ayuda con los timer
Publicado por: Archangels en 23 de Junio de 2013, 20:22:35
Hola buenas, vale ya lo voy entendiendo, por ultimo una pregunta, como dije antes  utilizo el 18f4550 tengo un cristal de 20MHz y de clock le tengo declarado 48MHz por las operaciones con el USB, entonces para el timer uno que contaria 48Mhz o los 20Mhz ?

Por cierto yo el prescaler le tengo a 1:8 pero eso ya se que tienen que pasar 8 ciclos de instruccion para que el valor aumente en 1 :) ¿ No me equivoco verdad ?

Muchas gracias por tu explicacion, ahora entiendo porque me daban esos valores tan extravagantes al hacer los calculos jajaja
Título: Re: Ayuda con los timer
Publicado por: MerLiNz en 23 de Junio de 2013, 22:25:25
Son 48mhz/4=12Mhz

Eso es lo que se incrementa cada 83.333ns

Si tienes un preescaler de 1:8 pues: 12mhz/8=1,5Mhz o bien cada 666.67ns