reset perpétuel, impossible de programmer un arduino
Répondre à la discussion
Affichage des résultats 1 à 16 sur 16

reset perpétuel, impossible de programmer un arduino



  1. #1
    pegazix

    Cool reset perpétuel, impossible de programmer un arduino


    ------

    bonjour,
    j'ai téléversé ce code par mégarde ce code dans mon arduino
    Code:
    #include <avr/wdt.h>
    
    void setup() {
    
    }
    
    void software_Reboot()
    {
      wdt_enable(WDTO_15MS);
    
    }
    void loop() {
    
          software_Reboot();
          delay(100);
      }
    le problème, c'est que je ne peut plus programmer mon
    arduino car il se reset automatiquement.
    Merci

    -----
    Dernière modification par gienas ; 26/12/2014 à 07h57. Motif: Ajouté les balises code, obligatoires pour les programmes

  2. #2
    jiherve

    Re : reset perpétuel, impossible de programmer un arduino

    Bonsoir,
    Amha il faudrait essayer de prendre la main avec un programmateur standard type STK 500 au travers du bus SPI, par exemple le petit programmateur USB.
    JR
    l'électronique c'est pas du vaudou!

  3. #3
    Biname

    Re : reset perpétuel, impossible de programmer un arduino

    Hello,

    Pousser sur le bouton reset de l'Arduino et le relâcher 'juste avant' le début de la reprogrammation du processeur !

    Timing assez simple à trouver ...

    Biname

  4. #4
    Yvan_Delaserge

    Re : reset perpétuel, impossible de programmer un arduino

    Le watchdog resette toutes les 15 millisecondes. Bon courage pour reprogrammer juste au bon moment entre 2 resets!

    Mais en essayant un nombre suffisant de fois... Avec le programme blink on voit tout de suite si ça a marché.
    Un civet, un plat de côtes et puis, glissez-moi une petite paupiette avec.( Lino Ventura)

  5. A voir en vidéo sur Futura
  6. #5
    Biname

    Re : reset perpétuel, impossible de programmer un arduino

    Citation Envoyé par Yvan_Delaserge Voir le message
    Le watchdog resette toutes les 15 millisecondes. Bon courage pour reprogrammer juste au bon moment entre 2 resets!
    Mais en essayant un nombre suffisant de fois... Avec le programme blink on voit tout de suite si ça a marché.
    Est-ce que le watchdog va resetter le processeur pendant un long reset manuel ou pendant la programmation via le bootloader ? Je pense que non ?????
    Belle question, yaka tester !

    http://playground.arduino.cc/Main/ArduinoReset

    Biname
    Dernière modification par Biname ; 25/12/2014 à 22h25.

  7. #6
    momoto33127

    Re : reset perpétuel, impossible de programmer un arduino

    Ou avec le programme BareMinimum
    Code:
    void setup() {
      // put your setup code here, to run once:
    
    }
    
    void loop() {
      // put your main code here, to run repeatedly: 
      
    }
    Au moins rapide a transferer

  8. #7
    Biname

    Re : reset perpétuel, impossible de programmer un arduino

    Bad news !
    Hello,


    http://forum.arduino.cc/index.php?topic=37271.0 ... pour ce que ça vaut ????

    No, the bootloader will not reset or disable the watchdog, so it will usually timeout (and go into a reset-loop) before the bootloader has started your application code.

    You can't use the watchdog if you use the original bootloader.

    You have to either modify the bootloader code (haven't done that myself ) or use a hardware-programmer to upload the sketch without using the bootloader.
    Biname

  9. #8
    Yvan_Delaserge

    Re : reset perpétuel, impossible de programmer un arduino

    Bon, à 4 euros le clone d'Arduino uno, la perte reste d'importance modérée.
    Mais le programme responsable de cette mini catastrophe est intéressant. Il serait à classer dans la même catégorie que les procédures que certains mettaient au point il y a quelques années pour tuer le plus vite possible un Tamagotchi.
    On pourrait proposer l'ouverture d'une section dans le site Arduino, intitulée: "Comment flinguer un Arduino uniquement par soft?"
    Un civet, un plat de côtes et puis, glissez-moi une petite paupiette avec.( Lino Ventura)

  10. #9
    Yoruk

    Re : reset perpétuel, impossible de programmer un arduino

    Reste aussi la possibilité de changer uniquement le 328p, s'il s'agit d'une genuine arduino, faite en Italie...?

    (Et pourquoi ne pas envisager de créer un tamagochi avec un arduino ??)
    La robotique, c'est fantastique !

  11. #10
    pegazix

    Re : reset perpétuel, impossible de programmer un arduino

    je ne peut pas formater la mémoire par un autre moyen car 15 miliseconde c'est peu pour téléverser un programme.

  12. #11
    PA5CAL

    Re : reset perpétuel, impossible de programmer un arduino

    Citation Envoyé par Biname Voir le message
    Bad news !
    Hello,


    http://forum.arduino.cc/index.php?topic=37271.0 ... pour ce que ça vaut ????

    No, the bootloader will not reset or disable the watchdog, so it will usually timeout (and go into a reset-loop) before the bootloader has started your application code.

    You can't use the watchdog if you use the original bootloader.

    You have to either modify the bootloader code (haven't done that myself ) or use a hardware-programmer to upload the sketch without using the bootloader.


    Biname
    Si le fuse WDTON n'a pas été programmé (et il n'a pas raison de l'avoir été), alors :
    - le watchdog n'est pas actif au démarrage du microcontrôleur
    - il ne démarre qu'après que le bootloader ait terminé son exécution sans téléchargement de nouveau programme
    - le délai de reset de 15 ms n'est compté qu'après son démarrage, à partir de l'exécution de la fonction loop().

    Donc ta première impression était la bonne : le watchdog va pas resetter le processeur pendant un long reset manuel ou pendant la programmation via le bootloader. Le reset manuel au démarrage est la bonne solution.
    Dernière modification par PA5CAL ; 26/12/2014 à 11h01.

  13. #12
    Biname

    Re : reset perpétuel, impossible de programmer un arduino

    Hello,

    Citation Envoyé par PA5CAL Voir le message
    Si le fuse WDTON n'a pas été programmé (et il n'a pas raison de l'avoir été), alors :
    - le watchdog n'est pas actif au démarrage du microcontrôleur
    - il ne démarre qu'après que le bootloader ait terminé son exécution sans téléchargement de nouveau programme
    - le délai de reset de 15 ms n'est compté qu'après son démarrage, à partir de l'exécution de la fonction loop().
    Oui, tu as raison. Je n'avais pas intégré la distinction entre le WDT_ON hard et soft dans ma réflexion.

    Lors de la programmation via le bootloader, le circuit USB-Série de l'Arduino émet une pulse reset pour le processeur, ça devrait suffire ? Donc le chip devrait se reprogrammer sans broncher ? Or, apparemment, il ne le fait pas .

    Serait-il possible qu'une pulse reset ne reset pas le timer du watchdog ????

    J'ai pensé à ce test code pour économiser le 1.80€ d'un de mes Pro Mini qui a déjà pas mal vécu

    IF ((EEPROM )rebootCount < 1000) {WDTON};
    Code:
    #include <avr/wdt.h>
    #include <EEPROM.h>
    
    void setup() {
    }
    
    void software_Reboot()
    {
      wdt_enable(WDTO_15MS);
    
    }
    void loop() {
          int reboot_count = EEPROM.read(996);
          reboot_count++;
          EEPROM.write(996, reboot_count);
          if (reboot_count<1000) {       // 1000 reboot ... d'angoisse :-)
               software_Reboot();        // 1% espérance de vie des eeprom 996 et 997
            }
          delay(100);
          digitalWrite(13, HIGH);        // ON après les 1000 reboot
      }
    Biname

  14. #13
    PA5CAL

    Re : reset perpétuel, impossible de programmer un arduino

    Citation Envoyé par Biname Voir le message
    Serait-il possible qu'une pulse reset ne reset pas le timer du watchdog ????
    Oui. Le circuit du watchdog est relativement indépendant du reste du microcontrôleur, et une simple impulsion sur l'entrée reset ne suffit pas à l'arrêter.

    Comme à la réflexion les détails de la discussion n'ont pas été aussi clairs que je le pensais, je précise que lorsque j'ai écrit « Le reset manuel au démarrage est la bonne solution », j'évoquais une mise sous tension de la carte.

    En maintenant le bouton reset appuyé dès le début de l'alimentation électrique de la carte et jusqu'au début du téléchargement du nouveau programme, le watchdog n'est pas démarré, et la re-programmation peut être réalisée sans être interrompue.
    Dernière modification par PA5CAL ; 27/12/2014 à 01h15.

  15. #14
    Biname

    Re : reset perpétuel, impossible de programmer un arduino

    Salut,

    Le sujet m'amuse.

    PDF Atmel du atmega328P :
    10. System Control and Reset
    10.1 Resetting the AVR
    During reset, all I/O Registers are set to their initial values, and the program starts execution
    from the Reset Vector
    ...
    10.8 Watchdog Timer
    ...
    10.9.2 WDTCSR – Watchdog Timer Control Register
    Les bits WDE et WDIE du registre WDTCSR(0x60) controlent le WatchDog_Timer_Timout_Reset ; WDTCSR(0x60) est le premier des I/O Extended Registers. Les valeurs initiales de ces bits sont : WDE=0 et WDIE=0 qui signifient WDT OFF.

    Est-ce que le 'all I/O' de 10.1 inclus les Extended I/O aussi ??? Si oui, tous les reset réinitialisent le WDT OFF, si non le comportement WDT n'est pas modifié par une pulse reset.

    Rien trouvé qui permette de lever ce doute , si ce n'est que 'all' c'est 'all' et que ça ne colle pas à ce qu'on nous dit ici.

    L'__oscillateur__ du watchdog temporise le démarrage de l'unité centrale à la mise sous tension ; cet oscillateur 128 KHz est le premier à démarrer à la mise sous tension et ne s'arrête jamais.

    -----

    http://www.nongnu.org/avr-libc/user-..._watchdog.html ___PAS ATMEL__
    Note that for newer devices (ATmega88 and newer, effectively any AVR that has the option
    to also generate interrupts), the watchdog timer remains active even after a system reset
    (except a power-on condition), using the fastest prescaler value (approximately 15 ms).
    Yapluka envoyer un Pro Mini au casse pipe

    Biname

  16. #15
    PA5CAL

    Re : reset perpétuel, impossible de programmer un arduino

    (NB: tu dois avoir une ancienne version de la datasheet, car "System Control and Reset" est actuellement au chapitre 11. Mais ça ne change pas grand chose à la question qui nous intéresse.)

    Le fait d'annoncer :
    During reset, all I/O Registers are set to their initial values
    n'est probablement pas assez clair ou suffisamment précis pour décrire ce qui se passe dans le détail pour le watchdog.

    En ce qui me concerne, je n'ai pas testé cette question sur ce modèle de microcontrôleur, mais je me réfère à des indices relevés dans la datasheet de l'ATmega328P, ce qui me porte à accréditer l'affirmation des libristes de nongnu que tu as citée. En effet, dans la datasheet, la note accompagnant l'exemple de programmation du watchdog relève que :

    Note: If the Watchdog is accidentally enabled, for example by a runaway pointer or brown-out condition, the device will be reset and the Watchdog Timer will stay enabled. If the code is not set up to handle the Watchdog, this might lead to an eternal loop of time-out resets. To avoid this situation, the application software should always clear the Watchdog System Reset Flag (WDRF) and the WDE control bit in the initialization routine, even if the Watchdog is not in use.
    (source: datasheet Atmel-8271I-AVR- ATmega-Datasheet_10/2014 > 11. System Control and Reset > 11.8 Watchdog Timer > 11.8.2 Overview > p.52)

    Ici, selon Atmel, il est bien question d'une activation logicielle du watchdog et d'une incapacité du reset "à chaud" à l'arrêter.


    En conséquence, je préconise que pegazix commence à appuyer sur le bouton RESET de l'Arduino encore hors tension, branche la carte, et ne relâche le bouton RESET qu'après le démarrage du "téléversement".
    Dernière modification par PA5CAL ; 27/12/2014 à 10h34.

  17. #16
    Biname

    Re : reset perpétuel, impossible de programmer un arduino

    Hello,

    Oui Pascal, il faut un cold - very cold - reset et ça fonctionne.

    Le plus téméraire de mes Pro Mini a été chargé avec le code de Pegazix, la led PIN_13 de l'Arduino s'est mise à flasher rapidement, il n'était plus possible de reprogrammer le chip via le bootloader. Un long ou court reset manuel relâché au bon moment ne donne aucun résultat.

    Avec mon Pro Mini Atmega328p, la seule solution consiste à
    • débrancher le connecteur USB de l'Arduino (et son alimentation s'il y en a une)
    • pousser et maintenir enfoncé le bouton reset de l'Arduino
    • avec la main libre , rebrancher le connecteur USB en maintenant toujours le bouton reset de l'Arduino enfoncé
    • compiler avec l'IDE Arduino un autre code ... Blink.ino par exemple
    • dès qu'apparaît sur la fenêtre de sortie(en bas) de l'IDE Arduino "Taille binaire du croquis : ...." compter environ deux secondes et relâcher le bouton reset de l'Arduino.
    • ici ça marche

    =========================

    Code:
    #include <avr/wdt.h>
    
    void setup() {
       wdt_enable(WDTO_8S);
       Serial.begin(57600);      // open the serial port at 9600 bps:    
       digitalWrite(13, HIGH);
       delay(1000);
       digitalWrite(13, LOW);
       delay(1000);
       digitalWrite(13, HIGH);
       delay(1000); 
       digitalWrite(13, LOW); 
       Serial.print (" Hello, Just Reboot\n");
    }
    
    void loop() {
    }
    Ce code provoque un WatchDog Reset après 8 secondes et ensuite entre dans une boucle infinie de Reset très rapides, boucle identique à celle induite par le code de Pegazix. Le timout du watchdog est réinitialisé à 15ms et la ligne de code "wdt_enable(WDTO_8S);" est sans effet ou pas exécutée ???

    Ce qui donne tout son sens à : http://www.nongnu.org/avr-libc/user-..._watchdog.html ___PAS ATMEL__
    Note that for newer devices (ATmega88 and newer, effectively any AVR that has the option to also generate interrupts), the watchdog timer remains active even after a system reset (except a power-on condition), using the fastest prescaler value (approximately 15 ms). It is therefore required to turn off the watchdog early during program startup, the datasheet
    recommends a sequence like the following: ...
    ========================



    On a sauvé le soldat Arduino de Pegazix mais je ne sais plus comment utiliser le WD sous Arduino sans
    entrer dans un boucle infinie de reset ... pas beaucoup cherché non plus .

    Biname
    Dernière modification par Biname ; 28/12/2014 à 00h07.

Discussions similaires

  1. Arduino UNO compréhension du reset de l'ATMEGA328P-PU
    Par jeje22200 dans le forum Électronique
    Réponses: 3
    Dernier message: 28/04/2014, 20h04
  2. [Brun] Chaudière Chaffoteaux et Maury Elexia II plus d'ECS reset impossible !
    Par invite7c6837b8 dans le forum Dépannage
    Réponses: 3
    Dernier message: 17/08/2009, 09h43
  3. Le mouvement perpétuel, impossible ... ou bien ... !
    Par invitebd2b1648 dans le forum Discussions scientifiques
    Réponses: 18
    Dernier message: 31/05/2009, 18h59
Découvrez nos comparatifs produits sur l'informatique et les technologies.