Bonjour,
je viens de réaliser un petit système réalisé sur un 18F2520 avec comme compilateur le C18 de Microchip, mais je souhaiterai lui ajouté un watchdog, mais je me pose quelques questions sur sa mise en oeuvre:
Tout d'abord, je sais qu'il faut autoriser son fonctionnement avec la configuration des bits et régler son temps:
Par contre comment déterminer son temps(il peut varier entre 4ms et 131 sec d'après la doc), je souhaiterai avoir un watchdog de 300ms:Code:#pragma config WDT = ON #pragma config WDTPS = ....
j'ai un quartz de 20MHz, donc FOSC= 20Mhz, TOSC=50ns, donc Tcycle = 200ns.Mais comment déterminer WDTPS en fonction de Tcycle??
Ensuite au point de vue du soft, je dois créer une petite fonction afin de remettre à 1 le watchdog. Je pense qu'il faut agir sur le bit 3 du registre RCON (/TO), et créer une petite routine d'interruption pour relancer le programme en cas de "plantage", je voyais ça comme cela, mais pourriez vous m'aider:
Je pense que cela doit etre bon sur le principe...Code:[...] #pragma config WDT = ON #pragma config WDTPS = //Valeur a déterminer [...] void restart_WDT (void); [...] #pragma interrupt TIMER void TIMER(void) { if (RCONbits.TO) // Test du drapeau d'IT du WDT { _asm RESET // Es ce que je peux faire ça pour faire le RESET par soft _endasm } [...] } void main (void) { [...] while (1) { restart_WDT(); [...] } } void restart_WDT (void) { _asm CLRWDT // Es ce que je peux faire ça pour le réinitialiser? _endasm }
Merci d'avance
-----