Hallo zusammen, Ich bin neu in dieser Welt der Mikrocontroller ;) und bin gerade daran eine LED-Matrix mittels vier Schieberegister zu steuern. Nun wollte ich in einem ersten Schritt das Programm für nur ein einziges Schieberegister testen. Ich will also lediglich 8 LED's mit einem 8Bit-Schieberegister steuern. Hierzu verwende ich den 74HC595 von Reichelt: https://secure.reichelt.com/74HC-595/3/index.html?&ACTION=3&LA=446&ARTICLE=3269&artnr=74HC+595&SEARCH=74HC595 (das erhaltene Schieberegister hat aber nun die Typennummer: U74HC595AG?!) Hier ist das Python-Programm mit welchem ich das Schieberegister ansteuern will: //////////////////////////////////////////////////////////////////////// # Module importieren # ****************** import time import RPi.GPIO as GPIO # init GPIO # ********* GPIO.setmode(GPIO.BOARD) GPIO.setup(23, GPIO.OUT) #Clock alt 4 GPIO.setup(19, GPIO.OUT) #Datbit alt 17 GPIO.setup(21, GPIO.OUT) #Latch alt 18 GPIO.output(23, GPIO.LOW) GPIO.output(19, GPIO.LOW) GPIO.output(21, GPIO.LOW) # Definieren des Laufmusters # ************************** matrix= [ [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,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], [1,0,0,0,0,0,0,0] ] # Schieberegister leer machen # *************************** for i in range(8): GPIO.output(19, GPIO.LOW) GPIO.output(23, GPIO.HIGH) GPIO.output(23, GPIO.LOW) GPIO.output(21, GPIO.HIGH) time.sleep(0.5) GPIO.output(21, GPIO.LOW) # Hauptprogramm # ************* for i in range(8): GPIO.output(19, GPIO.LOW) GPIO.output(23, GPIO.HIGH) GPIO.output(23, GPIO.LOW) GPIO.output(21, GPIO.HIGH) time.sleep(0.5) GPIO.output(21, GPIO.LOW) # Hauptprogramm # ************* while 1: for j in range(16): for k in range(8): if matrix[j][k]== 1: GPIO.output(19, GPIO.HIGH) else: GPIO.output(19, GPIO.LOW) GPIO.output(23, GPIO.HIGH) GPIO.output(23, GPIO.LOW) GPIO.output(21, GPIO.HIGH) time.sleep(0.2) GPIO.output(21, GPIO.LOW) /////////////////////////////////////////////////////////// Nun habe ich aber das Problem, dass immer zwei Ausgänge gleich schalten. Also die Ausgänge (0 und 1), (2 und 3), (4 und 5) und (6 und 7) schalten immer zusammen. So als wäre es nur ein 4-Bit Schieberegister?! Kann sich jemand von euch den Grund dafür erklären? Der Output-Enable habe ich auf den Ground und der MR auf Vcc verdrahtet. Ich bin gerade echt ratlos... Grüsse Lukas
Lukas schrieb: > Ich bin neu in dieser Welt der Mikrocontroller ;) Hast du am Schieberegister auch nen Abblockkondensator dran?
Hallo Marc, Nein ich habe kein Kondensator dran. Ich habe es ähnlich dem angehängtem Schema verdrahtet.
Dann mach mal einen 100nF an VCC und GND. Könnte durchaus schon die Problemursache sein.
Okay, vielen Dank für die rasche Antwort. Ich werde mir gleich so ein Kondensator besorgen und melde mich dann wieder.
Wenn es dann immer noch nicht zuverlässig funktioniert... Sind GND und Clock wirklich so kurz? Ab so etwa 30cm Drahtlänge kommen die HC durcheinander. Die anderen Leitungen sind nicht so kritisch.
Lukas schrieb: > Ich bin neu in dieser Welt der Mikrocontroller ;) und bin gerade daran > eine LED-Matrix mittels vier Schieberegister zu steuern. Hallo Lukas, ich empfehle Dir, eine Systematische Fehlersuche zu erlernen anstatt zu Fragen. Lernst Du mehr. a) schließe erst einmal EINE LED an den Ausgangsport an und schau ob sich da was tut, wenn nicht suche nach möglichen Fehlerursachen b) Schließe mehrere LEDs an und simuliere damit das Verhalten der Ansteuerung deines Schieberegisters/Matrix. Führe Dein Programm mit Einzelschritt durch und schau ob die Signale in der richtigen Reihgenfolge kommen c) Baue Deine Schaltung Stück für Stück weiter auf und erweitere Deinen Code entsprechend d) besorge Dir eien einfaches Hilfsmittel um Logikpegel an bestimmten Stellen zu messen (nannte man früher Logikstift). Damit kannst Du dann auch in Echtzeit zumidest erahnen was an Digitalleitungen passiert. rgds
@ Noch einer (Gast) >Sind GND und Clock wirklich so kurz? Ab so etwa 30cm Drahtlänge kommen >die HC durcheinander. Unsinn. Wenn gleich ab 30cm Leitungslänge man sich schon mal um das Thema Wellenwiderstand Gedanken machen muss.
Er hat schon Recht, ab 30cm Leitungslänge sind Probleme zu erwarten. Du kennst dich vielleicht mit der Theorie (Wellen) gut aus. Dafür kenn ich die Praxis und Falk ganz sicher auch.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.