Registre à décalage 74HC595 sous MicroPython

Bonjour à tous,

MCHobby investit du temps et de l'argent dans la réalisation de traduction et/ou documentation. C'est un travail long et fastidieux réalisé dans l'esprit Open-Source... donc gratuit et librement accessible. 

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


Aucun commentaire