TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: huichoman en 13 de Enero de 2012, 23:02:49

Título: 1 segundo con timer0 y cristal 20mhz
Publicado por: huichoman en 13 de Enero de 2012, 23:02:49
Hola, quisiera saber si mis cálculos y código son correctos

Para cristal de 20mhz, preescaler de 256 a 8 bits

FOSC=1/20 = 0.05
timer0 = 256-176 = 80  (seteado en 176 a timer0)

Interrupcion = 0.05*4*80*256 = 4.096 ms

1 segundo ->  1000/4.096 =244.14   

Entonces 1 segundo = 244 * 4.096 =999.424 ms


Para configurar el timer

Código: [Seleccionar]
setup_timer_0(RTCC_DIV_256 | RTCC_8_BIT);
 set_timer0(176);
 enable_interrupts(INT_RTCC);
 enable_interrupts(GLOBAL);


Para contar los segundos
Código: [Seleccionar]
#INT_RTCC                                   
clock_isr() {                               

      ++ticks;
      if(ticks==244)
      {
      ++seg;
      ticks=0;
      }
}


Gracias por la ayuda, consejos y sugerencias.
Título: Re: 1 segundo con timer0 y cristal 20mhz
Publicado por: MerLiNz en 14 de Enero de 2012, 02:53:45
la frecuencia de un pic de 8bits es fosc/4, osea 20mhz=5mhz o MIPS

prescaler /256=19531,25Hz

1/19531,25=51,2us cada incremento

si lo pones cada 97 seria casi 5ms osea setearlo a 159

1segundo = 200*5ms

Tambien ojo que el timer0 es distinto a los demas timers, leete el datasheet ya que tiene algunos retardos al setearlo y tal.
Título: Re: 1 segundo con timer0 y cristal 20mhz
Publicado por: huichoman en 14 de Enero de 2012, 18:31:49
Hole MerLinz, según lo que he investigado en el foro, FOSC = (1/Frecuencia del cristal) *4)
Entonces si uso un cristal de 20 mhz, quedaría FOSC = (1/20)*4  que es lo mismo que 4/20 = 0.2

El timero 0 configurado a 8 bits contaría hasta 256  entonces quedaría Incremento = 0.2 * 256 = 51.2

Y si le colocamos un preescaler de 256 al final quedaría Incremento = 51.2*256 = 13 107.2 us = 13.1072 ms

Si le damos nombres a las variables:

FC = Frecuencia del cristal
BT= Bits del timer (8 bits = 256)
PRE = Preescaler
ST = Set del timer

En mi caso

FC = 20  (cristal de 20 mhz)
BT = 256
PRE= 256
ST= 176


Entonces  Incremento del timer = (4/20)*(256-176)(256) = 4096 us = 4.096 ms

1 segundo = 1000 ms  entonces 1000/4.096 = 244.1

Entonces 1 segundo = 244 incrementos del timer porque 244*4.096ms = 999.4 ms

Espero que alguien que sepa muy bien del tema pueda ayudarnos a aclarar si esto está bien.

Saludos
 





Título: Re: 1 segundo con timer0 y cristal 20mhz
Publicado por: MerLiNz en 14 de Enero de 2012, 19:10:22
si, las matematicas tiene muchos caminos eso esta claro  :mrgreen: pero intenta poner que significa cada cosa (us,hz,mhz,ms....) porque sino a veces confunde xD

unicamente te decia poner 5ms porque es un valor mas exacto (sin decimales) ademas de tener mas tiempo entre interrupcion e interrupcion.
Título: Re: 1 segundo con timer0 y cristal 20mhz
Publicado por: Simon21 en 05 de Enero de 2013, 16:40:43
Como hacemos para setearlo a 0.5 segundos o 1 segundos con un cristal de 20 MHz y el timer1 ??

Actualmente tengo funcionando con un cristal de 4 MHz y cargandole 3036 me desborda a los 0.5
segundos, pero ahora necesito ponerle un cristal de 20 MHz y no se como hacer para contar los
segundos, ya que deberia hacer interrupciones cada 100 ms y es muy impratico que el micro entre
en la interrupcion cada tan poco tiempo, es al vicio desde mi punto de vista.

Saludos y gracias

Título: Re: 1 segundo con timer0 y cristal 20mhz
Publicado por: willynovi en 05 de Enero de 2013, 18:56:40
Te doy algunos datos para que pruebes  ;-)

4mhz -> 3036 -> 0,5mseg
20mhz -> 12500 -> 0,5mseg

Supongo que 3036 es el valor que cargas en el timer de 16bits.

Con mismo prescaler y dejando la configuración actual del timer, con el cristal de 20mhz el tiempo de interrupción tendría que ser 5 veces mas corto.
Título: Re: 1 segundo con timer0 y cristal 20mhz
Publicado por: Simon21 en 05 de Enero de 2013, 19:10:54
En realidad puse mal el título del tema porque lo que estoy utilizando es el timer1, con un pre escaler de 8, cargandole el 3036 desborda el mismo al cabo de los 0,5 seg.
Quiero seguir utilizando el mismo timer pero con una frecuencia de 20 MHz, lo cual es la duda que tengo actualmente de como hacerlo.

Gracias por tu respuesta