Go Down

Topic: 74HC595 & reboot (Read 2987 times) previous topic - next topic

fred133084

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).

fred133084


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

Quote
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 ;)

JMe87

vas-y, tu ne risques rien
Jacques

fred133084

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é ;)

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.


Snaaaa

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

fdufnews

Quote
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.

fred133084


Quote
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 ?

68tjs

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 = 10k*100nF = 1ms le basculement devrait se produire à 0,3*RC = 300µs

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

fred133084

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... :(

68tjs

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

zoroastre

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.
Gné! ;)

fdufnews

#11
Mar 11, 2013, 09:06 pm Last Edit: Mar 11, 2013, 09:08 pm by fdufnews Reason: 1
@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?

68tjs

@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.

fred133084

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 !

fred133084

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 ?

Go Up