Registre à décalage 74HC595 sous MicroPython
Bonjour à tous,
SI vous aimez nos traductions et documentations ALORS aidez nous à en produire plus en achetant vos produits chez MCHobby.
Aussi appelé "Serial to Parallel converter" le 75HC595 est souvent utilisé par les Makers pour ajouter des sorties sur un Arduino.
Je me souviens qu'il était l'un des premiers tuto écrit pour le Kit ARDX Arduino.
L'intérêt du HC595 est qu'il utilise 3 signaux et que le 74HC595 peut être chaîné pour ajouter 8, 16, 32, 48, 64, ... sorties.
74HC595 - disponible chez MCHobby |
Ce qu'il y a a bien avec le HC595 c'est qu'il ne modifie pas l'état de ses sorties pendant l'envoi des données! Le HC595 dispose d'une mémoire tampon interne (Buffer en anglais) qui est recopié en une opération vers les sorties en activant la broche Latch.
Exemple pratique
Je me suis mis en tête de réaliser mon propre programmeur d'EEPROM sous MicroPython à partir d'un Raspberry-Pi Pico.
J'ai donc besoin de 16 lignes d'adresses, 8 lignes de données et quelques autres signaux.
Les 16 lignes d'adresses seront prise en charge par deux 74HC595 pour produire une adresse 16bits sous 5V!
Bibliothèque 74HC595
Le dépôt esp8266-upy dispose maintenant d'une entrée 74HC575 avec la bibliothèque sn74hc595.py .
Il suffit d'indiquer les différentes broches de contrôle à la création de l'objet ShiftReg et il s'occupera de la transmission des données vers le HC595
74HC595 sous MicroPython
Aujourd'hui c'est pour MicroPython que j'ai écris un tuto (et un pilote) pour piloter un ou plusieurs 74HC595 depuis un Raspberry-Pi Pico.
Un seul 74HC595
Un seul 74HC595 Source: esp8266-upy/74HC595 |
Comme j'ai besoin de sorties en 5V, j'ai alimenté le HC595 en 5V depuis la broche VBUS du Pico.
Pour commander les sorties, il suffit d'envoyer un octet (une valeur 8 bits entre 0 et 255) avec la méthode write_byte() .
from sn74hc595 import ShiftReg from machine import Pin import time # Broches Data, Clock, Latch, Reset reg = ShiftReg( Pin(20), Pin(21), Pin(19), Pin(18) ) reg.write_byte( 255 ) # Mettre toutes les sortie à 1 time.sleep(1) reg.write_byte( 0 ) # Mettre toutes les sortie à 0 time.sleep(1) reg.write_byte( 0b10101010 ) # Octet au format binaire time.sleep(1) reg.write_byte( 0b01010101 ) time.sleep(1) reg.write_byte( 0b00001110 ) time.sleep(1) reg.write_byte( 255 ) # # Toutes les sorties à 0 time.sleep(1) reg.reset( latch=True ) # Reset internal buffer + Apply to the output
Plusieurs 74HC595
Il est aussi possible de chaîner les 74HC595 permettant ainsi d'avoir un multiple de 8 bits en sortie.
Voici un exemple de sortie 16 bits.
Plusieurs 74HC595 Source: esp8266-upy/74HC595 |
Bien qu'il existe une méthode write_bytes() permet d'écrire un nombre arbitraire d'octets (en commençant par le dernier)... mais la bibliothèque offre également la méthode write_word() bien plus à propos puisque un mot (word en anglais) fait 16 bits de long.
from machine import Pin from sn74hc595 import ShiftReg import time reg = ShiftReg( Pin(20), Pin(21), Pin(19), Pin(18) ) reg.write_word( 0xFDCA ) # écrire une valeur 16bits en MSBF
La valeur 0xFDCA (codage hexadécimale) fait exactement 16bits.
La représentation binaire est 0b1111110111001010 correspondant à chacun des digits HexaDecimale 0xF D C A ==> 0b1111.1101.1100.1010
Et comme vous pouvez le voir, cela fonctionne plutôt bien :-)
Ressources
- Acheter un 74HC595 chez MCHobby
- Utiliser un 74HC595 sous MicroPython (GitHub MCHobby)
Écrire un commentaire