Voilà, j'ai un arduino nano et je souhaite rajouter des sorties numériques. J'ai donc fait quelque recherches et suis tombé sur le composant : 74hc595. J'ai bien trouvé tous les branchements et il s'avère qu'il est possible de monter ce composant en cascade.
Ma première question est :
Combien peut-on mettre de 74hc595 d'affilé ?
Mon projet étant d'allumer environ 6Led et alimenter un potentiomètre par 74hc595. Il me faudrait probablement 6 74hc595 en cascade.
L'autre question est donc la suivante :
Est-ce que je peux alimenter mes 74hc595 avec une alimentation externe de 5V/2A et ainsi alimenter mes leds sans problèmes parce qu'alimenter tous mes composants avec la seule alimentation de l'arduino ferait surement trop ?
Quand des registres à décalage HC595 sont mis en cascade il ont en commun les deux signaux d'horloge, qui sont donc mie en parallèle.
Les 2 sorties numériques de l'Arduino générant ces 2 horloges voient donc chacune n entrées d'horloge, s'il y a n HC595.
C'est cette mise en, parallèle des entrées (HC595) sur une sortie (Mega328) qui induit une limite.
Trop d'entrées sur une même sortie dégrade le signal, dégradation croissante avec la fréquence ds signaux à transmettre.
Où est cette limite ? Il faudrait éplucher les caractéristiques électriques des sorties Arduino et celles des entrées d'horloge d'un HC595 , tenir compte des capacités parasites du câblage....pour la définir rigoureusement.
ça renvoie à la notion de 'sortance' (fan-out) et 'entrance '(fan-in) (d'une ou plusieurs familles de circuits intérgrés logiques)
10 HC595 en cascade sont sans doute gérables sans pb avec un Arduino, peut être même sur une plaque d'essai.
Mon projet étant d'allumer environ 6Led et alimenter un potentiomètre par 74hc595. Il me faudrait probablement 6 74hc595 en cascade.
Un 74HC595 est un shift register 8 bits, donc 8 sorties. Pourquoi cascader ?
Est-ce que je peux alimenter mes 74hc595 avec une alimentation externe de 5V/2A et ainsi alimenter mes leds sans problèmes parce qu'alimenter tous mes composants avec la seule alimentation de l'arduino ferait surement trop ?
C'est un bus i2C et tu peux ajouter jusqu'à 64 ports (8x8). Avec la bibliothèque, les entrées/sorties des modules se traitent exactement comme des E/S de l'Arduino.
Pour la question de l'alimentation, sans problème pour autant que le GND de ton alimentation soit relié au GND de l'Arduino, dans le cas des modules i2C, tu mets ton alimentation externe 5V sur la pin VCC.
Tant qu'a faire, étant donné que les modules se vendent souvent par lots de 5 ou 10 ou plus, autant avoir à sa disposition quelques module à tout faire. Le PCF8574 est bidirectionnel, ce qui n'est pas le cas du 74HC595, pour à peu près le même prix.
l' "expanseur" PCF8574 n'est pas bidirectionnel mais "quasi bidirectionnel".
La nuance n'est pas négligeable.
Le PCF8574 génère une interruption quand l'état sur une de ses sorties est forcée par le monde extérieur.
Après détection de l'interruption il reste de la gestion à faire.
Une bibliothèque pour gérer cette interruption a été développée sur ce forum.
D'autre part on ne peut mettre que 8 pcf8574 en service.
Le PCF8574 existe en 2 références avec une adresse principale différente ce qui permet en approvisionnant les deux références de porter le nombre max à 16.
Le circuit MCP23017 (I2C) de chez Microchip est réellement bidirectionnel et de plus il est 16 bits.
Adresse sous 3 bits donc 8 MCP23017 max soit 128 bits max.
La version MCP23S17 est SPI donc tant qu'il reste des pins libres pour le ChipSelect on peut mettre autant de circuit que l'on veux.
On trouve les deux versions sous forme de module.
Pour le 74HC595 on peut "tamponner" l'horloge (certains disent buffeuriser) avec un boîtier supplémentaire de porte logique pour augmenter la sortance.
Ce n'est pas cela le plus perturbant. Les bits ne sont pas adressables individuellement comme dans un expenseur, il faut reconstituer le mot complet à chaque fois et 6 75HC595 en série cela fait un mot de 48 bits.
Bonsoir 68tjs
Tu dis qu'ils génèrent une interruption, mais avec l'i2C, on ne s'occupe pas des interruption ?
Pour ce qui est du bidirectionnel, c'est vu comme tel au niveau de l'Arduino!
Pour lire une entrée du PCF8577, on peut le faire en polling, comme s'il s'agissait d'une GPIO normale, par lecture de cette entrée via le bus I2C ou par interruption, en lisant l'entrée de la même manière pendant l'interruption.
MCP23017 : monsieur fait dans le luxe.
MCP23008 aussi : 8 bits
MCP23S017 : 16 bits SPI
MCP23S008 : 8 bits SPI
J'adore ces circuits. Interruption dispo également.
hbachetti:
Pour lire une entrée du PCF8577, on peut le faire en polling, comme s'il s'agissait d'une GPIO normale, par lecture de cette entrée via le bus I2C ou par interruption, en lisant l'entrée de la même manière pendant l'interruption.
Mais tout ça est transparent pour l'utilisateur lambda qui utilise une bibliothèque? ou me trompe-je?
@jpbbricole
Lis la datasheet ce circuit est présenté par son fabricant comme QUASI bi-directionnel et il utilise les interuptions. La seule source d'information fiable est la datasheet.
L'I2C et les interruptions n'ont rien à voir entre eux mais sont utilisés conjointement.
Quand il y a eu un changement d'état sur une "sortie" il y a génération d'une interruption pour le signaler.
Si l'interruption est gérée, et toutes les bibliothèques ne la gère pas loin de là, il faut aller lire ce qu'il y a sur les sorties avec l'I2C.
Il ne faut pas croire que toutes les bibliothèques gérent completement un module ou un circuit intégré.
Les auteurs font des choix qu"ils précisent rarement.
Exemple les modules DS3231 ont tous une eeprom, combien de bibliothèque gérent cette eeprom ?
Perso je n'en connais aucune.
Une bibliothèque qui ne gérait pas l'interruption a été modifiée par un groupe ici sur ce forum. Il doit être assez simple de retrouver la discussion avec le moteur de recherche du forum. Tu pourra lire "en direct" son développement.
C"est bien du "quasi" et non pas du vrai bi-directionnel.
'quasi -bidirectionnel' , la précision peut permettre d'éviter des mauvaises surprises.
Entrée ou sortie ? ......pas vraiment au niveau matériel....Une entrée se fait içi en lisant l'état d'une sortie mise à 1 !! (mise à un faiblement par un pull-up interne faible de 100µA ou fortement par un pull-up externe)
En effet, Trop d'entrées sur une même sortie dégradera surment le signal mais .. Comment puis-je faire pour justement ne pas le dégrader ? Ou comme tu dis, une dizaine ne devrait pas poser de problèmes ?
En ce qui concerne le ground de l'alumentation externe relié au GND de l'arduino, c'est sur tous les grounds ?
Je souhaite cascader les HC595 car je souhaite mettre 6 HC595 avec sur chacun d'eux 6Leds et elles seraient branchées en série, probablement, a moins qu'il y ait meilleur solution ? Je suis prenneur ! Le but des leds seraient de les allumer en fonction de la variation de valeur d'un potentiometre. Il serait basé de 0 à 127 et tous les tel nombre (exemple 18) ça allume une led.
Pour le module I2C, le problème est que j'aurais un petit écran OLED I2C 0.96” monochrome (SSD1306). Je vais donc devoir utiliser les sorties SDA et SCL.
dusk:
Pour le module I2C, le problème est que j'aurais un petit écran OLED I2C 0.96” monochrome (SSD1306). Je vais donc devoir utiliser les sorties SDA et SCL.
i2C est un bus sur lequel tout le monde peut coexister et partager SDA et SCL, pourvu qu'il n'aient pas la même adresse, ainsi ton affichage et les modules E/S PCF8574 ne se poseront aucun problème entre eux
Mon projet étant d'allumer environ 6Led et alimenter un potentiomètre par 74hc595. Il me faudrait probablement 6 74hc595 en cascade.
Je souhaite cascader les HC595 car je souhaite mettre 6 HC595 avec sur chacun d'eux 6Leds et elles seraient branchées en série
C'est incohérent et incompréhensible.
Chaque HC595 pilote six LEDs en série. Si elles sont en série, tu as besoin d'une seule sortie pour piloter les six.
Si elles sont en série, la tension pour les piloter sera de 6x1.6V au minimum (LEDs rouges), et un transistor + une résistance.
Il serait basé de 0 à 127 et tous les tel nombre (exemple 18) ça allume une led.
Si elles sont en série, tu ne peux pas allumer une seule LED à la fois.
Quel type de LEDs ?
Quel nombre au total ?
Sincèrement revois ta copie. C'est très mal décrit.
jpbbricole:
i2C est un bus sur lequel tout le monde peut coexister et partager SDA et SCL, pourvu qu'il n'aient pas la même adresse, ainsi ton affichage et les modules E/S PCF8574 ne se poseront aucun problème entre eux
Bonne journée
Cordialement
jpbbricole
Hello !
Donc en quelques sorte, si je branche le module I2C sur un autre port logique (Exemple D7) et que je branche SDA et SCL sur les deux (OLED et module) ça fonctionnera ?
Hello hbachetti,
Hum oui, c'est vrai que je me suis mal exprimé, désolé. En gros, il me faut une LED par sortie afin de pouvoir les contrôler.
Admettons que je ne prenne qu'un HC595, avec sur celui-ci 6 LEDs. 1 potentiomètre que je branche directement sur l'aduino.
Ce potentiomètre me donnerais une valeur en fonction de l'oscillement de celui-ci. Cette valeur serait comprise entre 0 et 127, et je voudrais que par exemple lorsque la valeur est de 18, 1 LED s'allume, puis lorsque la valeur est de 50, il y ait par exemple 3 leds qui s'allument.
Le but serait donc d'avoir 8 potentiomètres et donc 8x6 Led puisqu'il y aurait 6 LEDs par HC595.
Pour les LEDs j'ai choisi des led SMD pour que ce soit plus petit et prenne moins de place. J'ai acheter avec ceci, des resistances SMD. (SMD LED-3528 RGB)
ça ne devrait pas. Mais ça dépend aussi de la longueur du câble et de la fréquence de l'horloge
une bonne pratique consiste à mettre un résistance genre 1 kOhms en fin du fil d'horloge
c'est sur tous les grounds
oui
et elles seraient branchées en série, probablement,
non, une led + résistance par sortie du hc595. Pour le fun tu peux brancher tantôt au gnd, tantôt au +5 volts. Le programme dicte ce qui doit être allumé ou pas
le problème est que j'aurais un petit écran OLED I2C
ce n'est pas un problème : tout peut se brancher en I2C, il faux fixer les adresses et le programme dit à chacun ce qu'il doit faire. L'avantage du hc595, dans la limite de ton cas, c'est qu'il n'y a pas besoin de fixer les adresses
Je vais surement les laisser proche de l'arduino, ce sera des câbles très proches avec une petite distance.
Je vais suivre ton conseil et rajouter une resistance de 1KOhm sur le fil de l'horloge. Quand tu dis "fin du fil" c'est avant qu'il arrive sur le premier module HC595 ou le dernier ?
Très bien, j'essaierai à l'avenir d'utiliser le module I2C, en tout cas, sur un prochain projet !
dusk:
Donc en quelques sorte, si je branche le module I2C sur un autre port logique (Exemple D7) et que je branche SDA et SCL sur les deux (OLED et module) ça fonctionnera ?
Je ne sait pas ce que tu désigne par module i2C, les PCF8574 et tes affichages OLED sont des modules i2C qui se partagent le bus i2C
par les signaux SCL et SDA donc, pour ton montage, affichages + modules E/S plus que 4 fils (SDA SCL + et -), c'est pas le pied
Sauf erreur, tu ne peut avois qu'un bus i2C sur un Nano.