Autor Tema: uso del timer para pic 18F452  (Leído 2284 veces)

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

Desconectado juanjuan19

  • PIC16
  • ***
  • Mensajes: 120
uso del timer para pic 18F452
« en: 13 de Agosto de 2015, 19:09:59 »
hola gente, voy a empezar a hacer un retardo de un segundo, con el timer 0 o el timer 1, en CCS C Compiler, con el pic 18F452, estaba acostumbrado a hacer la clasica formula, esa que tiene el (256-Valor a cargar), pero me estoy enterando leyendo el data del pic, que este es un pic de 16 bits, y no de 8, alguno tendra algun ejemplo ????? abrazos!!!

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: uso del timer para pic 18F452
« Respuesta #1 en: 13 de Agosto de 2015, 19:38:34 »
Ejemplos de timer para CCS podes encontrar en la web (google: Timer1 CCS), asi como tambien en el manual de CCS encontrar las funciones (google: CCS manual).

El timer0 creo que por defecto en todos los PICs vienen de 8 bits. Pero el timer1 es de 16bits en esos.

Aca entra el otro tema. Que usar para generar el segundo. Tenes la aplicacion basica que es el Timer1, es decir cargarle un valor ( complemento a 2 del numero a contar ), y contar la cantidad de interrupciones si es que no llega a con las interrupciones. En eso tenes que reiniciar el timer1 y volver a cargar el valor. Lo "normal"

Por otro lado podes usar el modulo CCP ( imagino que por ser PIC18 lo trae) y ese modulo funcionando como Compare te permite cargar el valor comun y no el complemento en los registros del CCP y solo poner a 0 el timer1. Luego cuando se produce la interrupcion el modulo CCP se encarga solo de poner a 0 el TMR1, es decir no tenes que hacer nada, solo contar las interrupciones.

Que valor cargar?
Usemos internet de nuevo, google: PIC timer calculator
http://eng-serve.com/pic/pic_timer.html

El codigo que da es para XC8 (pero podes ver que registros se configuran al menos), pero lo que nos interesa es el valor a cargar. Con un cristal de 8Mhz, preescaler de 1/8
Si cargas 3036 en el timer1 vas a tener tu interrupcion cada 0.25s (4 veces), con un cristal de 4Mhz 0.5s (2 veces), a 16Mhz 0.125s (8 veces), 20Mhz 0.1s (10 veces) Y asi en adelante. Es el valor que logra que sea bastante divisible por 1s, otro valor no logra eso.
Es decir contaria: 62500  ( 2^16 - 3036 )

Ahora si usas el modulo CCP
Cargas 62500 en los registros de ese modulo.
Lo pones como Compare y que resetee el Timer1.
Pones a 0 el Timer1.
Y activas interrupciones.

Cuando el Timer1 llegue a 62500 y coincida con lo cargado en el modulo CCP, es decir cuente 62500 (la misma cantidad de antes) se va a producir la interrupcion. Y va a poner al TMR1 en 0 nuevamente por hardware, asi cuenta de vuelta los otros 62500. Sin necesidad de tu interaccion.
« Última modificación: 13 de Agosto de 2015, 19:44:59 por KILLERJC »