Francenanorecif

Bienvenue, Invité
Nom d'utilisateur : Mot de passe : Se souvenir de moi

SUJET : L'arduino sans soucis (alias le "Watchdog")

L'arduino sans soucis (alias le "Watchdog") 26 Jui 2014 12:18 #436890

  • billyboyk
  • Portrait de billyboyk
  • Hors Ligne
  • Chargé de Rédaction
  • Messages : 2256
  • Remerciements reçus 58
Je viens vous présenter ma dernière réalisation (concoctée avec la précieuse aide du grand Ratanof, star de l'électronique qui marche bien) car je me dis que cela pourra servir à d'autres ;)

Certains savent que j'ai rencontré récemment quelques problèmes qui font que mon bac aujourd'hui tire la tronche :( Un de ces problèmes est que j'ai voulu aller plus loin dans l'aventure Arduino en intégrant le contrôle par réseau et par SMS.
Le gros soucis, c'est qu'en phase de test, je me suis rendu compte (en général quand je suis pas à la maison sinon c'est pas drôle :silly: ) qu'il est possible que l'Arduino plante, aléatoirement, sans raison. Après tests, debug du code, essais... impossible de trouver la cause de ces "freezes" qui peuvent survenir après quelques heures, ou alors après plusieurs jours :(

J'ai donc fait des recherches, et je me suis rendu compte que je n'étais pas tout seul, surtout avec la carte Ethernet WS5100. Trouvant dommage d'abandonner, j'ai cherché une parade et j'ai trouvé le fameux Watchdog (chien de garde).

Mais qu'est-ce que c'est que ce truc ?
C'est tout simplement un outil qui permet de surveiller si l'Arduino exécute bien son programme.

Comment ça marche ? 2 solutions:
- Soit on utilise celui qui est intégré à l'Arduino, mais je ne sais pas si ça fonctionne bien et la manip n'est pas forcément super simple (il faut flasher le bootloader avec un autre spécifique à l'aide d'un autre Aruino).

- Soit on se fait un petit montage qui, s'il ne reçoit pas d'info de l'Arduino, redémarre ce dernier.

J'ai choisis la seconde idée ;)

Quel est le principe ?
Je demande à l'Arduino d'envoyer toutes les secondes, une impulsion (10ms) à mon montage, si le montage ne reçoit rien pendant 2 secondes (Arduino planté), il tire le reset de l'Arduino à la masse pendant 10ms, ce qui redémarre mon Arduino.

Comment faire ?
J'ai utilisé un circuit intégré HCF4538 et quelques composants. Plutôt qu'un long discours, voici le schéma:



Le premier monostable à gauche reçoit les impulsions de l'Arduino. Il a une tempo de 2 secondes (circuit RC en haut, 220k x 10uF = 2.2 secondes). Si il ne reçoit rien pendant plus de 2 secondes, il bascule sa sortie (6) et le second monostable envoi une impulsion de 10ms (100nF x 100K = 0.01 secondes) sur la base du transistor qui tire le reset à la masse, l'Arduino redémarre.

Voici mon montage, comme vous le voyez, ça ne prend pas de place, ça coûte pas grand chose et ça évite d'avoir un Arduino qui plante et qui laisse le chauffage en route par exemple (vécu), ou qui ne fait plus l'osmolation jusqu'à ce que la pompe de remonté aspire de l'air et l'envoi dans le bac (vécu aussi), etc, etc...



J'en ai profité pour optimiser le démarrage de mon Arduino en plaçant les éléments critiques en premier, ce qui fait que l'on ne voit presque pas qu'il redémarre (Contrôle des Leds, des relais qui pilotent les pompes principalement). Je suis passer d'environ 2 secondes à 5ms B). Le reste se fait tranquillement ensuite, sans bloquer le processus.

Fini les soucis d'Arduino planté ! :P
Dernière édition: 26 Jui 2014 12:20 par billyboyk.
L'administrateur a désactivé l'accès en écriture pour le public.
Cet utilisateur a été remercié pour son message par: martial95

Re: L'arduino sans soucis (alias le "Watchdog") 27 Jui 2014 11:37 #436958

  • the_ccm
  • Portrait de the_ccm
  • Hors Ligne
  • Administrateur Technique
  • Messages : 1197
  • Remerciements reçus 25
c'est une idée qu'elle est bonne, mais bon en général tes idées sont pas mauvaises :P

J'utilise le watchdog en interne, au niveau soft c'est vraiment pas compliqué, mais c'est vrai que faut virer le boot, programmer via le connecteur ISP, bref pas à la portée de tout le monde.

Par contre je pense que tu peux t'en sortir juste avec un RC et un transistor sans passer par un monostable mais c'est vrai que ça reste simple avec le monostable. Tu peux aussi ajouter l'envoi d'une trame par port série ou ethernet "Reboot!!" dans le setup() ce qui permet de savoir quand ça a planté.

si quelqu'un est intéressé je peux sortir le typon correspondant à ton montage.
L'administrateur a désactivé l'accès en écriture pour le public.

Re: L'arduino sans soucis (alias le "Watchdog") 27 Jui 2014 19:38 #436993

  • Janpolanton
  • Portrait de Janpolanton
  • Hors Ligne
  • Membre
  • Messages : 54
  • Remerciements reçus 1
Bonjour,

Question sûrement idiote, mais comment fais tu le reset du 1er monostable une fois que sa sortie a basculé car si l'Arduino a été planté est-ce que ta sortie PWM sur le broche 5 envoie son signal en moins de 2 secondes de manière a ne pas rebasculer et envoyer un nouveau signal de reset sur l'Arduino?
L'administrateur a désactivé l'accès en écriture pour le public.

Re: L'arduino sans soucis (alias le "Watchdog") 27 Jui 2014 19:55 #436994

  • billyboyk
  • Portrait de billyboyk
  • Hors Ligne
  • Chargé de Rédaction
  • Messages : 2256
  • Remerciements reçus 58
the_ccm écrit:
c'est une idée qu'elle est bonne, mais bon en général tes idées sont pas mauvaises :P

J'utilise le watchdog en interne, au niveau soft c'est vraiment pas compliqué, mais c'est vrai que faut virer le boot, programmer via le connecteur ISP, bref pas à la portée de tout le monde.

Par contre je pense que tu peux t'en sortir juste avec un RC et un transistor sans passer par un monostable mais c'est vrai que ça reste simple avec le monostable. Tu peux aussi ajouter l'envoi d'une trame par port série ou ethernet "Reboot!!" dans le setup() ce qui permet de savoir quand ça a planté.

si quelqu'un est intéressé je peux sortir le typon correspondant à ton montage.

Pas bête l'idée de l'info dans le setup ;)
L'administrateur a désactivé l'accès en écriture pour le public.

Re: L'arduino sans soucis (alias le "Watchdog") 27 Jui 2014 19:58 #436996

  • billyboyk
  • Portrait de billyboyk
  • Hors Ligne
  • Chargé de Rédaction
  • Messages : 2256
  • Remerciements reçus 58
Janpolanton écrit:
Bonjour,

Question sûrement idiote, mais comment fais tu le reset du 1er monostable une fois que sa sortie a basculé car si l'Arduino a été planté est-ce que ta sortie PWM sur le broche 5 envoie son signal en moins de 2 secondes de manière a ne pas rebasculer et envoyer un nouveau signal de reset sur l'Arduino?

Le monostable est utilisé en mode retriggable sur front descendant, tant qu'il n'a pas reçu d'impulsion, il ne fait rien. Une fois tombé, il se réamorce uniquement au prochain front descendant ;)
L'administrateur a désactivé l'accès en écriture pour le public.

Re: L'arduino sans soucis (alias le "Watchdog") 09 Jui 2016 10:46 #473052

  • billyboyk
  • Portrait de billyboyk
  • Hors Ligne
  • Chargé de Rédaction
  • Messages : 2256
  • Remerciements reçus 58
the_ccm écrit:
J'utilise le watchdog en interne, au niveau soft c'est vraiment pas compliqué, mais c'est vrai que faut virer le boot, programmer via le connecteur ISP, bref pas à la portée de tout le monde.

Salut Lolo !

J'ai envie d'essayer cela, tu peux nous expliquer comment tu as fait step ?

Merci :)
L'administrateur a désactivé l'accès en écriture pour le public.

Re: L'arduino sans soucis (alias le "Watchdog") 17 Jui 2016 13:50 #473108

  • the_ccm
  • Portrait de the_ccm
  • Hors Ligne
  • Administrateur Technique
  • Messages : 1197
  • Remerciements reçus 25
pff c'est loin :)

Alors en début de programme, tu déclares que tu utilises le watchdog,(ici sur 8 secondes mais tu peux descendre bcp plus bas, nous on a pas besoin de moins je pense.
(le code c'est de tête, faute de syntaxe à corriger)
#include <avr/wdt.h>

void setup()
{

wdt_enable(WDTO_8S);
Serial.begin( 9600 );

}

Ensuite tu essaies bêtement ça dans ton loop :
void loop()
{
  Serial.println( millis() );
}

Si tu testes, tu verras que normalement toutes les 8 secondes ton millis revient à zéro, car tu rebootes. C'est normal car tu n'a pas dit à ton watdchdog "ok tout va bien je te remet à zero"

maintenant si tu fais ça :
void loop()
{
  Serial.println( millis() );
  wdt_reset();
}

tu ne dois plus rebooter.

Si tu as suivi, ça veut dire qu'en cas de plantage, tu n'atteindra pas le wdt_reset(), et donc tu rebootes, et comme ça hop l'osmolateur ne restera pas allumé, par exemple. Il faut juste être sur de passer sur wdt_reset au moins toutes les 8 secondes.


Normalement, il n'y a plus besoin de flasher les bootloader je crois, il me semble que c'est géré, sinon il faut mettre ton code direct en virant le bootloader en passant en programmation ISP, ou mettre un bootloader Optiboot.

La programmation ISP n'a rien de compliqué. il faut un programmateur usbasp :
(vendeur fr)
www.ebay.fr/itm/Programmateur-USBASP-V2-...1:g:kTIAAOSw~FNUYx8u
un adaptateur 10=> 6 broches
www.ebay.fr/itm/AVRISP-USBasp-STK500-10P...3:g:QuEAAOSw14xXFIIy

et ensuite dans l'IDE, quand tu cliques sur le bouton upload, tu maitiens la touche MAJ au départ et ça se fait tout seul. Tu écrases le boot avec ton programme.

Sinon tu passes sous Linux et c'est beaucoup plus simple (je suis en train d'écrir un truc sur le sujet)
Dernière édition: 17 Jui 2016 13:50 par the_ccm.
L'administrateur a désactivé l'accès en écriture pour le public.

Re: L'arduino sans soucis (alias le "Watchdog") 22 Jui 2016 15:10 #473152

  • billyboyk
  • Portrait de billyboyk
  • Hors Ligne
  • Chargé de Rédaction
  • Messages : 2256
  • Remerciements reçus 58
J'ai essayé avec un autre arduino ISP, j'ai brické une carte et je n'arrive à rien avec la deuxième, j'abandonne. C'était quoi l'idée d'un RC et un transistor ?
L'administrateur a désactivé l'accès en écriture pour le public.

Re: L'arduino sans soucis (alias le "Watchdog") 22 Jui 2016 22:00 #473154

  • the_ccm
  • Portrait de the_ccm
  • Hors Ligne
  • Administrateur Technique
  • Messages : 1197
  • Remerciements reçus 25
ben mince t'es pourtant pas un manche d'habitude :P les cartes brickées c'est rare quand elles le sont vraiment, t'as pas du envoyé le bon code ? il faut essayer de reprogrammer avec une horloge très basse (mais avec un prog USBASP pas un arduino).

1) Le principe RC tu l'as sous les yeux sur ton schéma : tu garde le transistor avec le reseau RC avant, et tu ne commandes pas ça avec le monostable mais avec une sortie de ton arduino, que tu remets à zero avant que le reseau RC ne fasse commuter ton transistor. Pour celà il faut choisir des valeurs élevées pour R et C. Ex : ton reseau RC va commuter au bout de 2 secondes ton transistor, il faut que tu te debrouilles pour mettre la sortie Arduino à l'état bas au pire toutes les 2 secondes. Il faut pouvoir la laisser à l'état bas suffisamment longtemps pour décharger le condo. "En théorie", ça doit marcher, à valider

2) Sinon tu te prends un NE555 avec 3 resistances et 2 condos.
Source article : www.playwitharduino.com/?p=291

L'administrateur a désactivé l'accès en écriture pour le public.

Re: L'arduino sans soucis (alias le "Watchdog") 27 Jui 2016 11:04 #473179

  • billyboyk
  • Portrait de billyboyk
  • Hors Ligne
  • Chargé de Rédaction
  • Messages : 2256
  • Remerciements reçus 58
Par contre si mon Arduino plante alors que ma sortie reste à l'état bas, le watchog ne peut pas fonctionner il me semble ?
L'administrateur a désactivé l'accès en écriture pour le public.

Re: L'arduino sans soucis (alias le "Watchdog") 27 Jui 2016 12:28 #473180

  • the_ccm
  • Portrait de the_ccm
  • Hors Ligne
  • Administrateur Technique
  • Messages : 1197
  • Remerciements reçus 25
oui effectivement, après tu n'aurais vraiment pas de chance, et je vois pas pourquoi ça planterait sur une mise à l'état bas que tu remets à haut tout de suite derrière. C'est comme si tu utilisais le watchdog interne et que ton programme plante sur l'instruction wdt_reset()
L'administrateur a désactivé l'accès en écriture pour le public.

Re: L'arduino sans soucis (alias le "Watchdog") 27 Jui 2016 13:11 #473181

  • billyboyk
  • Portrait de billyboyk
  • Hors Ligne
  • Chargé de Rédaction
  • Messages : 2256
  • Remerciements reçus 58
Oui c'est sûr, je vais voir ce que je fais ;)
L'administrateur a désactivé l'accès en écriture pour le public.
Modérateurs: unjall, tulottes
Temps de génération de la page : 0.235 secondes

Une bouteille à la mer

billyboyk - 17:19

20 kilos de PV avec du mou, ça tiendra 2 jours dans un bidon brassé/chauffé ;)

billyboyk - 08:22

:D Bonne année à tous !!! xD

habaqouq - 22:06

bonsoir comme insérer une image dans un post merci

delphizorglub - 18:08

Ouaou :p super

babe91800 - 12:18

Bonjour à tous :) petit come back après un moment d'absence

The shoutbox is unavailable to non-members