TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: danith72 en 03 de Febrero de 2011, 14:02:52

Título: Duda con el Timer0
Publicado por: danith72 en 03 de Febrero de 2011, 14:02:52
Buenas a todo el mundo! :o
Tengo la siguiente duda con la configuracion del timer0 en el siguiente código de programa: (Mi XTAL es de 20MHZ, PIC16F876A)

   setup_wdt(WDT_18MS);
   set_timer0(60);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_8);                                      // Init the TIMER0;
   enable_interrupts(INT_TIMER0);
   enable_interrupts(GLOBAL);

Como podéis ver se carga el timer0 con valor 60, y luego aparece: "setup_timer0 (RTCC_INTERNAL|RTCC_DIV_8)", ¿esto quiere decir que la interrupción saltará  a los 313,6us, no?
¿RTCC_DIV_8 significa prescalar=8?¿RTCC_INTERNAL se refiere a que utilizo el timer0 como temporizador?
He realizado las siguientes cuentas:

1/20Mhz= 0.05us

0.05us*4=0.2us

Así pues:

256-60=196
192*0.2=39.2us
Dado que Preescalar =8, esto implica:39.2us*8=313.6us

¿Una vez que se desborada el timer y salta la interrupción, el timer cuenta desde 0?¿Porque habilita la interrupcion del timer0 y luego las globales? Leo mucho pero son dudas que me quedan sueltas. Graciiaaaaaaaaaaaaaaaassssssssss :o :o

PD. Estoy iniciandome en los microcontroladores
Título: Re: Duda con el Timer0
Publicado por: Suky en 03 de Febrero de 2011, 14:17:31
Hola! Las respuestas seria, si, si, si.... je! Muchas de las dudas las podes solventar leyendo la ayuda del compilador (F12), allí se explica cada parámetro de las funciones. Luego para entender el funcionamiento del microcontrolador tienes el datasheet del mismo  ;-)

Por aquí tienes una idea de como funcionan las interrupciones (http://www.todopic.com.ar/foros/index.php?topic=24720.msg201405#msg201405), y el porqué de habilitar independientemente las interrupciones globales y la del timer.

Y aquí como funciona el timer (http://www.todopic.com.ar/foros/index.php?topic=24720.msg201406#msg201406), el micro es otro pero en los 16F sigue siendo lo mismo para todos  ;-)


Saludos!
Título: Re: Duda con el Timer0
Publicado por: danith72 en 04 de Febrero de 2011, 06:22:55
Muchas gracias Suky!
Leere lo que me dices y si tengo alguna duda lo consulto!1

Graciass!  :)
Título: Re: Duda con el Timer0
Publicado por: danith72 en 07 de Febrero de 2011, 14:56:40
¿En qué momento empieza a contar el Timer0? ¿cuando cargo el valor?

set_timer0(60);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_8);    //aqui empieza a contar el timer0??
Título: Re: Duda con el Timer0
Publicado por: jeremylf en 07 de Febrero de 2011, 15:08:37
Si mi deducion no me falla.. pues si, comienza a contar ni bien cargas el valor. Aun que preferentemente yo (y lo hago asi) configuraria primero el timer (setup_...) y despues cargo el valor y despues habilito la interrupcion. Pero si quierees q te avisa cuando desborde el mismo deberas habilitar su interrupcion definida y la global.
Título: Re: Duda con el Timer0
Publicado por: Suky en 07 de Febrero de 2011, 20:43:13
En realidad el timer0 de los PIC16 no detienen su cuenta nunca, solo que al cambiar alguna configuración tiene un retraso de 2 instrucciones y continua la cuenta. Podes hacer el debug en MPLAB utilizando CCS en él.


Saludos!
Título: Re: Duda con el Timer0
Publicado por: danith72 en 09 de Febrero de 2011, 05:29:50
Muchas gracias!! Probaré co nel MPLAB