ich bin seit ein paar Tagen auch in den Genuss gekommen mit dem kleinen Computer ein wenig rumzubasteln - allerdings stehe ich jetzt vor einem Problem dass mich ratlos darstehen lässt.
Folgendes - ich möchte mit dem Schieberegister 4 LED's ( ja eigentlich 8, aber ich wollte nicht alle aufbauen) an und ausschalten. Aufbau siehe Fotos und die Anleitung nach der ich es aufgebaut habe, habe ich auch im Anhang.
Folgenden Code habe ich 1:1 aus einer Anleitung entnommen
int tDelay = 500;
int latchPin = 11; // (11) ST_CP [RCK] on 74HC595
int clockPin = 9; // (9) SH_CP [SCK] on 74HC595
int dataPin = 12; // (12) DS [S1] on 74HC595
byte leds = 0;
void updateShiftRegister()
{
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, LSBFIRST, leds);
digitalWrite(latchPin, HIGH);
}
void setup()
{
pinMode(latchPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
}
void loop()
{
leds = 0;
updateShiftRegister();
delay(tDelay);
for (int i = 0; i < 8; i++)
{
updateShiftRegister();
delay(tDelay);
}
}
void loop()
{
leds = 0;
....
Die rote Zeile habe ich modifiziert(davor hat es auch nicht funktioniert) um auf allen 8 Ausgängen ein LOW zu bekommen, allerdings egal was ich mache, alle Outputs bleiben HIGH und ich verstehe nicht warum...
Ich benutze einen Arduino Uno R3 von Elegoo, 4x 220 Ohm Widerstände und als Schieberegister ein SN74HC595N IC( ist dort evtl die Pin Belegung anderst? Im Netz sprechen alle von 74HC595. )
Vielen dank schonmal im vorraus fürs lesen und eventuell für Lösungsvorschläge.
HotSystems:
Dann zeig doch mal, nach welcher Anleitung du das gebaut hast.
Bitte Hyperlink (zum anklicken) posten.
Da die PDF 230 Seiten hat, habe ich die Lektion ausgeschnitten, im allgemeinen war es das Elegoo "The most complete Starter Kit".
Link zur ganzen Anleitung gibs auf deren Website - hier ist die geforderte Lektion.
michael_x: byte leds = 0; sind die Daten, die gesendet werden. Die veränderst du nicht.
Das ist mir durchaus bekannt, ich will ja 8x 0 Bit senden = alle LEDs aus.
Allerdings liegt am Schieberegister Ausgang 1 bis Ausgang 8 überall ein HIGH an obwohl ich alle auf LOW haben will. Das ist mein Problem.
Sorry falls das im Eingangspost nicht ganz klar wurde.
Sorry falls das im Eingangspost nicht ganz klar wurde.
Sorry meinerseits. Sah allerdings sehr nach einem Versehen aus. Warum du immer wieder acht mal dasselbe ausgibst und dazwischen wartest, konnte ich mir nicht als Absicht vorstellen. Meist sieht man mehr, wenn sich etwas ändert. Aber deine Beschreibung war klar.
Manche Leute hier lieben Fotos, auf denen man gut hinsehen muss um zu raten, welche Leitung von wo nach wo führt. 74HC595 hätte ich jetzt auch als ausreichend und eindeutig für die Pinbelegung gehalten.
Eigentlich sind Schaltpläne am übersichtlichsten, ob die tatsächliche Verdrahtung damit übereinstimmt ist da natürlich die Frage.
Solch ein Bild
michael_x:
Warum du immer wieder acht mal dasselbe ausgibst und dazwischen wartest, konnte ich mir nicht als Absicht vorstellen. Meist sieht man mehr, wenn sich etwas ändert.
Ich habe den Code an dieser einen Stelle abgeändert, da sich eben bei mir gar nichts geändert hat. Ich fand es nach ein wenig rumprobieren sehr komisch, dass alle Ausgänge auf HIGH geschaltet sind, deshalb der Versuch mit dem 8x 0 Bit senden, um zu überprüfen ob wenigstens das geht, welches Schluss letztendlich nicht funktioniert hat.
michael_x:
Eigentlich sind Schaltpläne am übersichtlichsten, ob die tatsächliche Verdrahtung damit übereinstimmt ist da natürlich die Frage.
Genau deswegen habe ich den Schaltplan UND die Verdrahtung in den Anhang gepackt, damit falls jemand auf die Idee kommen sollte, zu Fragen obs falsch angeschlossen ist - er sich das gleich selbst anschauen kann.
Das man da natürlich nicht soo viel drauf erkennen kann, verstehe ich natürlich..
Dein eigentliches Problem ist, dass du keine vernünftige Diagnose machst.
Zumindest sehe ich wenig davon.
Wenn das mein Problem wäre:
Dann würde ich als erstes mit einem Multimeter die Versorgungsspannungen prüfen.
Alle Potentiale.
Als zweites, ob die Arduino Ausgänge auch das tun,was ich von ihnen will.
Auch mit einem Multimeter
Soweit alles ok?
Dann sind wir an einem Punkt, wo ich meinen <8€ Logikanalysator aus der Ecke holen würde. Mit sigrok/pulseview zeigt er mir die Signale auf den Datenleitungen, welche ich mit dem Datenblatt vergleichen kann.
Jetzt weiß ich spätestens, ob der Chip kaputt ist, oder ob der Fehler woanders steckt.
Wie ist der Zufall will, kam gerade eine kleine Bestellung mit mehreren Schieberegistern. Kurz ausgetauscht und siehe da, es läuft wie ne eins. Dank euch für eure Hilfe!
Und danke @combie, da hast du mir ein wenig Stoff gegeben um mich weiter in die Thematik einzulesen, denn ein Logikanalysator habe ich heute zum ersten mal gehört.
windowslucker:
Und danke @combie, da hast du mir ein wenig Stoff gegeben um mich weiter in die Thematik einzulesen, denn ein Logikanalysator habe ich heute zum ersten mal gehört.
Ein unschätzbares Werkzeug für kleines Geld. Wenn Du dich da mal dran gewöhnt hast, machst Du (fast ) keine Fehlersuche an den Pins mehr ohne 8) .
wie ich das sehe.
Den Link zu deinem Bsp. haste im Beitrag #2. Der Code sollte funktionieren. Nochmal anschauen und übernehmen bzw. korrigieren. Allerdings sehe ich noch einen Fehler. Die Pinzuordnung stimmt nicht. Das sollte so aussehen.