Escribir en el contador del temporizador mientras el temporizador está funcionando

2

Estoy usando PIC16F1947 para un proyecto. El proyecto requiere un seguimiento en tiempo real para que un cristal estable de 32768 Hz esté conectado con el oscilador Timer1. El circuito del oscilador Timer1 y el cristal proporcionarán un reloj estable para nuestro proyecto.

El temporizador 1 solo puede proporcionar interrupción cuando el contador del temporizador se desborda. Es un contador de 16 bits, por lo que se dará una interrupción cada vez que el contador se desplace a 0x0000 desde 0xFFFF.

Dado que el temporizador se utilizará para mantener el tiempo desde el principio hasta el final del producto, Timer1 no se puede detener. Además, debe ejecutarse mientras el procesador está inactivo. Así que necesitamos usarlo en modo asíncrono.

En nuestro proyecto también necesitamos interrupciones cada 0.5 segundos. Así que planeamos inicializar el contador Timer1 a 0xC000 y luego iniciarlo. Cada vez que se dará una interrupción, planeamos bit a bit o 0xC0 para el byte alto del registro.

Según la hoja de datos:

  

Leyendo TMR1H o TMR1L mientras el temporizador   se está ejecutando desde un externo   reloj asíncrono asegurará una válida   leer (cuidado en hardware).   Sin embargo, el usuario debe tener en cuenta   que leer el temporizador de 16 bits en dos   Los valores de 8 bits en sí, plantea ciertos   problemas, ya que el temporizador puede desbordar   entre las lecturas.

     

Para las escrituras, es   recomienda que el usuario simplemente se detenga   el temporizador y escriba el deseado   valores. Puede producirse una disputa de escritura   escribiendo a los registros del temporizador,   mientras que el registro se está incrementando.   Esto puede producir un impredecible.   valor en el registro TMR1H: TMR1L   par.

¿Está bien en modo bit a bit O 0xC0 con el byte alto mientras el temporizador está funcionando? ¿O deberíamos usar otro temporizador para una interrupción de 0,5 segundos?

Gracias.

    
pregunta Donotalo

1 respuesta

2

En los PIC con dos temporizadores de 32 KHz (TMR1 y TMR3), mi recomendación sería usar uno de los temporizadores 'ejecución libre' (nunca escribir en él) y usar el otro para generar eventos de activación. Si solo tiene un temporizador disponible, conseguir una operación confiable sin errores acumulativos será muy difícil. Las diferentes revisiones de partes tienen diferentes comportamientos cuando se trata de escribir el temporizador 1, por lo que una revisión futura podría romper un enfoque que funcionaría con una revisión. Lo que hubiera sido bueno hubiera sido si Microchip hubiera permitido que el temporizador cambiara entre los modos sincrónico y asíncrono sin perder una cuenta (simple de hacer: en lugar de usar un multiplexor para cambiar entre el modo sincrónico y el modo asíncrono, agregue el conjunto asíncrono / claro al sincronizando el pestillo, y cuando esté en modo asíncrono use esos para forzar a la salida a seguir la entrada). Ninguna de sus partes está, por lo que sé, documentada como tal cosa. Por consiguiente, espero que el cambio entre el modo síncrono y el modo asíncrono pueda ganar o perder un conteo al azar.

    
respondido por el supercat

Lea otras preguntas en las etiquetas