Répondre à la discussion
Affichage des résultats 1 à 15 sur 15

[C/PIC18]-Mise en place d'un watchdog



  1. #1
    jorg1n

    [C/PIC18]-Mise en place d'un watchdog


    ------

    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:
    Code:
    #pragma config WDT = ON
    #pragma config WDTPS = ....
    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:
    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:
    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
    }
    Je pense que cela doit etre bon sur le principe...
    Merci d'avance

    -----

  2. Publicité
  3. #2
    jorg1n

    Re : [C/PIC18]-Mise en place d'un watchdog

    Bonjour...

    Personne n'a déja réalisé un watchdog..

    Merci d'avance

  4. #3
    jorg1n

    Re : [C/PIC18]-Mise en place d'un watchdog

    Bonjour,

    mon sujet est assez vieux même si il n'a que 4 mois, mais il est toujours d'actualité..
    Auriez vous quelques infos a me transmettre sur la manière de faire?

    Merci d'avance et bonne journée a tous

  5. #4
    Seb.26

    Re : [C/PIC18]-Mise en place d'un watchdog

    Bah un WD, y'a pas grand chose à dire : tu dois montrer au CPU que ton soft est toujours OK via CLRWDT avant que le timer claque, sinon, le WD reset le CPU ...

    C'est quoi ta question ?
    ... ça marche pas chez toi ??!?
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  6. #5
    jorg1n

    Re : [C/PIC18]-Mise en place d'un watchdog

    Merci Seb26,

    je ne l'ai pas encore testé, mais je voulais savoir si ma manière de le mettre en oeuvre était bonne?

    Et vu que mon application a un timer de 400ms, je peux réaliser ma fonction restart_WDT(); après chaque IT?
    Et en ce qui concerne la valeur du WDTPS, je dois donc régler une valeur supérieure à 400ms je suppose?

    Merci d'avance

  7. A voir en vidéo sur Futura
  8. #6
    Seb.26

    Re : [C/PIC18]-Mise en place d'un watchdog

    En général, il est bon de mettre le reset du WD dans un "lieu critique" de ton application ... car une IT, tu peux penser qu'elle sera toujours OK, donc peut d'intérêt au WD ...

    Mets le dans ta boucle principale, dans un endroit ou tu sais que tu dois passer ... et si ta boucle se plante, le WD fera son boulot !

    ... alors que si tu reset le WD dans une IT, même si ton prog plante, l'IT resetera probablement le WD ...

    @+
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  9. Publicité
  10. #7
    jorg1n

    Re : [C/PIC18]-Mise en place d'un watchdog

    Okay... Okay...

    Je vais tester tout ça, et je te tiens au courant...
    Par contre, peux tu me confirmer que me manière de faire est bonne...
    Merci d'avance

  11. #8
    Seb.26

    Re : [C/PIC18]-Mise en place d'un watchdog

    Oui, tu dois utiliser CLRWDT pour reseter le WD ... d'autres moyens sont possibles, mais cette instruction est là pour ça ...
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  12. #9
    jorg1n

    Re : [C/PIC18]-Mise en place d'un watchdog

    Merci Seb26 pour toute ton aide...

  13. #10
    HULK28

    Re : [C/PIC18]-Mise en place d'un watchdog

    Bonjour,

    pour déterminer le temps du WD il faut évaluer le temps le plus long nécessaire à exécuter une tâche donnée (un calcul fait par une fonction, une boucle for, etc).

    Comme l'a dit Seb.26 le WD doit être placé dans le main ou à l'intérieur de toute fonctions itératives dont la durée n'est pas fixe et/ou dépendante d'évènements attendu par le système (while, do..while).
    A+
    Le génie est fait d'1 pour cent d'inspiration et de 99% pour cent de transpiration. Edison

  14. #11
    jorg1n

    Re : [C/PIC18]-Mise en place d'un watchdog

    Bonjour à tous,

    j'ai réussi a mettre en place le watchdog, par contre, y a t'il un moyen de détecter au rallumage qu'il s'agit un reset du watchdog?

    Je m'explique, lorsque mon système est mis sous tension, mon programme attend une interruption externe, et ce que je voudrais, c'est que si mon système se reset il redémarre completement et que je ne sois pas obligé de réaliser une interruption externe, je voudrais donc voir si il s'agit d'un démarrage classique ou si il s'agit d'un reset du watchdog...

    J'espère que mon explication est assez claire...

    Merci d'avance

  15. #12
    fignon

    Re : [C/PIC18]-Mise en place d'un watchdog

    Il faut aller voire ce qu'il y a dans le registre RCON pour déterminer la source du reset (instruction reset, watchdog, POR, BOR).

  16. Publicité
  17. #13
    jorg1n

    Re : [C/PIC18]-Mise en place d'un watchdog

    Merci fignon,

    j'avais bien vu le bit /TO qui dit lorsque qu'il est à 0 qu'un reset a eu lieu a cause du watchdog, mais comment l'utiliser??
    En fonctionnement "normal", il est a "1", mais quand il y a un reset du watchdog, est qu'au redémarrage le bit reste a 0?

  18. #14
    fignon

    Re : [C/PIC18]-Mise en place d'un watchdog

    Il faut lire le registre au début du programme pour déterminer la source de reset.
    Si /TO est nul, alors il y a eu un rest wdt.

    Ensuite il faut réecrire 1 sur le bit qui a été mis à 0 lors du reset.

  19. #15
    jorg1n

    Re : [C/PIC18]-Mise en place d'un watchdog

    Bonjour à tous,

    bon bein, tout marche parfaitement, j'appelle ma fonction :
    Code:
    void restart_WDT (void)
    {
      	_asm 
    	CLRWDT         // Es ce que je peux faire ça pour le réinitialiser?
    	_endasm
    }
    dès qu'il est nécessaire, et lors d'un reset du au watchdog, je viens tester le bit TO du Registre RCON:
    Code:
    void main(void)
    {
    if (RCONbits.TO == 0)
     	{
    	 RestartByWatchdog = 1;
    	}
    else if (RCONbits.TO == 1)
    	{
    	 RestartByWatchdog = 0;
    	}
    ...
    Je ne remet pas le bit TO à 1 car d'après la documentation il n'est accessible qu'en lecture donc, pas nécessaire de lui dire:

    Code:
    RCONbits.TO = 1
    Merci encore pour votre aide

    Bonne fin de journée à tous

Sur le même thème :

Discussions similaires

  1. l'installation d'une PAC nécéssite t'elle la mise en place d'un ballon tampon?
    Par domino 51 dans le forum Habitat bioclimatique, isolation et chauffage
    Réponses: 2
    Dernier message: 12/12/2008, 12h31
  2. [Génétique] Coalescence Théorie et mise en place d'un modèle
    Par Mabeil dans le forum Biologie
    Réponses: 0
    Dernier message: 14/10/2008, 21h26
  3. Mise en place d'un plancher chauffant... sans source de Chaleur!
    Par BioTop dans le forum Habitat bioclimatique, isolation et chauffage
    Réponses: 5
    Dernier message: 14/05/2008, 15h11
  4. Mise en place d'un FPGA
    Par angelnapo dans le forum Électronique
    Réponses: 1
    Dernier message: 25/04/2008, 22h25
  5. Mise En Place D'un Pabx Logiciel
    Par commandodez dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 22/08/2007, 21h49
Découvrez nos comparatifs produits sur l'informatique et les technologies.