Aide Pb de reset à l'arrêt de la liaison USB

V

vax

Modérateur
Bonsoir à tous,
Je boucle un projet utilisant un Controllino Maxi (un Arduino Mega encapsulé comme un automate, j'aime beaucoup leurs produits) qui utilise la liaison USB native pour dialoguer avec une IHM à base d'un Raspberry Pi 3b (de mémoire) et son écran tactile.
Tout fonctionne parfaitement, mais j'ai un fonctionnement qui m'étonne (même si c'est bien pratique).
Lorsque j'éteint le Pi (arrêt propre par la commande de shutdown), l'Arduino se reset et je ne comprend pas pourquoi ni comment.
Par contre, si j'utilise le moniteur de l'IDE Arduino et que je débranche le câble USB je n'observe pas le phénomène.
Je précise que mon "automate" est alimenté en direct, pas via la prise USB comme avec une simple care Arduino.

J'en suis à imaginer de me faire un espioneur de liaison USB pour voir si à l'extinction du PI il n'y aurait pas un caractère "spécial" qui transiterai sur la liaison...

Merci d'avance si l'un de vous aurait une explication.
 
C

cr-_-

Compagnon
Bonjour,
Sur les arduinos avec un usb non natif il y a une circuiterie qui permet le reset de la carte sans utiliser une ligne dédiée (ça évite de devoir appuyer sur un bouton quand on veut flasher la carte)

Ça utilise le signal DTR (data terminal ready) qui est à l'état haut en temps normal.

Pour faire le reset de la carte arduino on passe ce signal à 0 et on a le reset effectué avec un condensateur série

Quand on débranche la carte ce signal tombe à 0 mais pas assez vite pour reseter la carte (ça dure le temps de la baisse de tension d'alimentation)

Quand on éteint proprement l'hôte il passe volontairement le dtr à 0 (desinitialisation du driver) et là le front est suffisamment raide pour activer le reset
 
V

vax

Modérateur
Bonjour, merci pour cette piste.
Je ne trouve pas beaucoup d'infos sur la manière interne dont est gérée le port USB natif...
C'est un ATmega2560... Pour moi le port usb est natif...

Un schéma pour montrer à quoi ressemble mon module
 

Fichiers joints

  • CONTROLLINO-MAXI-Pinout.pdf
    701.7 KB · Affichages: 35
V

vax

Modérateur
Je viens de relire la doc (pas hyper épaisse)...
Il parlent de :
"The main function of the USB port is to program the CONTROLLINO. Inside the CONTROLLINO there is a USB to UART converter which generates a virtual COM-Port on the PC. You can also use this port to give data to a terminal or another program."
Je vais les questionner là dessus, effectivement, ils ont peut-être mis en interne une interface qui générerait le signal DTR dont tu parles...

Au plaisir de vous lire
 
C

cr-_-

Compagnon
De ce que je vois sur le block diagram de la carte: https://www.controllino.com/wp-content/uploads/2022/12/SEM14043_MAXI_block_diagram_01.pdf c'est un atmega16U2 qui fait la conversion usb <-> uart, on voit bien le signal reset

La carte arduino mega a le même, donc on peut raisonnablement farfouiller leurs schéma ça devrait être la même chose: https://store.arduino.cc/products/arduino-mega-2560-rev3 dans la partie schmatique on voit bien l'atmega16u2 avec le fil nommé DTR qui à travers une capa va trigger le reset de l'atmega2650
 
V

vax

Modérateur
Mazette ! Mais comment as-tu trouvé ce document ?

C'est quand même étonnant de voir que le débranchement de la liaison ne déclenche pas le RESET.

MERCI BEAUCOUP.
 
G

greg_elec

Compagnon
Il suffirait de déssouder le C7 ...
Mais est-ce vraiement raisonable ???
 
S

speedjf37

Compagnon
Bonjour,

C'est un phénomène connu et gênant dans certains cas.



Indispensable sur un Arduino utilisé en programmateur ISP sinon on reset le programmateur et la cible.
Avec le condo sur le prog on ne reset que la cible

JF
 
Dernière édition:
V

vax

Modérateur
Il suffirait de déssouder le C7 ...
Mais est-ce vraiement raisonable ???
ABSOLUMENT PAS !
Cela ne se produirait pas il faudrait que je programme la fonction !
Mais je n'arrivais pas à comprendre pourquoi ça le faisait "tout seul" !

@speedjf37 : merci pour ces explications supplémentaires.
 
S

speedjf37

Compagnon
C'est un ATmega2560... Pour moi le port usb est natif...
la MEGA 2560 n'as pas d'USB natif comme la plupart des Arduino (exception Léonardo (16u2).

L'interface USB est un atmega16u2 sur les originaux et un CH340 sur les clones.

JF
 
V

vax

Modérateur
Oui, j'ai compris ça suite à la lecture des schémas fournis par @cr-_-
(Je crois que j'ai confondu un peu vite port série et port USB.... OUUUUUUUuuuuu le vilain Vax !)

Encore merci pour toutes ces précisions.

J'ai fais les modifications en conséquences.
Je garde la solution d'origine qui fait un RESET de mon automate en cas d'extinction du Pi.
Et j'ai rajouté un RESET matériel programmé, une sortie reliée à la borne RESET via une résistance d'1K. Si l'opérateur demande un redémarrage de l'IHM, un code est envoyé à l'automate qui met la sortie à 0 et déclenche le RESET de l'automate.
(j'ai rien inventé, c'est décrit dans la doc Arduino).

Merci à tous.
 
V

vax

Modérateur
Un peu mort de rire, je vous partage la traduction de la réponse donnée ce matin par le constructeur à ma question du 14 décembre posée sur leur forum !

"Bonjour,

oui, c'est un comportement normal de l'interface USB Arduino. Cette fonction (réinitialisation basée sur DTR) est utilisée pendant la programmation. DTR est basculé par le système lorsque le port USB virtuel est ouvert/fermé et il est très difficile d'éviter cela.

Mais il existe une solution pour éviter ce comportement. Interconnectez les signaux 5V a et RESET au niveau du pinheader X1. (Mais vous ne devez pas utiliser le bouton de réinitialisation !)

Il s'agit d'un hack non officiel. Il ne s'agit pas d'une solution pour un produit ou une application industrielle."

Je partage pour donner l'info du "hack non officiel", mais comme dit plus haut, j'ai ma solution "sérieuse" qui est en place.
 

Sujets similaires

Haut