Bonjour, cliquez-ici pour vous inscrire et participer au forum.
  • Login:


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

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

  1. jorg1n

    Date d'inscription
    septembre 2007
    Messages
    1 833

    [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
     


    • Publicité




      Poursuivez votre recherche
      Recherche personnalisée

  2. jorg1n

    Date d'inscription
    septembre 2007
    Messages
    1 833

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

    Bonjour...

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

    Merci d'avance
     

  3. jorg1n

    Date d'inscription
    septembre 2007
    Messages
    1 833

    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
     

  4. Seb.26

    Date d'inscription
    juin 2005
    Âge
    35
    Messages
    1 696

    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. >>
     

  5. jorg1n

    Date d'inscription
    septembre 2007
    Messages
    1 833

    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
     

  6. Seb.26

    Date d'inscription
    juin 2005
    Âge
    35
    Messages
    1 696

    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. >>
     


    • Publicité



  7. jorg1n

    Date d'inscription
    septembre 2007
    Messages
    1 833

    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
     

  8. Seb.26

    Date d'inscription
    juin 2005
    Âge
    35
    Messages
    1 696

    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. >>
     

  9. jorg1n

    Date d'inscription
    septembre 2007
    Messages
    1 833

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

    Merci Seb26 pour toute ton aide...
     

  10. HULK28

    Date d'inscription
    janvier 2006
    Localisation
    dans le labo d'essais...
    Âge
    48
    Messages
    9 015

    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+
    HULK

    "Pour la carotte, le lapin est la parfaite incarnation du Mal."
    Robert Scheckley.
     


    • Publicité



  11. jorg1n

    Date d'inscription
    septembre 2007
    Messages
    1 833

    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
     

  12. fignon

    Date d'inscription
    février 2009
    Âge
    29
    Messages
    50

    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).
     

  13. jorg1n

    Date d'inscription
    septembre 2007
    Messages
    1 833

    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?
     

  14. fignon

    Date d'inscription
    février 2009
    Âge
    29
    Messages
    50

    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.
     


    • Publicité



  15. jorg1n

    Date d'inscription
    septembre 2007
    Messages
    1 833

    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
     



 

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