74HC595 & reboot

Bonjour a tous,
J'ai pas mal avancé sur ce registre de décalage, cependant je rencontre un problème.
Lors de la mise en tension de l'arduino tous les pins des différents registre sont "passant" une fraction de seconde.
Une fois le setup atteint je fais un init des différentes états des pins du registre est c'est ensuite ok je reprend la main.

Le problème est bien lors de la mise en route de l'arduino.

Avez vous une astuce ?

merci

(j'ai pensé utiliser un pin de l'arduino qui servirait a "ouvrir" un NPN une fois le setup lancé permettant ainsi de contrôler l'alimentation des registres).

j'ai trouvé un post qui semble avoir eu la même idée que moi :

The OE-Pin of the 74HC595 is pulled up via a 4.7k resistor to prevent output while switching on and booting.

cela semble la solution mais mon savoir en électronique me dit de ne pas tester cela seul !!!

si vous avez un schéma avant que je ne grille un truc :wink:

vas-y, tu ne risques rien
Jacques

super ça marche ! je dois avouer avoir un peu flipper quand même... mais j'ai regardé le datasheet et effectivement la broche OE peut etre en LOW ou HIGH donc pas de soucis !!
je vais finir par me familiariser petit à petit à toute cette électricité :wink:

donc voila, pour la pérennité :

pour éviter que le 74HC595 lors d'un reset ou démarage de l'arduino n'active toutes voir aléatoirement ses sorties il convient de mettre la broche OE en pull-up et non au gnd comme indiqué ici et là sur internet.

Un grand merci pour la diffusion de la résolution, je me posais la question depuis un moment aussi :slight_smile:

pour éviter que le 74HC595 lors d'un reset ou démarage de l'arduino n'active toutes voir aléatoirement ses sorties il convient de mettre la broche OE en pull-up et non au gnd comme indiqué ici et là sur internet.

La broche OE tirée au plus ne fait que mettre les sorties en haute impédance. Donc les lignes derrières ne sont plus polarisées. Si ce sont des LEDs c'est sans effet puisque cela les éteints. Par contre si des circuits logiques sont connectés sur ces sorties alors là on ne maitrise plus rien.

fdufnews:

pour éviter que le 74HC595 lors d'un reset ou démarage de l'arduino n'active toutes voir aléatoirement ses sorties il convient de mettre la broche OE en pull-up et non au gnd comme indiqué ici et là sur internet.

La broche OE tirée au plus ne fait que mettre les sorties en haute impédance. Donc les lignes derrières ne sont plus polarisées. Si ce sont des LEDs c'est sans effet puisque cela les éteints. Par contre si des circuits logiques sont connectés sur ces sorties alors là on ne maitrise plus rien.

tu me rassures pas là du coup !

quel est ton conseil ? une solution alors ?

Généralement on agit de préférence sur la broche "Reset" (ou RAZ = Remise A Zéro en français).
En fonctionnement normal "Reset" doit être à l'état "Haut".
Pour provoquer une remise à zéro des sorties pendant la phase de mise en route il faut momentanément mettre la broche "Reset" à l'état bas.

C'est faisable en câblant un réseau RC sur la broche reset :

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

Si le temps de RAZ n'est pas suffisant essaye avec 100k

A la mise sous tension le condensateur n'est pas chargé il impose une tension nulle.
Le condensateur se charge jusqu'à atteindre 5V.
En général un circuit HCMOS bascule pour Vcc/2 soit ici 2,5V. Quand la tension aux bornes du condensateur dépassera 2,5V le registre à décalage sera "libéré".
Avec la constante de temps RC = 10k100nF = 1ms le basculement devrait se produire à 0,3RC = 300µs

Ucondensateur = Vcc*(1 - exponentielle(-t/RC) )

aie cela commence mal je trouve pas de pin reset sur ce composant.

la seule solution que je trouve ici est la sur internet serais en gros de faire ce que je disais : controler le pin OE ou MR via l'arduino... :frowning:

D'accord c'est pas marqué exactement "reset" mais c'est bien présent dans les spécifications techniques:
entrée marquée SRCLR qui aboutit sur une entrée interne marquée R (comme Reset)

et dans la table de vérité on lit :

SRCLR = Low -> Shift register is cleared

Bonjour,

J'ai un peu de mal à comprendre le problème puisque je n'ai à mon souvenir jamais rencontré ce problème, aussi bien avec des 74HC ou des TPIC.

J'observe donc ce sujet dubitatif.

Lors de la mise hors tension, les registres sont réinitialisés de facto, me semble-t'il...

J'aimerais aussi savoir si chaque CI possède un condo de 100nF au plus proche, reliant la tension et la masse.

Bref!
Je vais reprendre ma platine et vérifier toussa.

Zoroastre.

@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