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