Autor Tema: 1 segundo con timer0 y cristal 20mhz  (Leído 7151 veces)

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

Desconectado huichoman

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 186
    • Pequeñas piezas para grandes proyectos.
1 segundo con timer0 y cristal 20mhz
« 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.

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: 1 segundo con timer0 y cristal 20mhz
« Respuesta #1 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.

Desconectado huichoman

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 186
    • Pequeñas piezas para grandes proyectos.
Re: 1 segundo con timer0 y cristal 20mhz
« Respuesta #2 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
 






Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: 1 segundo con timer0 y cristal 20mhz
« Respuesta #3 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.

Desconectado Simon21

  • PIC18
  • ****
  • Mensajes: 302
Re: 1 segundo con timer0 y cristal 20mhz
« Respuesta #4 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

INGENIERIA ELECTRONICA
UNIVERSIDAD TECNOLOGICA NACIONAL

Desconectado willynovi

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 546
Re: 1 segundo con timer0 y cristal 20mhz
« Respuesta #5 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.
Intento enseñarte a pescar, si solo quieres pescados, espera que un pescador te regale los suyos.

Desconectado Simon21

  • PIC18
  • ****
  • Mensajes: 302
Re: 1 segundo con timer0 y cristal 20mhz
« Respuesta #6 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
INGENIERIA ELECTRONICA
UNIVERSIDAD TECNOLOGICA NACIONAL


 

anything