He escrito un pequeño firmware de vigilancia que se ejecuta en un ATtiny85. La idea del firmware es:
- espere 10 segundos después del encendido e ignore la señalización durante ese tiempo
- después de eso, se espera que la señal se reduzca con una frecuencia no inferior a una vez cada 100 ms y no menos frecuente que una vez cada 65 segundos, y al fallar una de las expectativas, establece una señal de reinicio para 10us, y luego se reinicia en el paso ( 1).
Obviamente (y posiblemente de forma gratuita) programé esto en Arduino utilizando la ATtiny board description , que asigna los pines como:
LaconfiguracióndemisfusiblesseprogramadelasiguientemaneraatravésdeAVRDude:
avrdude-pt85-cdragon_isp-Pusb-u-Uefuse:w:0xff:mavrdude-pt85-cdragon_isp-Pusb-u-Uhfuse:w:0xdf:mavrdude-pt85-cdragon_isp-Pusb-u-Ulfuse:w:0xe2:m
Estasconfiguracionescorrespondena:
- OsciladorRCinternoa8MHz,6CK/14CK+64ms
- SalidaderelojenPORTB4deshabilitado
- Nodividirelrelojpor8internamente
- Deteccióndeexclusióndedatosdesactivada
- NoconservarlamemoriaEEPROMatravésdelciclodeborradodechip
- EltemporizadordevigilanciaNOsiempreestáencendido
- Descargadeprogramasenserie(SPI)habilitada
- DebugWiredeshabilitado
- Restablecimientohabilitado
- Autoprogramacióndeshabilitada.
Alosfinesdeladepuración,generaunaondacuadradadelciclodetrabajodel50%delanchodepulsode100msduranteeseperíodoinicialde10segundos,yunciclodetrabajodel50%delanchodelpulsode200msdespuésdelperíodoinicialde10segundos.
Paraunabuenamedida,aquíestáelfragmentodeesquemaqueacompañaaesto:
La gran mayoría de las veces, la señal de depuración se comporta como se describe. Sin embargo, en muy raras ocasiones, he observado una señal baja plana en la salida de depuración, sin onda cuadrada. He examinado las líneas de alimentación y reinicio del ATtiny85 en un alcance en esta condición, y no parece haber ninguna indicación de que se produzca una condición de reinicio bloqueado o apagado.
¿Cómo demonios, entonces, mi programa no puede iniciarse? ¿Podría ser porque la detección de apagón está deshabilitada? ¿Debo configurar el temporizador de vigilancia siempre en el fusible? Realmente me gustaría entender cómo esto podría suceder ocasionalmente.