Autor Tema: Dudas sobre timer1 y CCP en comparador en 16F627A  (Leído 3054 veces)

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

Desconectado bluesboy

  • PIC12
  • **
  • Mensajes: 89
Dudas sobre timer1 y CCP en comparador en 16F627A
« en: 17 de Diciembre de 2016, 14:18:47 »
Buenas Comunidad.
Tengo un par de dudas. Intentaré ser breve.

Quiero hacer un reloj, preciso, pero muy preciso; radiocontrolado para sincronizarlo con el reloj atómico de mi país.
Pero no se sincroniza permanentemente asi que....
Necesito su ayuda para saber sobre la base de tiempo.

El timer1 se puede vincular con el módulo CCP en modo comparador, de manera que cuando coincida el valor de los registros del timer con los del comparador dispare una interrupción y resetee el timer.
Pregunta, ¿se pierde algún ciclo de clock en la operatoria de generar la INT, y resetear el timer?
A ver si me puedo explicar mejor, el timer llega, pogamos por poner a al valor 01FF, que coincide con el del comparador, ¿mientras se resetea el timer se pierde algún ciclo de clok o vuelve a 0000 de inmediato sin perder ningún ciclo y sigue contando?

Para saber si tengo que tener en cuenta esa demora o no.

Entiendo que temperatura y diseño y etc varios pueden variar la precisión, pero quiero hacer lo que esté a mi alcance para lograr lo mejor.

Esto es por un hobby nomas. No lo arranqué antes porque pensaba en usar solo el timer o rutinas de demora y en los dos casos el código del reloj metía demoras, pero en este caso, tal vez sea  mejor usar el comparador.

Uds dirán. Gracias.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Dudas sobre timer1 y CCP en comparador en 16F627A
« Respuesta #1 en: 17 de Diciembre de 2016, 14:41:21 »
La exactitud va a depender mas que nada del cristal u oscilador que le pongas. Todo lo demas sigue ese "reloj".

Pero por que usar un PIC solo ¿? cuando podes poner un integrado RTCC ( Real-Time Clock Calendar ) en el cual como su nombre lo dice tenes TODO, no necesitas tener en cuenta los dias, etc, una ves cargado con el valor inicial, ya luego depende del cristal. Ademas poseen entrada para bateria, lo cual te ahorra todo el circuito que deberias hacer con el PIC para un caso de falta de energia.

Citar
El timer1 se puede vincular con el módulo CCP en modo comparador, de manera que cuando coincida el valor de los registros del timer con los del comparador dispare una interrupción y resetee el timer.
Pregunta, ¿se pierde algún ciclo de clock en la operatoria de generar la INT, y resetear el timer?

No se pierde ningun ciclo, en realidad para entrar a la interrupcion le toma entre 3 o 4 ciclos de instruccion, el tema es que esos 3 o 4 tambien los tenes en la proxima interrupcion, Pero como tenes intervalos iguales de interrupcion, no producen gran problema, ya que como mucho todas las interrupciones estarian desfasados unos 10 ciclos de instruccion respecto al flanco del reloj.
En si los intervalos van a seguir siendo perfectos, tal ves el unico problema que puedas tener es si necesitas modificar una salida segun los pulsos contados, que como nombre antes tendrias algun delay entre un flanco y el otro. Dependiendo del PIC esto puede ser incluso menor, ejemplo un PIC con guardado automatico del contexto te ahorra muchas mas instrucciones, aun asi no te salvas de ese "delay" de unos cuantos ciclos.

Va a depender para que lo quieras usar.

Desconectado bluesboy

  • PIC12
  • **
  • Mensajes: 89
Re:Dudas sobre timer1 y CCP en comparador en 16F627A
« Respuesta #2 en: 17 de Diciembre de 2016, 15:31:31 »
Hola Killerjc, gracias por responder.

Pensé en los RTCC, pero no quería meterme con el I2C y no quería incluir otro integrado. Pero, si, lo voy a tener que estudiar.
Gracias por la info.

Atte.

Desconectado colotron

  • PIC12
  • **
  • Mensajes: 73
    • Canal de YouTube
Re:Dudas sobre timer1 y CCP en comparador en 16F627A
« Respuesta #3 en: 17 de Diciembre de 2016, 18:38:24 »
...

El timer1 se puede vincular con el módulo CCP en modo comparador, de manera que cuando coincida el valor de los registros del timer con los del comparador dispare una interrupción y resetee el timer.
Pregunta, ¿se pierde algún ciclo de clock en la operatoria de generar la INT, y resetear el timer?

Pregunta general: de donde estás sacando la señal de reloj para el timer1?, si es del fosc (oscilador principal) vamos mal, si es de un cristal de +/-5ppm conectado a T1OSO/T1OSI vamos mejor.
Digo esto porque fosc no es muy preciso, los cristales externos de 4/8/12/20.. MHz normalmente tienen unas cuantas decenas de ppm de error, comparado con un cristal que viene específicamente para tener un tiempo preciso, que justamente son los de 32768Hz.

Creería que el módulo CCP resetea automáticamente el timer1 sin ninguna intervención de software, es decir, el retardo en el reseteo sería de nanosegundos.

A ver la hoja de datos: http://ww1.microchip.com/downloads/en/DeviceDoc/40044F.pdf

Sección 7.5: ccp1 configurado en modo comparación para generar un special event trigger...
Notar esto que es importante:
Citar
If Timer1 is running in Asynchronous Counter mode, this Reset operation may not work.
Entonces habrá que habilitar el flag sync para el timer1...

Sección 9.2.4:
Citar
The special event trigger output of the CCP occurs immediately upon a match between the TMR1H, TMR1L register pair and CCPR1H, CCPR1L register pair. The TMR1H, TMR1L register pair is not reset until the next rising edge of the TMR1 clock. This allows the CCPR1 register pair to effectively be a 16-bit programmable period register for Timer1.

En base a eso diría que debe poderse hacer el reset de ltimer1 usando el special event trigger para resetear la cuenta por hardware, sin intervención de software (que tiene más retardo a su vez más difícil de predecir).

A ver si me puedo explicar mejor, el timer llega, pogamos por poner a al valor 01FF, que coincide con el del comparador, ¿mientras se resetea el timer se pierde algún ciclo de clok o vuelve a 0000 de inmediato sin perder ningún ciclo y sigue contando?

Para saber si tengo que tener en cuenta esa demora o no.

Si lo hacés funcionar por hardware esa demora debería ser despreciable, a no ser que te moleste hasta 1 microsegundo de error sistemático (por el hecho de usar el flag sync para asegurar que el reset por hardware funcione).

Entiendo que temperatura y diseño y etc varios pueden variar la precisión, pero quiero hacer lo que esté a mi alcance para lograr lo mejor.

Esto es por un hobby nomas. No lo arranqué antes porque pensaba en usar solo el timer o rutinas de demora y en los dos casos el código del reloj metía demoras, pero en este caso, tal vez sea  mejor usar el comparador.

Uds dirán. Gracias.

Seguro, lo mejor es configurar para que funcione todo por hardware, en el software solo hacer la configuración inicial de los módulos, y alguna función para leer la cuenta del timer.
Y que la fuente del reloj para el timer1 sea la apropiada (cristal de 32768 Hz con menos de 10 ppm en T1OSI/OSO).

Saludos.


 

anything