W5100 web serveur ne démarre pas après une coupure de courant

Bonjour,

Je suis nouveau ... donc merci d'être compréhensif.
Voilà le problème.
J'ai une carte W5100 avec un arduino mega 2560.
Je démarre un serveur web et un UTP directement dans le setup.
Lorsque je charge le programme via USB , tout va très bien , le serveur UTP et web fonctionnent parfaitement : tout est parfait.
Mais lorsqu'il y a une coupure de courant et que celui-ci revient , aucun serveur ne fonctionne mais la boucle loop fonctionne pour les autres fonctionalités.
J'ajoute que le courant est coupé uniquement sur l'arduino , le courant reste sur le switch et le routeur.( si je coupe le courant sur le switch en même temps c'est le même probleme ..)
sur la W5100, la led POWER est allumée et la led verte FULL clignote.
Je dois alors pousser sur le bouton reset de la W5100 pour que les serveurs se réactivent et que cela refonctionne.
Etrange , si je raccorde une pin digital avec une Rèsistance de 1 Kohm à la pin reset et que je pousse sur un bouton qui met cette pin à la masse, le reset de l'arduino se fait aussi correctement mais les serveurs ne démarrent pas .
On dirait que le reset en poussant sur le bouton reset de la W5100 ou en envoyant un LOW sur la pin reset ne produisent pas exactement le même effet sur la W5100.

Quelqu'un peut -il m'aider SVP ? Merci d'avance
J'ai mis en attache le code complet mais il est grand..

TCP_UTP_OK_definitif_2_modif.ino (40.4 KB)

Quel shield W5100 ?

Essayez de mettre un delay(250);en tout début de setup(). Sur certains shield W5100 le reset est mal fichu (c'est juste lié à l'alimentation) et lui donner un peu de temps au démarrage avant d'activer la configuration peut suffire à régler le pb

Merci pour votre réponse mais j'y avais pensé , j'ai déjà mis "delay(1000); // wait for voltage to stabilize" en début de setup mais cela ne change rien.
De plus je ne lance le serveur qu'après la carte GSM ( il y a un délai de 20 secondes que je mets afin d'être certain qu'elle accroche le réseau.

et pour cela?:

J-M-L:
Quel shield W5100 ?

je ne lance le serveur qu'après la carte GSM

vous n'en avez pas parlé avant. Quelle consommation de courant au boot?


dans votre code ce truc n'est pas bon

char * dow_char_JP(byte days) {
  char *you[] = {"Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi"};
  return you[days];
}

car le tableau des jours est une variable locale temporaire à la fonction et donc le pointeur que vous retournez n'est pas garanti.

faudrait voir sinon si vous pouvez forcer un reset de la carte ethernet au boot, comme vous le faites pour le GSM avec  SIM900power(); // reset carte GSM

Pour régler le problème du tableau des jours, il faut le déclarer en static

lesept:
Pour régler le problème du tableau des jours, il faut la déclarer en static

je voulais le laisser chercher un peu :wink:

D'abord MERCI à tous pour vos réponses et votre aide.
La carte W5100 est à cheval sur la carte arduino qui est alimentée via le jack avec une prise transfo de 9V 1A.
La carte SIM a sa propre alimentation via le jack ( 12 V 1A).
Tout les circuits extérieurs ( écran , relais ..) sont alimentés par une alimentation extérieure 5V 3A ( largement supérieur à ce qu'il faut car ils consomment moins de 1A tous ensemble) .
Toutes les masses sont bien entendus reliées entre-elles.
La carte W5100 est le dernier modèle : Kuman K15-US (nouvelle version avec wiznet W5100 ethernet chip)

Pour le tableau , je suis d'accord , il y aussi d'autres fautes dans la boucle loop que je dois améliorée mais pour l'instant , mon problème principale est le non démarrage de la carte W5100 lors d'une coupure de courant. Le code est à l'état "brut" pour l'instant , il peut largement être amélioré... :slight_smile:

Je fais en effet un reset de la carte GSM car c'est un bug connu , une fois sur 2 ,lors d'une coupure de courant, elle ne se resete pas bien et donc je prend le DTR de la carte GSM pour m'assurer que c'est OK sinon j'envoie un LOW pour la reseter.

Pour la W5100 , je pourrai évidement faire la même chose , mais problème est que le reset de la carte W5100 et celui de l'ARduino Mega sont reliées ensemble .
Alors bien sûr je pourrai sortir la pin de la carte W5100 pour ne pas q'elle soit reliée avec la carte Arduino mais j'ai des doutes que cela fonctionne .
En effet , comme expliqué, le reset via la pin de la carte arduino ne produit pas le même effet sur la W5100 que la pression sur le bouton poussoir de la W5100 ou celle sur le bouton poussoir de l'arduino .
Pourquoi ?
De plus comment déterminer que la carte W5100 est correctement "lancée" ? Contrairement à la carte GSM , il n'y a pas de pin pour mesurer un DTR ou une quelconque information qui me permette de le déterminer ?

En effet , comme expliqué, le reset via la pin de la carte arduino ne produit pas le même effet sur la W5100 que la pression sur le bouton poussoir de la W5100 ou celle sur le bouton poussoir de l'arduino .
Pourquoi ?

faudrait creuser mais les reset étant liés, ils se font au même moment. peut-être faudrait il faire un reset de l'arduino d'abord puis de la carte W5100, comme vous le faites pour le "bug connu" du GSM.

Bonjour

Quel shield W5100 ?

la question été posée et la gestion intentionnelle du Reset du W5100 dépend de la réponse .....

S'il s'agit d'un Shield W5100 officiel le reset du W5100 est piloté par un circuit intégré superviseur d'alimentation CAT811. La sortie /Reset (signal Reset W) de ce dernier dépend du niveau de tension d'alimentation ET du signal reset de l'Arduino (=deux causes possibles de Reset)

Il parait possible de désolidariser l'entrée Reset (= /MR) du CAT811 (écarter la broche avant d'insérer le shield) et d'attaquer cette entrée au moment opportun par une sortie numérique Arduino pour resetter séparément le W5100

N.B : Vue la sortie push-pull du CAT811 mieux vaut ne pas tenter d'agir directement sur l'entrée /Reset du W5100 , passer par le CAT811 !!
sortie CAT811.png

sortie CAT811.png

Merci pour cette réponse concernant la gestion du reset.
J'ai donc tenté ce que vous m'avez préconisé malgré que que je pensai que cela ne fonctionnerait pas : j'ai inséré le shield W5100 en écartant la broche reset afin qu'elle ne soit pas en communication avec la carte Mega arduino.
Cela ne fonctionne pas .. et l'effet est le même que si la pin reset était raccordée à l'arduino !
Tout est reseter mais la W5100 ne fonctionne pas correctement.
Bref rien ne change

Mais avez vous connecté cette broche reset à une pin du mega pour la contrôler en envoyer un reset ?

De plus est-ce que le code reinitialise le W5100 après le reset supplémentaire ? ( leW5100 contient divers registres qui doivent être configurés après le reset pour etablir le fonctionnement... Si mes souvenirs sont bons....)

Oui la pin reset est reliée à la pin 12 via une Resistance de 1 Kohm et lorsque j'appuie sur un bouton poussoir extérieur, je mets un LOW sur cette pin 12 qui active le reset.
Bien vu, je n'ai pas réinitialié le W5100 dans le code du reset et là c'est peut-être mon erreur : je pense à des instructions du genre :server.begin(); ou Udp.begin(localPort);mais là vous marquez un gros point.

Cependant je ne m'explique pas pourquoi lorsque je sors la pin reset du socket du W5100 et que donc elle n'est plus reliée à l'arduino Mega , celui-ci fait un encore un reset general lorsque je pousse sur le bouton-poussoirt extérieur : je l'entends car les relais d'une carte s'active et cela c'est au début du setup et donc cela signifie que le reset general a lieu ... ?
Je vais refaire le test demain en placant les instructions dans la boucle de reinit de la W5100: je vous tiens au courant.
Merci encore.

Bonjour

Bien vu, je n'ai pas réinitialié le W5100 dans le code du reset et là c'est peut-être mon erreur : je pense à des instructions du genre :server.begin(); ou Udp.begin(localPort);mais là vous marquez un gros point.

il faudrait regarder le contenu de la librairie Ethernet pour voir à quel moment , quelle fonction réalise la configuration des registres du W5100.....

celui-ci fait un encore un reset general lorsque je pousse sur le bouton-poussoirt extérieur

le schéma du shield Ethernet en place (origine Arduino ou clone ?) montrerait sans doute la raison

Bonjour,
J'avais également mis ce problème sur le forum anglais et je m'aperçois que je ne suis pas seul à avoir ce problème.
La solution serait celle-ci : Only_Dead_Fish_Go_With_The_Flow: Arduino Wiznet ethernet shield proper reset
Je vais la tester dans les jours qui suivent car je n'ai pas le condensateur et je dois l'acheter..

C'est la première fois que je demande de l'aide sur ce forum et je suis très content de voir que la communauté s'est intéressée à mon problème et a proposée des solutions : j'y reviendra volontiers.. :slight_smile:
MERCI à tous.

Re Bonjour,

J'ai donc testé la solution Only_Dead_Fish_Go_With_The_Flow: Arduino Wiznet ethernet shield proper reset et rien ne va mais je m'y attendais ( cela date de 2010 et je présume que les cartes ont évolué depuis)
J'ai essayé de mettre la R e 10 Kohm au 5V au lieu du 3.3 V sans résultat .
J'ai changé la valeur de la capacité de 10 nf , 47 nf, 100 nF , sans résultat.
J'ai également essayé e mettre une capacité en // sur le bouton poussoir avec ces mêmes valeurs sans résultat.
Bref je pense avoir fait le tour de la question !
Gros problème ces capacités , même lorsque cela fonctionne chez quelques'un peuvent empêcher un programme de se charger dans la carte arduino.

Il n'existe à mon avis que 2 solutions pour éviter ce problème

  1. acheter une bonne carte W5100 ( pas une chinoise) ou prendre une W5200 ou le problème semble ne pas apparaître mais il faut changer de librairie et peut-être adapter le code..
    Remarque : certains écrivent qu'avec la dernière version de la carte , le problème est résolu , mais personne ne dit quelle est la dernière version et comment la détecter !

  2. ma solution peu élégante mais qui marche..
    la carte W5100 possede un lecteur de carte sd et je m'en sert déjà pour des statistiques: cela fonctionne correctement.
    Donc je mets un fichier appelé "shutdown" avec la valeur 1 au départ.
    Au DEBUT du setup, je vais lire le fichier si la valeur est 0 alors je vais écrire la valeur 1 dans le fichier au lieu de 0 et ensuite je mets la pin reset du W5100 à la masse via un carte relais.
    A la FIN du SETUP , je vais écrire la valeur 0 dans le fichier.
    Lorsque le programme redemarrera suite à une coupure de courant un reset automatqieu de la carte W5100 ( et malheureusement de l'arduino) se fera !

frustrant...