74HC595 & reboot

@zoroastre
Dans la famille 74xx il n'y a pas de reset automatique à la mise sous tension sur les circuits contenant des registres.

@ fred133084
Dans la cas particulier de 595 si tu analyses la datasheet, il est expliqué que:

  • la broche MR (master reset) met à zéro le registre à décalage lorsqu'on la met à zéro
  • la broche OE (Output Enable) active les sortie lorsqu'on la met à zéro
  • pour transférer l'état du registre à décalage vers les sortie, il faut appliquer un front montant sur STCP

Donc en toute rigueur pour mettre toutes les sorties à zéro il faut mettre:

  • MR à zéro
  • OE à zéro
  • faire un front montant sur STCP

Ensuite pour piloter le registre il faut mettre MR à un.

Maintenant est-ce que la perte de contrôle des sorties pendant quelques dizaines de millisecondes est-il un réel problème?

@fred133084
Pour éviter toute confusion je précise que la broche MR dont te parles fdufnews n'est rien d'autre que la broche SRCLR dont je t'ai parlé.

Malheureusement le nom change selon le fournisseur :
NXP -> MR (Master Reset)
Texas -> SRCLR (Shift Register Clear)

C'est idiot mais il faut faire avec.

en fait le probleme est lors de la mise sous tension de l'arduino. et non lors de la manipulation des registres une fois l'arduino "en service".

durant le laps de temps que l'ardiuno "boot" les différentes sorties des registres sont actifs ou pas.

et nous n'avons de ce fait aucune maitrise sur aucun pin. puisque l'arduino n'est pas encore démarré, mais en cours de démarrage.

oui bien entendu c'est génant, dans mon cas les registres pilotes mes volets roulants. en l'état actuel en cas de coupure de courant ils se mettent donc tous a se fermer, s'ouvrir, bref a faire n'importe quoi.

je regarde cette histoire de MR alors !

bon il y a du mieux.

une fois sur 5 (en gros) lors du reboot de l'arduino seul maintenant le premier registre réagit le temps du démarrage de l'arduino.
je suis par contre en 1µF

j'augmente du coup ?

en augmentant c'est maintenant le second registre qui prend le relais ...

Soit plus explicite !
Tu augmente quoi ?
Quel est ton schéma ?

Concernant la mise en route du micro-controleur ce ne doit pas être un problème de stabilisation de l'horloge puisque le bootloader est prévu avec les fuses qui vont bien pour avoir une temporisation de 65 ms.
Par contre il semble me rappeler (je ne retrouve plus l'endroit ou je l'ai lu) que les I/O sont configurées en entrée haute impédance.
C'est peut-être là l'origine de ton problème : une entrée haute impédance laissée en l'air capte n'importe qui, il faut une résistance de tirage soit à la masse soit au Vcc pour stabiliser.
Être simplement raccordé au 74HC595 n'est pas suffisant car les entrées du 595 sont aussi à haute impédance.

Pour chaque entrée du 595 essaye de placer une résistance de 10 k entre l'entrée et un rail d'alimentation.
Quel rail : s'il faut que les sorties soient à 0 au démarrage ce sera la masse sinon le Vcc.

Bonjour,

j'ai suivi ce que tu as dis :

Capa = 100 nF R= 10K ohms
GND <----------||-----------|--------///----------->Vcc
|
Reset

j'ai essayé avec un 100 nF c'est pas bon, je suis monté jusqu'a 4µF et idem ou plus exactement le comportement des registres se décale : en fonction de la valeur du condo c'est tel ou tel registre qui "s'allume" (les sorties sont actives un bref instant).

Je vais tenter tes dernières explications !

fred133084:
Bonjour,

j'ai suivi ce que tu as dis :

Capa = 100 nF R= 10K ohms
GND <----------||-----------|--------///----------->Vcc
|
Reset

j'ai essayé avec un 100 nF c'est pas bon, je suis monté jusqu'a 4µF et idem ou plus exactement le comportement des registres se décale : en fonction de la valeur du condo c'est tel ou tel registre qui "s'allume" (les sorties sont actives un bref instant).

Je vais tenter tes dernières explications !

C'est de la bidouille. Le reset ne modifie pas les sorties comme expliqué précédemment. Il faut être rigoureux.
Pendant la phase d'initialisation on ne maîtrise rien c'est factuel et c'est vrais pour tous les systèmes à base de microprocesseur puisqu'il faut que celui-ci s'initialise d'abord.
Partant de ce constat, il faut faire en sorte que le système intègre cette contrainte dans sa conception. Le plus simple (et le plus sur) c'est de faire en sorte que la puissance ne soit pas appliquée tant que le processeur n'a pas terminé son initialisation. Une fois que le processeur est opérationnel (c-à-d que toutes les sorties sont dans un état connu), il active un relais (électromécanique ou électronique) qui va envoyer la puissance vers les étages de puissance.

bon j'ai testé et cela marche pas.

dans ce cas toutes les sorties sont "allumées" :
R= 10K ohms
595 Vcc--------///----------->Vcc

dans ce cas c'est aléatoire :
R= 10K ohms
Gnd--------///----------->595 Vcc

et avec ou sans le pullup sur OE

fdufnews:

fred133084:
Bonjour,

j'ai suivi ce que tu as dis :

Capa = 100 nF R= 10K ohms
GND <----------||-----------|--------///----------->Vcc
|
Reset

j'ai essayé avec un 100 nF c'est pas bon, je suis monté jusqu'a 4µF et idem ou plus exactement le comportement des registres se décale : en fonction de la valeur du condo c'est tel ou tel registre qui "s'allume" (les sorties sont actives un bref instant).

Je vais tenter tes dernières explications !

C'est de la bidouille. Le reset ne modifie pas les sorties comme expliqué précédemment. Il faut être rigoureux.
Pendant la phase d'initialisation on ne maîtrise rien c'est factuel et c'est vrais pour tous les systèmes à base de microprocesseur puisqu'il faut que celui-ci s'initialise d'abord.
Partant de ce constat, il faut faire en sorte que le système intègre cette contrainte dans sa conception. Le plus simple (et le plus sur) c'est de faire en sorte que la puissance ne soit pas appliquée tant que le processeur n'a pas terminé sont initialisation. Une fois que le processeur est opérationnel (c-à-d que toutes les sorties sont dans un état connu), il active un relais (électromécanique ou électronique) qui va envoyer la puissance vers les étages de puissance.

donc si je comprend bien cela reprend mon idée de transistor piloté par un pin de l'arduino. un thyristor fait l'affaire ?

un thyristor fait l'affaire ?

Non un thyristor ne fait pas l'affaire. Un thyristor reste enclenché tant qu'il est parcouru par du courant. Donc tu ne pourrais pas le désactiver à la demande.
Déjà est-ce ton circuit de puissance fonctionne en continu ou en alternatif?
Quelles sont les courant mis en jeu en utilisation et au démarrage?
Pour le continu un mosFET ferait l'affaire. Attention au circuit de commande les tensions commutées sont sûrement supérieures aux 5V de l'arduino.
Pour l'alternatif un triac (avec son circuit de commande) ou un relais statique.
En fait le relais statique est une solution applicable aussi bien au continu qu'à l'alternatif (il existe des modèles pour l'un ou pour l'autre). C'est plus cher mais plus simple pour qui ne veut pas se prendre la tête.
Le relais électromécanique et la solution simple, passe partout et bon marché. Comme c'est un circuit d'activation général, le relais ne commutera pas souvent il pourra durer longtemps. La seul point négatif c'est la puissance nécessaire à son maintient en position active.
Les composant sont à dimensionner en fonction de la tension du courant consommé et du courant d'appel bien entendu.

Bonjour,
ce qui pose problème c'est le premier niveau de "puissance" que pilote l'arduino.
Je m'explique :
j'ai trois niveaux de puissance (ce qui n'est pas vrai car un niveau de puissance est considéré comme > à 50V si je ne me trompe, mais admettons).

ground zéro : 5Vcc : l'arduino
niveau 1 : 5Vcc (masse commune) - périphériques en entrée ou sortie tout autour de l'arduino (dont donc les fameux 595).
niveau 2 : 12Vcc, séparé par optocouleur (masse commune de mémoire - voir mon tonton si c'est pas bon lol) : comprend donc tout ce qui est relais n co pilotant le niveau supérieur
niveau 3 : 220Vac séparé par optocoupleur on est dans les appareils 220V de la maison.

en gros on protège le noyau central d'une panne ou court circuit pouvant l'endommager. Si un truc doit "tomber" il tombe seul et on tente de limiter la propagation du court circuit. (j'espère avoir tout compris ce qu'il m'a expliqué, je raconte peut être des conneries... j'espère pas).

donc si ce premier niveau est "maitrisé" les autres en dépendent donc il n'y aura plus de problème de comportement empirique.

pour le thyristor je trouve qu'il est parfait quand même non ?
lors du reboot de l'arduino il est inactif car pas enclenché par l'arduino et donc il n'alimente pas en 5V les 595.
une fois l'arduino démarré on peut alors l'allumer tranquilou une fois pour toute et il le reste jusqu'a la prochaine coupure de courant, je pourrais presque le faire via mon multiplexer non ?

le mofset est une bonne piste aussi, cependant il va nécessiter une consommation électrique continue comparé au thyristor non ?

fred133084:
donc si je comprend bien cela reprend mon idée de transistor piloté par un pin de l'arduino. un thyristor fait l'affaire ?

bonjour
si tu travaille sur de la basse tension continue, l'ideal est surement un mosfet N en logic commande
ça coute peanuts cacahouètes :grin: et ça s'interface sans aucun composants supplementaires.
perso c'est ce que j'utilise dans ce genre de cas.

pour le thyristor je trouve qu'il est parfait quand même non ?
lors du reboot de l'arduino il est inactif car pas enclenché par l'arduino et donc il n'alimente pas en 5V les 595.

Oui et non. S'il y a reboot sans coupure de l'alimentation le thyristor ne tombe pas. Cas lors de la mise à jour du code par exemple.

mais si il tombe pas c'est pas génant non ?
je cherche a protéger le système contre des comportements anarchiques qui surviennent a la mise en tension de l'ensemble.
donc une fois tout le monde est initialisé cela ne pose plus de soucis dans mon cas.
l'arduino meme si il subit une mise a jour de son code il va reprendre sa pile de "commandes" en cours de traitement et finir tranquilou son taf (ça c'est mon code !).
j'ai implémenté le reset par prog, et effectivement lors d'un reset volontaire de l'arduino les registres ne bronchent pas. Ils restent là ou ils en étaient.

...

mais en fait, ma solution n'est pas bonne. Car pendant le reset de l'arduino du coup les actions continues sans fin ! donc j' en vient au mofset. Et effectivement là on controle quand le "niveau de puissance" est alimenté, ou pas. (c'est bien d'écrire et penser en même temps...).

bon en mosfet je suis pas riche ... j'ai :
IRF510
IRL540N

je vais pas loin avec ça.

fred133084:
bon en mosfet je suis pas riche ... j'ai :
IRF510
IRL540N

je vais pas loin avec ça.

bonsoir
Tu a besoin de quelle intensité et sous quelle tension en conditions max ?

de rien "presque rien" :
5V et qqs mA (de quoi alimenter les optocoupleurs : en simultanés au max je dirais 11 optocoupleurs MOC3041 si je ne m'abuse).

je ne sais plus si du coup cela représente trop de mA que ll'arduino puisse fournir et si du coup il n'y a pas un PNP avant l'optocoupleur !!

fred133084:
de rien "presque rien" :
5V et qqs mA (de quoi alimenter les optocoupleurs : en simultanés au max je dirais 11 optocoupleurs MOC3041 si je ne m'abuse).

ok
je mettrais simplement un petit bs170 , c'est pas du Nlogic donc mettre une petite R 10K entre gate et gnd

pas de chance ! il faisait pourtant partie de ma liste d'achat mais au dernier moment j'en ai pas pris... ben voila, un truc de plus a rajouter a la prochaine commande... à suivre donc !