Parlons Arduino > Trucs & astuces

Comment faire un reset software d'un ATMega328

<< < (2/2)

Dominique:

--- Citation de: trimarco232 le août 28, 2019, 08:26:15 pm ---tout se passerait comme si le reboot ne se fait pas et que par conséquent le programme reste dans la boucle
je pense que tu as pu t'assurer que le wdt a bien agi (truc simple comme une led qui ne s'allume plus) ?

--- Fin de citation ---
Oui c’est sûr qu’il a bien déclenché, mais avant il faudrait sans doute remette les registres en état initial comme lors d’un Reset hard. Ce qui se passe là : la led 13 clignote et le Reset USB (donc le televersement ou l’ouverture du moniteur ne fonctionnent plus.

Jean-Luc:
Bonjour,

Concernant le watchdog et les bootloader ancienne version, j'avais trouvé des informations indiquant que ces anciennes versions ne désactivaient pas le watchdog. Or lorsque le reset est dû au watchdog, le watchdog reste actif et si le temps d'attente du bootloader pour un nouveau flashage + le temps d'init avant setup est > au délai du watchdog, la carte passe son temps à rebooter. La solution est alors de couper son alimentation.

Le bootloader OptiBoot désactive le watchdog au démarrage et donc n'est pas touché par le phénomène.

Si tu veux que ça fonctionne quelque soit le bootloader tu peux

* mettre un telai de watchdog suffisamment long pour assurer que tu arrives dans setup où tu vas couper le watchdog
* utiliser une broche en sortie connectée au RESET que tu pourras déclencher avec un simple digitalWrite

Dominique:

--- Citation de: Jean-Luc le août 29, 2019, 02:22:48 pm ---Si tu veux que ça fonctionne quelque soit le bootloader tu peux

* mettre un telai de watchdog suffisamment long pour assurer que tu arrives dans setup où tu vas couper le watchdog
* utiliser une broche en sortie connectée au RESET que tu pourras déclencher avec un simple digitalWrite
--- Fin de citation ---

Merci Jean-Luc,

Je vais essayer le 1) et ce sera plus sûr de prévoir un fils supplémentaire comme dans le 2)

trimarco232:
Bonjour,
très intéressant, Dominique, peux-tu nous faire un retour ?

Dominique:
La connexion d'une pin digitale de l'Arduino à une pin RESET est la meilleure solution !

Ce petit programme très puissant marche très bien :


--- Code: ---void software_Reset()
{
  pinMode(LED_BUILTIN, OUTPUT);
  digitalWrite(LED_BUILTIN, HIGH);// allumer la led intégrée..
  delay(200);
  digitalWrite(LED_BUILTIN, LOW);// pour faire joli
  pinMode(5, OUTPUT);             // pin 5 commande le reset
  digitalWrite(5, LOW); // reset Hardware
}
--- Fin du code ---

Le seul inconvénient est que ça mobilise une pin ???

Navigation

[0] Index des messages

[*] Page précédente

Utiliser la version classique