¿Cómo puedo usar el temporizador de vigilancia en el modo de interrupción?

0

Estoy usando atmega168 con avr-libc. Ahora, para formar un bucle de control de una duración fija, necesito una, digamos una interrupción de 1 segundo. Al ser cronometrado desde un reloj de 8 MHz, la única fuente de reloj útil parece ser el oscilador de vigilancia de 128 kHz.

La hoja de datos (página 49) sugiere que esto es posible:

  

En el modo de interrupción, el WDT produce una interrupción cuando el temporizador expira. Esta interrupción puede ser utilizada.   para activar el dispositivo desde los modos de suspensión, y también como un temporizador general del sistema.

Sin embargo, la referencia de la biblioteca no menciona los modos de operación. ¿Y ahora qué?

    
pregunta Vorac

3 respuestas

2

El oscilador de vigilancia es muy inexacto, y si miras la hoja de datos verás que su frecuencia varía entre 111 y 121kHz dependiendo de la temperatura y la tensión de alimentación.

Entonces, mientras que podría configurar WDIE e implementar WDT_vect , es mucho mejor usar un temporizador para esto. Especialmente si está usando un reloj de cristal o externo con más precisión que el oscilador RC interno.

    
respondido por el Ignacio Vazquez-Abrams
2

Si desea una interrupción cada 1 segundo con un reloj de 8Mhz, probablemente la mejor manera es usar un Timer1 en modo CTC con un precaller apropiado y un valor TOP.

Al usar el preescalador clk / 1024, reduce la velocidad del contador a 8 KHz desde 8 MHz. Seleccionas este prescaller con estos bits ...

AlusarelmodoCTC,ledicesalcontadorquesereiniciecadavezquelleguealTOP.Acontinuación,puedeseleccionarelmodoCTCconestosbits...

Finalmente,necesitamosestablecerelvalorTOPparaquecoincidaen1Hz.EstaeslafórmulaparacalcularlafrecuenciageneradaenelmodoCTC...

...dondeNeselpreclasificador(1024ennuestrocaso)yFclk_I/OeselrelojIO(8Mhzennuestrocaso).Tengaencuentaqueestafórmulanosdalafrecuenciadeunaondacuadradaqueseemitirásielpincambiaencadacoincidencia,porloqueenrealidadqueremosduplicarelvalorparaobtenerlatasadecoincidencia.Parahaceresto,podemossimplementemultiplicarpor2(otacharlos2eneldenominador).

Despuésdeunpocodeálgebra,deberíamos(deberíamos)obtenerunvalorparaTOPde7999.Estotienesentidointuitivo,yaquesenecesitauncicloderelojparaqueelcontadorsereiniciedespuésdellegaratope,asíquesiempezamosenceroycontamoshasta7,999Reloj,necesitaremosunomásparavolveralpuntodepartida.

EnelmodoCTCqueseleccionamosanteriormente,TOPsemantieneenelregistroOCR1A,porloqueestablecemosesteregistroen7999.

Timer1ahoradispararáunpartidoa1Hz.

Finalmente,solonecesitamoshabilitarunarutinadeinterrupciónparaqueseejecuteencadacoincidencia.LainterrupciónescontroladaporelbitOCIE1A...

Una vez que configuramos este bit, se debe llamar a nuestro ISP a exactamente 1Hz (dependiendo de la precisión del reloj de 8Mhz desde el que se ejecuta el chip).

    
respondido por el bigjosh
0

Citado de tu adjunto

"Bit 6 - WDIE: habilitación de interrupción de watchdog

Cuando este bit se escribe en uno y se establece el bit I en el registro de estado, se habilita la interrupción de vigilancia. Si se borra WDE en combinación con esta configuración, el temporizador de vigilancia está en modo de interrupción, y se ejecuta la interrupción correspondiente si se produce un tiempo de espera en el temporizador de vigilancia. Si se configura WDE, el temporizador de vigilancia está en modo de interrupción y reinicio del sistema. El primer tiempo de espera en el temporizador de vigilancia establecerá WDIF. La ejecución del vector de interrupción correspondiente borrará WDIE y WDIF automáticamente por hardware (el regulador pasa al modo de reinicio del sistema). Esto es útil para mantener la seguridad del temporizador de vigilancia mientras se usa la interrupción. Para permanecer en modo de interrupción y reinicio del sistema, WDIE debe configurarse después de cada interrupción. Sin embargo, esto no debe hacerse dentro de la rutina de servicio de interrupción, ya que esto podría comprometer la función de seguridad del modo de reinicio del sistema de vigilancia. Si la interrupción no se ejecuta antes del siguiente tiempo de espera, se reiniciará el sistema. ser aplicado "

Tiene toda la información para que usted configure el watchdog para que funcione en el modo de temporizador escribiendo la configuración correcta en el registro WDTCSR.

La Tabla 11-1 en la página 54 resume todo el modo de funcionamiento del temporizador de vigilancia y la configuración de bits necesaria para implementar el modo deseado

    
respondido por el Kvegaoro

Lea otras preguntas en las etiquetas