PIC de 8 bits: temporizador1 asíncrono versus operación síncrona

1

La familia de PIC de 8 bits (estoy trabajando con pic18f46k22) ofrece algunos temporizadores (temporizadores 1/3/5) que pueden funcionar en modo asíncrono y síncrono cuando se sincronizan desde una fuente externa.

Las diferencias obvias son:

  1. la operación asíncrona ofrece la posibilidad de que el temporizador se ejecute en modo de suspensión
  2. Una fuente asíncrona puede cronometrar el temporizador más rápido, ya que es independiente del reloj del sistema (tabla 27-12):

y en cuanto a las ventajas de sincronizar la fuente del reloj externo ... bueno, no puedo ver ninguna. Una desventaja a tener en cuenta es la posible corrupción de datos si la CPU intenta leer el contador mientras se incrementa, pero la hoja de datos indica:

  

12.5.1 TEMPORIZADOR DE LECTURA Y ESCRITURA 1/5/5 EN MODO DE CONTADOR ASINCRÓNICO:   La lectura de TMRxH o TMRxL mientras el temporizador se ejecuta desde un reloj asíncrono externo garantizará una lectura válida (cuidada en el hardware).

¿Alguien puede explicar por qué agregó la posibilidad de sincronizar la fuente del reloj externo con los relojes de fase internos? Siento que me estoy perdiendo algo. Muchas gracias

    
pregunta fhlb

3 respuestas

1

Algunas operaciones en el temporizador no funcionan cuando puede cambiar en medio de un ciclo. Este temporizador se usa junto con los módulos CCP también. Lea la sección de la hoja de datos en los módulos CCP y probablemente encontrará restricciones sobre cuándo debe ejecutarse en modo síncrono.

Por ejemplo, la comparación con un valor particular puede ser escasa si el valor del temporizador puede cambiar en medio de la operación de comparación, o puede incrementarse más allá del punto de comparación entre cheques.

    
respondido por el Olin Lathrop
1

Si necesita un temporizador para operar en modo de suspensión, debe configurarse en modo asíncrono, y si el temporizador se configura en modo asíncrono, cualquier cambio cambia su estado bajo el control del procesador (incluido el cambio entre los modos síncrono y asíncrono) que ocurre al mismo tiempo que un pulso entrante puede causar que su estado se corrompa de manera arbitraria.

Si tienes dos temporizadores con capacidad asíncrona, te sugiero que configures uno de ellos para que se ejecute continuamente y nunca hagas nada con él excepto leer su valor. Dichas lecturas deben realizarse leyendo el byte bajo, luego el byte alto, y luego el byte bajo de nuevo. Si el byte bajo cambia entre Los dos leen, repiten el proceso. El otro temporizador se puede configurar para Eventos de despertar, pero con algunas advertencias:

  1. Escriba el byte bajo del temporizador antes de hacer cualquier otra cosa para cambiarlo y leerlo después. Si el byte bajo ha cambiado, asuma que el temporizador podría haberse corrompido arbitrariamente y comenzar de nuevo desde cero.

  2. Encendido al menos en algunas partes, la interrupción del temporizador se produce en el borde del reloj después de un borde del reloj que avanza el temporizador de 0xFFFE a 0xFFFF. Programar el temporizador con un valor de 0xFFFF no causará una interrupción en la primera marca después de dicha acción, sino en la marca 65,537. No sé si hay una manera de configurar el temporizador para que se produzca una interrupción en el siguiente tick.

Al usar estas técnicas juntas, es posible combinar lógicamente los dos temporizadores con capacidad asíncrona para obtener la funcionalidad que estaría disponible en un temporizador con una función de comparación asíncrona.

    
respondido por el supercat
1

el supercat mencionó leer erratas de microchip ... mire la PIC18 (L) F26 / 46K22 Rev. A2 / A4 Silicon Errata y la aclaración de la hoja de datos (este microcontrolador que está usando):

  
  1. Módulo: Timer1 / 3/5
  2.   

Cuando Timer1, Timer3 o Timer5 se operan en el modo de entrada externa asíncrona, puede producirse una generación inesperada de indicadores de interrupción si un borde de reloj externo llega demasiado pronto después de una escritura de firmware en los registros TMRxH: TMRxL. También puede producirse un evento inesperado de indicador de interrupción cuando se habilita el módulo o se cambia del modo Sincrónico al Asíncrono.

     

Solución:

     

Este problema solo se aplica cuando se opera el temporizador en modo asíncrono. Siempre que sea posible, opere el módulo del temporizador en modo Sincrónico para evitar interrupciones espurias del temporizador.

Una búsqueda rápida en google también muestra otros problemas con el modo de temporizador asíncrono con otros microcontroladores (ejemplo: errata-errata pic18f4550 del mecanismo de lectura en buffer y la errata de la familia pic18f97j60) por lo que probablemente es un buen punto para no confiar demasiado en el temporizador asíncrono y agregar las dos líneas adicionales de código para verificar cualquier lectura / escritura. y no olvide el código de muestra provisto en la errata para borrar la generación inesperada de indicadores de interrupción al escribir un temporizador

    
respondido por el Zack

Lea otras preguntas en las etiquetas