#PiPico2
Explore tagged Tumblr posts
draegerit · 9 months ago
Text
Raspberry Pi Pico 2 - Schieberegister 74HC164D in MicroPython programmieren
Tumblr media
Im letzten Beitrag Schieberegister 74HC164D: Programmierung und Einsatz am Arduino Nano habe ich dir gezeigt, wie einfach es ist, das Schieberegister 74HC164D am Arduino Nano zu programmieren. Hier soll es nun darum gehen, wie du das Schieberegister 74HC164D in MicroPython programmierst. https://youtu.be/R0jV7th1C_k Du kannst dieses Beispiel mit dem Pi Pico 2 und natürlich auch mit dem Vorgängermodell, dem Pi Pico, mit und ohne WiFi Support nachbauen. Beide Mikrocontroller sind baugleich und somit voll kompatibel.
Tumblr media
CJMCU-164 / Schieberegister 74HC164D
Tumblr media
CJMCU-164 - Lieferumfang
Bezug des Schieberegisters 74HC164D / CJMCU-164
Du bekommst dieses Schieberegister als einfachen Baustein oder auf einer Platine mit Pinbeschriftungen. Die zuletzt genannte Variante habe ich mir von aliexpress.com für günstige 0,96 € besorgt. Die Versandkosten betrugen jedoch knapp 3,6 € somit war dieses vermeintliche Schnäppchen nicht viel günstiger als wenn man es bei einem deutschen Händler kauft. ebay.dealiexpress.comandroegg.de4,87 €*0,96 € (3,62 €)2,87 € (1,64 €) Hinweis von mir: Die mit einem Sternchen (*) markierten Links sind Affiliate-Links. Wenn du über diese Links einkaufst, erhalte ich eine kleine Provision, die dazu beiträgt, diesen Blog zu unterstützen. Der Preis für dich bleibt dabei unverändert. Vielen Dank für deine Unterstützung! Lieferumfang Zum Lieferumfang des CJMCU-164 gehört neben der Platine lediglich noch zwei Stiftleisten, welche du noch anlöten musst.
Aufbau der Schaltung - Raspberry Pi Pico mit Schieberegister 74HC164D
Der Aufbau ist im Grunde dieselbe wie beim Arduino Nano, du benötigst eine Spannungsversorgung von 3.3V oder 5V und zwei digitale Pins.
Tumblr media
Schaltung - Raspberry Pi Pico 2 mit Schieberegister 74HC164D und 7 Segmentanzeige Anschluss des Schieberegisters an den Pi Pico Das Schieberegister arbeitet mit einer Spannung zwischen 2V und 6V, der Pi Pico liefert dir an dem Pin "VBUS" 5V und der Pin "3V3(OUT)" liefert 3,3V.
Tumblr media
RPiPico2 RP2350 Pinout PinRaspberry Pi PicoVCCVBUS (Pin 40)GNDGND (Pin 23)AGP16 (Pin 21)BVBUS (Pin 40)CLKGP17 (Pin 22)CLRVBUS (Pin 40) Anschluss der 7 Segmentanzeige an das Schieberegister Die 7 Segmentanzeige bekommst du in zwei Varianten, zum einen mit einer gemeinsamen Kathode und gemeinsame Anode. Das bedeutet, dass du am Pin 8 entweder VCC oder GND anschließen musst. In meinem Fall habe ich eines mit gemeinsamer Kathode und schließe dort GND über einen 220 Ohm Vorwiderstand an.
Tumblr media
7 Segmentanzeige Pinout Pin7 SegmentanzeigeQ07Q16Q24Q32Q41Q59Q610Q75GND220 Ohm Widerstand > 8
Programmieren des Schieberegisters 74HC164D in MicroPython
Das kleine Arduino Programm lässt sich sehr einfach nach MicroPython portieren. Statt eines mehrdimensionalen Arrays nutze ich hier ein mehrdimensionales Tupel, ansonsten gibt es auch hier nicht viel Besonderes.
Tumblr media
In dem inneren 8-stelligen Tupel sind die LEDs jeweils über die Indexe belegt. Über die Matrix links kannst du dir Zahlen und Buchstaben (begrenzt) aufbauen und hinterlegen. Im nachfolgenden Code werden die Zahlen von 0 bis 9 und die Buchstaben A, C und E auf der 7 Segmentanzeige angezeigt. Programm - Anzeigen der Zahlen 0 bis 9 und Buchstaben A,C & E an der 7 Segmentanzeige mit MicroPython & Schieberegister 74HC164DHerunterladen #Module zum ansteuern der GPIOs, sowie import machine #zum einlegen einer kleinen Pause import time #DataPin am GPIO16 als Ausgang angeschlossen dataPin = machine.Pin(16, machine.Pin.OUT) #ClockPin am GPIO17 als Ausgang angeschlossen clockPin = machine.Pin(17, machine.Pin.OUT) #Tupel mit mehreren Tupeln #Jede Stelle in dem inneren Tupel #repräsentiert den Zustand einer LED #auf der 7 Segmentanzeige digits = ( (1, 1, 1, 1, 1, 1, 0, 0), #Zahl 0 (0, 1, 1, 0, 0, 0, 0, 0 ), #Zahl 1 (1, 1, 0, 1, 1, 0, 1, 0 ), #Zahl 2 (1, 1, 1, 1, 0, 0, 1, 0 ), #Zahl 3 (0, 1, 1, 0, 0, 1, 1, 0 ), #Zahl 4 (1, 0, 1, 1, 0, 1, 1, 0 ), #Zahl 5 (0, 0, 1, 1, 1, 1, 1, 0 ), #Zahl 6 (1, 1, 1, 0, 0, 0, 0, 0 ), #Zahl 7 (1, 1, 1, 1, 1, 1, 1, 0 ), #Zahl 8 (1, 1, 1, 0, 0, 1, 1, 0 ), #Zahl 9 (1, 1, 1, 0, 1, 1, 1, 0 ), #Buchstabe A (1, 0, 0, 1, 1, 1, 0, 0 ), #Buchstabe C (1, 0, 0, 1, 1, 1, 1, 0 ) #Buchstabe E ) #Funktion zum anzeigen einer Zahl #Als Parameter wird ein Tupel mit #den Zuständen der LEDs erwartet. def displayValue(tpl): #Für jede Stelle im Tupel mache... #Die Liste wird Rückwärts durchlaufen! for idx in reversed(tpl): #den ClockPin deaktivieren clockPin.value(0) #den DataPin aktivieren/deaktivieren, #je nach Status dataPin.value(idx) #aktivieren des ClockPins clockPin.value(1) #eine Pause von 100 Millisekunden time.sleep(0.1) #Starten der Endlosschleife while True: #Für jedes Tupel mache... for idx in digits: #Aufrufen der funktion zum anzeigen einer Zahl displayValue(idx) #eine kleine Pause von 800 Millisekunden time.sleep(0.8) LED-Lauflicht programmieren Statt einer 7 Segmentanzeige kannst du auch recht einfach ein LED-Lauflicht programmieren, dazu ersetzen wir lediglich die Anzeige durch die LEDs, welche wir nacheinander aktivieren. Die Kathode (der Minuspol) der LED wird dazu an den GND Pin auf der Seite der Q0 bis Q7 Pins angeschlossen!
Tumblr media
Schaltung - Raspberry Pi Pico 2 mit Schieberegister 74HC164D und LEDs Der Code für ein Lauflicht wiederholt sich zum Beispiel zuvor sehr stark, denn wir müssen lediglich die Tupel mit den Zuständen der LEDs anpassen. In meinem Fall lasse ich die LEDs von rechts nach links und zurück aufleuchten. sdrgtsdfg #Module zum ansteuern der GPIOs, sowie import machine #zum einlegen einer kleinen Pause import time #DataPin am GPIO16 als Ausgang angeschlossen dataPin = machine.Pin(16, machine.Pin.OUT) #ClockPin am GPIO17 als Ausgang angeschlossen clockPin = machine.Pin(17, machine.Pin.OUT) #Tupel mit mehreren Tupeln #Jede Stelle in dem inneren Tupel #repräsentiert den Zustand einer LED digits = ( (1, 0, 0, 0, 0, 0, 0, 0), (0, 1, 0, 0, 0, 0, 0, 0 ), (0, 0, 1, 0, 0, 0, 0, 0 ), (0, 0, 0, 1, 0, 0, 0, 0 ), (0, 0, 0, 0, 1, 0, 0, 0 ), (0, 0, 0, 0, 0, 1, 0, 0 ), (0, 0, 0, 0, 0, 0, 1, 0 ), (0, 0, 0, 0, 0, 0, 0, 1 ), (0, 0, 0, 0, 0, 0, 1, 0 ), (0, 0, 0, 0, 0, 1, 0, 0 ), (0, 0, 0, 0, 1, 0, 0, 0 ), (0, 0, 0, 1, 0, 0, 0, 0 ), (0, 0, 1, 0, 0, 0, 0, 0 ), (0, 1, 0, 0, 0, 0, 0, 0 ) ) #Funktion zum anzeigen einer Zahl #Als Parameter wird ein Tupel mit #den Zuständen der LEDs erwartet. def displayValue(tpl): #Für jede Stelle im Tupel mache... #Die Liste wird Rückwärts durchlaufen! for idx in reversed(tpl): #den ClockPin deaktivieren clockPin.value(0) #den DataPin aktivieren/deaktivieren, #je nach Status dataPin.value(idx) #aktivieren des ClockPins clockPin.value(1) #Starten der Endlosschleife while True: #Für jedes Tupel mache... for idx in digits: #Aufrufen der funktion zum anzeigen einer Zahl displayValue(idx) #eine kleine Pause von 800 Millisekunden time.sleep(0.2) Read the full article
0 notes