Hola amigos tengo un problema con un programa bastante largo que consta de un programa principal y dos interrupciones de los Timer 1 y 0.
Este programa(compilado en CCS) me funciona bien hasta que pasan unos segundos y se me resetea el solito.Supongo que necesito el Watchdog.
La interrupcion del timer 1 me controla la lectura de lectura de 3 sensores diferentes, y ademas me hace la lectura de un real time clock externo.
La interrupcion del timer 0 lo que hace es entrar en un menu de ajustes de los parametros que se desean controlar con los sensores.
El programa principal simplemente inicializa el LCD keyboard el RTC externo...
Bueno la pregunta es qué tiempo de reset del Watchdog elijo, y donde me aconsejan poner el comando reset_wdt().
Una vez mas gracias a todos por su interes!!!!
eccdreded yo que tu primero me fijaría porqué se resetea el pic o al menos porque crees que se resetea. En casi todos los casos suele ser un problema de código o de hardware y no del pic. En el hardware, si una entrada A/D por ejemplo baja de 0V he visto que los pics se resetean (lo comprobé con un 16F873 y un 16F877 pero no hacerlo un caso general simplemente es mi experiencia).
El watchdog no va a solucionar que el micro se resetee, por lo contrario hará que se resetee!
El watchdog es util cuando tu firmware se cuelga en algún punto ya sea porque no esta bien depurado el software o porque una señal que esperas nunca llegue y el software se cuelgue ahi (esto es algo muy genérico cada software/hardware tiene sus cosas). El punto es que si por ej. el pic se cuelga porque le entra ruido por sus pines, el watchdog podrá salvar la situación reseteandolo (me ha pasado en ambientes ruidosos) es por eso que yo que tu revería la necesidad de usar el watchdog.
De todas formas, si quieres usarlo, el período del mismo debiera ser mayor al mayor bucle de código de tu programa entre clrwdt() y clrwdt(). Es decir que si dentro de tu código tienes un clrwdt() cada 10mseg, pues los 18mseg por defecto te funcionarán bien. Si tu bucle es de 100mseg, entonces debes incrementar este número usando el prescaler (asignando el prescaler al WDT en vez de al TMR0 , ojo si usas el prescaler para el TMR0).
Un abrazo