Problem mit Schieberegister 74HC595 und RaspberryPi

Gast #4525995
Lesenswert?

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
Gast #4526283
Lesenswert?

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.
Gast #4526423
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren