Hi liebes Forum!
Ich möchte mit Schieberegistern (SN74HC595N) die Ausgänge meines PIs erweitern. Soweit so gut. Das Programm habe ich geschrieben und ich denke ich habe die Funktionsweise des SN74HC595N verstanden.
Nun habe ich aber das Problem, dass wenn ich den RPi3 anstecke, die LEDs sofort zufällig zu leuchten beginnen, ohne dass überhaupt schon irgendetwas gestartet ist. Das komische dabei ist, dass es sehr sporadisch ist, welche der 8 angeschlossenen LEDs leuchten. Manchmal alle, manchmal 3 oder vier, manchmal gar keine. Die Anzahl und Position ist also komplett zufällig...
Das Schieberegister selbst ist nicht defekt, ich habe mehrere zuhause und daran liegt es leider nicht...
Ich als Laie schließe daraus, dass die GPIOs, an die ich das Schieberegister angeschlossen habe beim Starten Strom abgeben bzw beim starten nicht fix auf 1 oder 0 definiert sind??
Ich finde nur komisch, dass ich auf anderen Seiten, auf denen der Anschluss eines Schieberegisters beschrieben ist, dieses Problem nie angesprochen wurde. Habe nur ich das, oder habt ihr damit auch schon mal Erfahrung gemacht?
Ich dachte zuerst es liegt daran, dass manche GPIOs spezielle Funktionen haben und beim Booten Signale abgeben (I2C oder so??) - kann mir das jemand bestätigen? Naja, dann habe ich es mit Pins belegt, die keine Funktion haben und das Problem besteht weiterhin...
Mein Ziel ist es, dass beim einstecken einfach alles aus bleibt.
Ich habe hier: https://wiki.ubuntuusers.de/rc.local/ gesehen, dass man beim Booten Programme, Scripte, Befehle etc. automatisch starten kann. Ist es aus eurer Sicht möglich, da ein Python Script öffen zu lassen, welches [0,0,0,0,0,0,0,0] in den Ausgang des Registers schreibt? Denn wenn das Betriebssystem einmal gestartet ist, dann kann ich im jetzigen Zustand ganz normal manuell das Schieberegister steuern. Und vor allem: Wann wird das Programm dann genau ausgeführt? wirklich ganz am Anfang? Außerdem: Wie sauber wäre so eine Lösung?
Noch eine Frage abseits des Schieberegisters: Welche GPIOs lassen sich für EINGABEN (von Tastern über Pullup-Widerstände) effektiv nutzen? Ich habe gelesen, dass man manche Pins am besten gleich links liegen lässt. Ich brauche so ca 20 PINs für Eingaben und eben die 3 für das Schieberegister... Geht sich das aus un wie viel Reserve habe ich da noch?
Müssen dazu manche PINs umkonfiguriert werden?
GLG und danke im Vorhinein!
Aja: Meine Schaltung Schaut genau so aus, nur mit den PINs 5,6,26 - wie gesag, mit 4,5,6 hab ichs auch bereits probiert
Betriebssystem Raspian GNU/Linux 9
Linux Kernel 4.19.66-v7+
Release Datum 2017-11-29
Code Programm: (eigenltich unerheblich)
#!/usr/bin/env python
import RPi.GPIO as IO # um die Pins ansteuern zu koennen, brauchen wir die Lib
import os,time # fuer die Delays benoetigen wir die time-Lib
IO.setwarnings(False) # Keine Warnungen anzeigen
IO.cleanup()
IO.setmode(IO.BCM) # Programmiermodus, um die Pins zu setzen
IO.setup(5,IO.OUT) # Setze Pin 4 als Ausgang (SER)
IO.setup(6,IO.OUT) # Setze Pin 5 als Ausgang (SCK)
IO.setup(26,IO.OUT) # Setze Pin 6 als Ausgang (RCK)
t=0.00001
def print():
for y in reversed(range(0,len(out))):
IO.output(5,out[y]) # eine 1 an den seriellen Input senden
time.sleep(t) # 100ms warten
IO.output(6,1) # SCK-Pin auf High ziehen, damit das Register anfaengt die Bits um eine Stelle zu verschieben
time.sleep(t) # 100ms warten
IO.output(6,0) # SCK_Pin wieder auf LOW ziehen
IO.output(26,1) # RCK auf HIGH setzen, damit das Register zur Ausgabe kopiert wird
time.sleep(t) # 100ms warten
IO.output(26,0) # RCK wieder auf LOW setzen
#Hier beginnt der eigentliche Ablauf
a = 1
while 1:
out = [1,1,1,1,0,0,0,0]
print()
time.sleep(a)
out = [1,0,1,0,1,0,1,0]
print()
time.sleep(a)
out = [1,1,1,1,1,1,1,1]
print()
time.sleep(a)
out = [0,0,0,0,0,0,0,0]
print()
time.sleep(a)
out = [0,0,1,1,1,1,0,0]
print()
time.sleep(a)
out = [1,1,0,0,0,0,1,1]
print()
time.sleep(a)
out = [1,1,1,1,1,1,1,1]
print()
time.sleep(a)
out = [0,0,0,0,0,0,0,0]
print()
time.sleep(a)
#raw_input('\n\nPress Return to stop')
#try:
IO.cleanup()
#except NameError:
# pass
Display More