74HC595 und RGB

Hallo,
ich habe erfolgreich eine Schaltung aufgebaut, mit 3x 74HC595 und 7 RGB Leds.
Soweit funktioniert das auch, nun wollte ich aber das z.B. die erste LED auf grün schaltet, wobei die 2 LED auf rot schaltet. Ich kenne das immer mit B010101 usw.
Wie mache ich das genau?

Grüße
Leon

Du verbindest den grünen mit dem blauen Draht, dann passt das schon.

Ein schönes Ratenspiel! Da bin ich dabei. Ich versuche als erstes zu raten wieso nur 7 LEDs, anstatt 8.
Aber wenn ich handfeste Information von dir bekomme, beschleunigt es die Problemlösung imens. Z.B. Bilder, Schematik, Bilder von Schematik, ein Sketch wäre nicht schlecht zu sehen, falls nicht zu privat, Datenschutz und so.

uint32 muster = 0b101010101010101010101; // 21 Bit

Hallo,
8 LEDS hätte ich auch machen können, ist ja egal.
Schematik habe ich erstmal online gemacht, da ich eine Leiterplatine bestellt habe.

Der Sketch dazu ist:

// Pins für die 74HC595-Schieberegister
int dataPin = 11;  // DS
int latchPin = 10; // ST_CP
int clockPin = 13; // SH_CP

void setup() {
  pinMode(dataPin, OUTPUT);
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
}

void loop() {
  //alle LEDs auf rot setzen
  for (int i = 0; i < 8; i++) {
    shiftOutRGB(255, 0, 0); // Rot
  }
  delay(1000);
  //alle LEDs auf grün setzen
  for (int i = 0; i < 8; i++) {
    shiftOutRGB(0, 255, 0); // Grün
  }
  delay(1000);
  //alle LEDs auf blau setzen
  for (int i = 0; i < 8; i++) {
    shiftOutRGB(0, 0, 255); // Blau
  }
  delay(1000);
}

//Senden von RGB-Daten an die Schieberegister
void shiftOutRGB(byte red, byte green, byte blue) {
  digitalWrite(latchPin, LOW);
  shiftOut(dataPin, clockPin, MSBFIRST, blue);
  shiftOut(dataPin, clockPin, MSBFIRST, green);
  shiftOut(dataPin, clockPin, MSBFIRST, red);
  digitalWrite(latchPin, HIGH);
}```

Probiere mal sowas:

// Pins für die 74HC595-Schieberegister
int dataPin = 11;  // DS
int latchPin = 10; // ST_CP
int clockPin = 13; // SH_CP

void setup() {
  pinMode(dataPin, OUTPUT);
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
}

void loop() {
  shiftOutRGB(0b101010101010101010101010);
  delay(1000);
}

//Senden von RGB-Daten an die Schieberegister
void shiftOutRGB(uint32_t muster)
{
  shiftOut(dataPin, clockPin, MSBFIRST, (muster >> 16));
  shiftOut(dataPin, clockPin, MSBFIRST, (muster >> 8));
  shiftOut(dataPin, clockPin, MSBFIRST, muster);
}

Ich verstehe den Code nicht ganz.
Soll ich bei "muster" B0101... einsetzen?
So wie er dort steht macht der Code nichts.

Wie kommst du da drauf?
Hochladen Testen notfalls Meckern :wink:

Die LEDS bleiben aus.
Also der Code macht was, aber die LEDS schalten nicht.

OK dachte jetzt die Pins stiemen nicht sind aber wie in der Zeichnung.

Ich habe latchPin vergessen.

laut sketch sollte funzen, dann wahrscheinlich die Schaltung ist falsch.

ich rate aber jetzt wieso du jede Farbe acht mal schiebs, obwohl einmal ist genug

?

// Pins für die 74HC595-Schieberegister
int dataPin = 11;  // DS
int latchPin = 10; // ST_CP
int clockPin = 13; // SH_CP

void setup() {
  pinMode(dataPin, OUTPUT);
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
}

void loop() {
  shiftOutRGB(0b101010101010101010101010);
  delay(1000);
}

//Senden von RGB-Daten an die Schieberegister
void shiftOutRGB(uint32_t muster)
{
  digitalWrite(latchPin, LOW);
  shiftOut(dataPin, clockPin, MSBFIRST, (muster >> 16));
  shiftOut(dataPin, clockPin, MSBFIRST, (muster >> 8));
  shiftOut(dataPin, clockPin, MSBFIRST, muster);
  digitalWrite(latchPin, HIGH);
}

das funktioniert leider auch nicht.

könntest du eine 595 aus der Nähe fotografieren, denn an deinem Bild ist schwer was zu erkennen?

Die Schaltung ist falsch?
Könntest du mir vielleicht eine richtige Schaltung zeigen?

image

ok, die Schaltung scheint doch in Ordnung
probire das:

// Pins für die 74HC595-Schieberegister
int dataPin = 11;  // DS
int latchPin = 10; // ST_CP
int clockPin = 13; // SH_CP

void setup() {
  pinMode(dataPin, OUTPUT);
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
}

void loop() {
  shiftOutRGB(7, 0, 0); // Rot
  delay(1000);
  shiftOutRGB(14, 0, 0); // Rot
  delay(1000);
  shiftOutRGB(0, 3, 0); // Grün
  delay(1000);
  shiftOutRGB(0, 0, 1); // Blau
  delay(1000);
}

//Senden von RGB-Daten an die Schieberegister
void shiftOutRGB(byte red, byte green, byte blue) {
  digitalWrite(latchPin, LOW);
  shiftOut(dataPin, clockPin, MSBFIRST, blue);
  shiftOut(dataPin, clockPin, MSBFIRST, green);
  shiftOut(dataPin, clockPin, MSBFIRST, red);
  digitalWrite(latchPin, HIGH);
}

Schonmal sehr schön das etwas leuchtet.
Nur irgendwie habe ich was falsch verdrahtet bzw. der Sketch ist falsch.
Die erste LED wird als einzige Rot und der rest bleibt dann aus. Danach werden LED 2-4 Blau und die erste bleibt aus. LED 5-7 machen garnichts.

ich stelle fest dass Chip nicht in der Lage ist 8 LED gleichzeitig mit Strom zu versorgen

Gibt es vielleicht eine andere möglichkeit?
Indem man Transistoren etc einbaut?

oder eine externe Stromquelle?