Aumentar el tiempo límite de vigilancia del perro PIC 16F877A - CCS PIC C

3

He estado tratando de buscar un ejemplo sobre cómo aumentar el temporizador de vigilancia, pero desafortunadamente no puedo encontrar ninguno. El único ejemplo que se incluye en el ejemplo usa setup_wdt(WDT_2304MS)

¿Alguien podría decirme cómo puedo aumentar este retraso para decir 5,8,9 o 10 segundos? Cualquier sugerencia sería apreciada

    
pregunta MistyD

2 respuestas

4

No quieres eso. Los temporizadores de vigilancia mantienen un aspecto cercano en el funcionamiento correcto del microcontrolador, y el controlador debería poder restablecer el temporizador de vigilancia cada cierto tiempo, después de unas decenas de milisegundos como máximo. Para un microcontrolador moderno, un período de 10 segundos es la eternidad; puede ejecutar 100 millones o más instrucciones en ese momento, en las que cualquier cosa puede salir mal. Entonces no querrá dejarlo pasar por otros 10 segundos antes de actuar. En ese tiempo, un motor que debes controlar puede quemarse.

Si no puede ahorrar 1 de esos 100 millones para restablecer el temporizador, hay algo muy mal en la estructura de su código.

    
respondido por el stevenvh
3

El temporizador de vigilancia siempre tiene un período fijo que es nominalmente de 18 ms, pero puede variar de 7 a 33 ms. Hay un preescalador que puede asignarse al temporizador 0 o al perro guardián. Con la configuración máxima del preescalador, el período de viaje del perro guardián se multiplica por 128. Esto significa que el período máximo de perro guardián nativo es nominalmente 2.3 segundos, con un rango posible de 900 ms a 4.2 segundos.

Sin embargo, el período de vigilancia básico puede extenderse a cualquier longitud contando en el firmware. Incluso 18 ms es un tiempo "largo" para el micro. Despertarse cada 18 ms para disminuir un contador y ver si ha llegado a cero, luego volver a dormir toma muy poca corriente promedio. 10 segundos serían 556 viajes de vigilancia a 18 ms cada uno, por ejemplo. O bien, puede configurar el preescalador en 8, por ejemplo, para obtener períodos nominales de 144 ms. Luego contarías 69 de ellos para obtener un período de activación de aproximadamente 10 segundos.

Un problema con el uso del watchdog para sincronizar las activaciones es que es tan inexacto en estos PIC antiguos. Un truco que he usado varias veces es medir el intervalo de vigilancia dejando que el procesador se ejecute de vez en cuando, como cada 1024 activaciones, por ejemplo. Eso le permite medir el período de vigilancia frente al oscilador principal, mucho más preciso, y luego decidir cuántos períodos de vigilancia se deben contar por hora de activación deseada. En este ejemplo, la corriente promedio de dejar el procesador en cada 1024 intervalos de vigilancia sigue siendo inferior al 0,1% de dejarlo encendido todo el tiempo.

    
respondido por el Olin Lathrop

Lea otras preguntas en las etiquetas