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

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.