Voilà plusieurs jours que je galère à essayer de faire fonctionner mes leds multiplexées grâce au shift register 74HC595N (datasheet: 74HC595N Fiches technique(PDF) - NXP Semiconductors ) . Le problème est que suivant les bits que je lui insère, les sorties ne se comportent pas de la façon de je m'attends...
Admettons que j'entre le byte présent dans le code suivant. A ce moment là je mesure 5 volts à la dernière sortie (Q7). Déjà là je comprends pas, la transmission des bits se faisant à partir du poids faible, c'est la sortie Q0 qui devrait être à 5 volts, non ?
Ensuite si j'entre le byte suivant : 00000010, c'est la sortie Q4 qui est à 5 volts et le reste à 0. Et c'est pareil pour chaque byte différent, l'état des sorties ne correspond pas au code binaire...
J'ai vérifié et re-vérifié le câblage avec plusieurs tutos différents, essayé avec 4 registres différents, c'est toujours pareil... Est-ce qu'il y a quelque-chose que j'aurais zappé dans mon code ou dans la compréhension du registre à décalage ?
la donnée (octet) que tu veux envoyer doit êtres formaté.
Il faut préciser son type : décimal, hexadécimal etc...
Dans ton cas tu manipule des bits alors pense à passer la valeur en binaire : b00000001
Le registre à décalage fait des décalage à gauche (l'entrée se fait par le poids faible et les bits vont vers les poids forts)
Dans ton code tu indique LSBFIRST se qui fait que tu sors en premier le poids faible. Par conséquent le poids faible de l'octet que tu envoies se retrove dans le poids fort de ton registre à décalage.
Pardon j'avais mal lu, j'avais lu Q7' dans ton premier post.
Effectivement si tu envoies b00000001 en LSBFIRST ton bit de poids faible (1) normallement en Q0 deviendra ton bit de poids fort (Q7)
Ah oui je vois maintenant, c'est plus clair. J'ai simplifié au maximum mon code en m'inspirant de ceux trouvés dans les tutos (donc les exemples sont assez compliqués je trouve), j'ai eu du mal à comprendre le fonctionnement du registre à décalage..
Je m'étais embrouillé dans mes tests, effectivement avec le B devant ça fonctionne
Donc si je comprends bien,
on met la latchPin à 0 pour activer la lecture des données
On envoie les données au registre avec la fonction shiftOut qui permet d'envoyer les bits en série avec à chaque fois un coup d'horloge pour les décaler vers le poids fort et ainsi ils se retrouvent tous face à la sortie correspondante.
on met la latchPin à 1 pour que le registre mémorise l'état des sorties jusqu'à la prochaine transmission de données.
Ah oui je vois maintenant, c'est plus clair. J'ai simplifié au maximum mon code en m'inspirant de ceux trouvés dans les tutos (donc les exemples sont assez compliqués je trouve), j'ai eu du mal à comprendre le fonctionnement du registre à décalage..
Je m'étais embrouillé dans mes tests, effectivement avec le B devant ça fonctionne
Donc si je comprends bien,
on met la latchPin à 0 pour activer la lecture des données
On envoie les données au registre avec la fonction shiftOut qui permet d'envoyer les bits en série avec à chaque fois un coup d'horloge pour les décaler vers le poids fort et ainsi ils se retrouvent tous face à la sortie correspondante.
on met la latchPin à 1 pour que le registre mémorise l'état des sorties jusqu'à la prochaine transmission de données.