# 8x8x8 RGB Cube Schieberegister Probleme

**URL:** <https://forum.arduino.cc/t/8x8x8-rgb-cube-schieberegister-probleme/1121514>\
**Category:** Deutsch\
**Created:** [April 30, 2023, 2:52pm UTC](https://forum.arduino.cc/t/8x8x8-rgb-cube-schieberegister-probleme/1121514 "2023-04-30T14:52:08Z")\
**Posts on this page:** 20\
**Page:** 2

<div class="post-metadata">

**Author:** ![Soltanius](https://avatars.discourse-cdn.com/v4/letter/s/a87d85/32.png) [@Soltanius](https://forum.arduino.cc/u/Soltanius)\
**Post date:** [May 1, 2023, 11:09am UTC](https://forum.arduino.cc/t/8x8x8-rgb-cube-schieberegister-probleme/1121514/21 "2023-05-01T11:09:45Z")

</div>

> [@my\_xy\_projekt](#):
>
> ```arduino
> for (int j = 0; j < 8; j++)
> {
> makePin0(latchPin);
> for (byte b = 0; b < 8; b++)
> {
> ShiftOut(data[b][j].rot, data[b][j].gruen, data[b][j].blau);
> }
> makePin1(latchPin);
> delay(3000);
> makePin1(alleLayers[j]);
> delay(3000);
> makePin0(alleLayers[j]);
> }
> 
> ```

Das braucht tatsächlich länger. Ich teste das gleich nochmal aus, aber als ich das gestern so gemacht habe, lief das ganze Programm viel langsamer.

> [@my\_xy\_projekt](#):
>
> Das ich das delay() da auflösen würde hab ich schon gesagt?

Das erste Delay ist da eigentlich nicht. Nur damit ich das Problem besser darstellen kann, habe ich die Zeit eingefügt.  
Das zweite Delay soll normal nur 1 ms andauern. Diese Zeit reicht aus, dass die LEDs hell genug erleuchten.

> [@kolaha](#):
>
> einen neuen Sketch schreiben

Genau das ist der Code ja 🙂  
Wenn bei den zwei (drei) Mustern guckst, siehst du, dass ich da eine Funktion habe, die nur einen Layer bestromt leuchten lässt.

Um auszuschließen, dass es nur bei der Farbe Probleme gibt, habe ich extra das zweite Muster erstellt, um dies mit allen Farben zu prüfen.

Das einzige was ich da noch raus nehmen kann, ist die Funktion 'Lampe' die ich aber extra drin gelassen habe, damit bei jedem Durchlauf einmal kurz angezeigt wird, ob die LEDs noch richtig laufen

---

<div class="post-metadata">

**Author:** ![Soltanius](https://avatars.discourse-cdn.com/v4/letter/s/a87d85/32.png) [@Soltanius](https://forum.arduino.cc/u/Soltanius)\
**Post date:** [May 1, 2023, 11:12am UTC](https://forum.arduino.cc/t/8x8x8-rgb-cube-schieberegister-probleme/1121514/22 "2023-05-01T11:12:03Z")

</div>

Ich habe den Code schon aktueller dargestellt.  
Früher hatte ich für jedes SR einen eigenen 8bit Array erstellt.  
Dementsprechend war der Code extrem unübersichtlich und unnötig kompliziert.

---

<div class="post-metadata">

**Author:** ![kolaha](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/kolaha/32/966427_2.png) [@kolaha](https://forum.arduino.cc/u/kolaha)\
**Post date:** [May 1, 2023, 11:54am UTC](https://forum.arduino.cc/t/8x8x8-rgb-cube-schieberegister-probleme/1121514/23 "2023-05-01T11:54:35Z")

</div>

ich habe mir überlegt, wieso mir das Konstruktion nicht gefällt

```plaintext
    for (int i = 0; i < 8; i++) {
      makePin1(alleLayers[i]);
      delay(y);
      makePin0(alleLayers[i]);
    }

```

weil eine Schicht wird aktive wenn MOSFET geöfnet ist, also wenn Layer-Ausgang HIGH ist  
und in diesem Ausschnitt wird er HIGH nur für kurzen Augenblick dann wieder LOW. dank grosem GS Widerstand und empfindlichen am Gate schliesst MOSFET nicht sofort und so werden für ein Weilchen Daten angezeigt die auf diesem Layer nichts zu suchen haben.

---

<div class="post-metadata">

**Author:** ![Soltanius](https://avatars.discourse-cdn.com/v4/letter/s/a87d85/32.png) [@Soltanius](https://forum.arduino.cc/u/Soltanius)\
**Post date:** [May 1, 2023, 12:20pm UTC](https://forum.arduino.cc/t/8x8x8-rgb-cube-schieberegister-probleme/1121514/24 "2023-05-01T12:20:19Z")

</div>

> [@kolaha](#):
>
> schliesst MOSFET nicht sofort

Die Fall time des FETs liegt bei 21 ns  
Daran habe ich auch als erstes gedacht, aber der letzte layer zeigt alles richtig an. Das Problem entsteht beim folgenden layer.  
Der layer, der als nächstes durchgeschschaltet wird, zeigt eine kurze Zeit lang falsches an.

Ich verstehe aber nicht warum..  
Bevor der nächste layer 'aktiviert' wird, sind die neuen Daten (0) in die Schieberegister geschrieben.  
Erst dann wird der layer geschaltet.

Wie kann es sein, dass ich am Ausgang des SR immer och 5V messen kann?  
Sobald der Layer geschaltet wird, fällt die Spannung sofort ab und ist 0, wie es sein soll.

---

<div class="post-metadata">

**Author:** ![kolaha](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/kolaha/32/966427_2.png) [@kolaha](https://forum.arduino.cc/u/kolaha)\
**Post date:** [May 1, 2023, 12:34pm UTC](https://forum.arduino.cc/t/8x8x8-rgb-cube-schieberegister-probleme/1121514/25 "2023-05-01T12:34:07Z")

</div>

> [@Soltanius](#):
>
> Die Fall time des FETs liegt bei 21 ns

gemessen?

---

<div class="post-metadata">

**Author:** ![Soltanius](https://avatars.discourse-cdn.com/v4/letter/s/a87d85/32.png) [@Soltanius](https://forum.arduino.cc/u/Soltanius)\
**Post date:** [May 1, 2023, 2:58pm UTC](https://forum.arduino.cc/t/8x8x8-rgb-cube-schieberegister-probleme/1121514/26 "2023-05-01T14:58:02Z")

</div>

Laut Datenblatt.  
Ich habe gestern von nem Kollegen n Oscilloscope bekommen.. Leider Ohne Tastköpfe..  
Im Laufe der Woche sollten die ankommen, dann kann ich nachmessen.

Aber selbst wenn, nach Sekunden ist der FET definitiv wieder gesperrt. Da tritt das Problem ja immer noch auf, dass der Pegel am Ausgang des SR nicht richtig ist.

---

<div class="post-metadata">

**Author:** ![kolaha](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/kolaha/32/966427_2.png) [@kolaha](https://forum.arduino.cc/u/kolaha)\
**Post date:** [May 1, 2023, 3:04pm UTC](https://forum.arduino.cc/t/8x8x8-rgb-cube-schieberegister-probleme/1121514/27 "2023-05-01T15:04:41Z")

</div>

also, noch mal, damit ich es aufschreiben kann: wenn nur eine Schicht beschrieben wird,z.B. N.4, wird auch dann die daneben befindliche beeinträchtigt oder es leuchtet nur eine richtige Schicht?

---

<div class="post-metadata">

**Author:** ![Soltanius](https://avatars.discourse-cdn.com/v4/letter/s/a87d85/32.png) [@Soltanius](https://forum.arduino.cc/u/Soltanius)\
**Post date:** [May 1, 2023, 4:09pm UTC](https://forum.arduino.cc/t/8x8x8-rgb-cube-schieberegister-probleme/1121514/28 "2023-05-01T16:09:58Z")

</div>

Wenn Layer 4 leuchten soll, leuchtet nur Layer 4  
Der nächste Layer (5) soll nicht leuchten.  
Layer 5 leuchtet trotzdem leicht auf (Siehe Bilder)

Ich verstehe nicht warum

Zum Zeitpunkt, wenn Layer 5 eingeschaltet wird (FET) liegt an den SR noch Spannung am Ausgang. Obwohl vorher nur Nullen reingeschoben werden.

---

<div class="post-metadata">

**Author:** ![kolaha](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/kolaha/32/966427_2.png) [@kolaha](https://forum.arduino.cc/u/kolaha)\
**Post date:** [May 1, 2023, 6:19pm UTC](https://forum.arduino.cc/t/8x8x8-rgb-cube-schieberegister-probleme/1121514/29 "2023-05-01T18:19:01Z")

</div>

> [@Soltanius](#):
>
> Zum Zeitpunkt, wenn Layer 5 eingeschaltet

eigentlich meinte ich nur ein Layer. einen. nicht zwei, nicht acht. immer wieder nur einen und dasselben, den 4-ten.

---

<div class="post-metadata">

**Author:** ![my\_xy\_projekt](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/my_xy_projekt/32/810062_2.png) [@my\_xy\_projekt](https://forum.arduino.cc/u/my_xy_projekt)\
**Post date:** [May 1, 2023, 6:22pm UTC](https://forum.arduino.cc/t/8x8x8-rgb-cube-schieberegister-probleme/1121514/30 "2023-05-01T18:22:40Z")

</div>

> [@Soltanius](#):
>
> Das braucht tatsächlich länger.

Ich kann Dich bestätigen!

---

<div class="post-metadata">

**Author:** ![Soltanius](https://avatars.discourse-cdn.com/v4/letter/s/a87d85/32.png) [@Soltanius](https://forum.arduino.cc/u/Soltanius)\
**Post date:** [May 1, 2023, 8:14pm UTC](https://forum.arduino.cc/t/8x8x8-rgb-cube-schieberegister-probleme/1121514/31 "2023-05-01T20:14:25Z")

</div>

> [@kolaha](#):
>
> immer wieder nur einen und dasselben

Logischerweise kommt dieser Fehler dann ja nicht auf, da der Layer nicht mehr komplett ausgestellt wird, sondern immer wieder beleuchtet

Also nein, die bei den Umstehenden Layern gibt es keine Probleme und das Bild wird richtig angezeigt

---

<div class="post-metadata">

**Author:** ![kolaha](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/kolaha/32/966427_2.png) [@kolaha](https://forum.arduino.cc/u/kolaha)\
**Post date:** [May 1, 2023, 8:22pm UTC](https://forum.arduino.cc/t/8x8x8-rgb-cube-schieberegister-probleme/1121514/32 "2023-05-01T20:22:11Z")

</div>

dann ist meine Vermutung richtig. es muss die Ausgabeschleife neu geschriben.  
ein Layer einschalten, seriel schieben, Latch kicken, (u.U. delay), den Layer ausschalten,  
nächster Layer

---

<div class="post-metadata">

**Author:** ![my\_xy\_projekt](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/my_xy_projekt/32/810062_2.png) [@my\_xy\_projekt](https://forum.arduino.cc/u/my_xy_projekt)\
**Post date:** [May 1, 2023, 8:28pm UTC](https://forum.arduino.cc/t/8x8x8-rgb-cube-schieberegister-probleme/1121514/33 "2023-05-01T20:28:53Z")

</div>

Wie sieht denn Dein Versuch aus, die Zeit zu messen? Ich hätte gerne gewusst, ob meine Erfahrung mit deiner konform geht.

---

<div class="post-metadata">

**Author:** ![Soltanius](https://avatars.discourse-cdn.com/v4/letter/s/a87d85/32.png) [@Soltanius](https://forum.arduino.cc/u/Soltanius)\
**Post date:** [May 1, 2023, 8:44pm UTC](https://forum.arduino.cc/t/8x8x8-rgb-cube-schieberegister-probleme/1121514/34 "2023-05-01T20:44:43Z")

</div>

Mein Versuch war das hochladen und zusehen, wie sich der Cube verhält 😃  
Da er direkt anfing zu "flickern" und man das mit dem bloßen Auge sah, war es für mich klar, dass der Durchlauf zu lange dauert.  
Wie misst du denn die Zeit? nutzt du dafür ein Programm oder so?

> [@kolaha](#):
>
> Ausgabeschleife neu geschriben

Was hast du dir gedacht? Habe dies jetzt mal so gemacht.. Jetzt ist das ganze noch schlimmer.  
Der nächste Layer (Der aus sein soll) wird noch viel stärker erleuchtet.

Meine Version:

```arduino
void anzeigen(const cube data[8][8]) {//------------------------------------------------------------Muster anzeigen
  for (int k = 0; k < 1000; k++) {
    for (int j = 0; j < 8; j++) {

      makePin1(alleLayers[j]);
      
      makePin0(latchPin);
       ShiftOut(data[0][j].rot, data[0][j].gruen, data[0][j].blau);
       ShiftOut(data[1][j].rot, data[1][j].gruen, data[1][j].blau);
       ShiftOut(data[2][j].rot, data[2][j].gruen, data[2][j].blau);
       ShiftOut(data[3][j].rot, data[3][j].gruen, data[3][j].blau);
       ShiftOut(data[4][j].rot, data[4][j].gruen, data[4][j].blau);
       ShiftOut(data[5][j].rot, data[5][j].gruen, data[5][j].blau);
       ShiftOut(data[6][j].rot, data[6][j].gruen, data[6][j].blau);
       ShiftOut(data[7][j].rot, data[7][j].gruen, data[7][j].blau);
      makePin1(latchPin);
      
      delay(1);
      makePin0(alleLayers[j]);
    }
  }
}

```

---

<div class="post-metadata">

**Author:** ![kolaha](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/kolaha/32/966427_2.png) [@kolaha](https://forum.arduino.cc/u/kolaha)\
**Post date:** [May 1, 2023, 8:59pm UTC](https://forum.arduino.cc/t/8x8x8-rgb-cube-schieberegister-probleme/1121514/35 "2023-05-01T20:59:21Z")

</div>

> [@Soltanius](#):
>
> noch viel stärker erleuchtet

wie kann das überhaupt sein? wenn ein Mosfet geöffnet ist dann kann nur ein Layer leuchten.  
aber es leichtet auch andere Schicht und das heisst noch ein MOSFET ist offen. du sagst es ist nächster Layer aber nachleuchten kann nur vorheriger. du sagst es leuchtet jetzt sogar heller nach, obwohl nur

```arduino
makePin1(alleLayers[j]);

```

nach oben gestellt ist, es ist keine feine Lösung, aber was wäre wenn `makePin0(alleLayers[j]);` auch etwas höher steht, für Anfang zwieschen

```arduino
       ShiftOut(data[3][j].rot, data[3][j].gruen, data[3][j].blau);
       ShiftOut(data[4][j].rot, data[4][j].gruen, data[4][j].blau);

```

---

<div class="post-metadata">

**Author:** ![Soltanius](https://avatars.discourse-cdn.com/v4/letter/s/a87d85/32.png) [@Soltanius](https://forum.arduino.cc/u/Soltanius)\
**Post date:** [May 1, 2023, 9:07pm UTC](https://forum.arduino.cc/t/8x8x8-rgb-cube-schieberegister-probleme/1121514/36 "2023-05-01T21:07:37Z")

</div>

> [@kolaha](#):
>
> man mus nix deklarieren nur das

Das stimmt soweit für die Ports für D und B.  
Wie soll ich das realisieren? Da steh ich ein bisschen auf dem Schlauch. In der bib wird das ganze komplett anders beschrieben.  
Mein Versuch die Ausgabe für Port C hinzuzufügen:

```arduino
#define makePin1(b) ( (b)<8 ? PORTD |=(1<<(b)) ? PORTB |=(1<<(b-8)) : PORTC |=(1<<(b-13)) )

```

Port C ist für die Analogen Pins, da ich einen davon belegt habe, brauche ich auch einen von denen als "dig.Pin".  
Habe ja mit Absicht die Pins 0,1 (TX/RX) freigelassen, damit mir da nicht irgendwas hin und her geworfen wird 😉

---

<div class="post-metadata">

**Author:** ![Soltanius](https://avatars.discourse-cdn.com/v4/letter/s/a87d85/32.png) [@Soltanius](https://forum.arduino.cc/u/Soltanius)\
**Post date:** [May 1, 2023, 9:42pm UTC](https://forum.arduino.cc/t/8x8x8-rgb-cube-schieberegister-probleme/1121514/37 "2023-05-01T21:42:24Z")

</div>

> [@kolaha](#):
>
> noch ein MOSFET ist offen

Nee, ich glaube du hast mein genaues Problem noch nicht verstanden.  
Es ist immer nur ein FET offen, das ist richtig. Das Problem ist, wenn der nächste öffnen soll, liegen in den SR falsche Daten, bzw die Ausgänge geben immer noch (gespeicherte?) 5V aus, obwohl diese schon neue Daten haben.

Das ist wie mit einem Kondensator zu vergleichen. Der Layer wird ausgeschaltet, dann bekommen die SR alle "0" und geben noch Spannung aus, bis diese mit dem nächsten Layer "entladen" werden. Als wäre das eine ganz geringe Kapazität.

---

<div class="post-metadata">

**Author:** ![kolaha](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/kolaha/32/966427_2.png) [@kolaha](https://forum.arduino.cc/u/kolaha)\
**Post date:** [May 1, 2023, 9:48pm UTC](https://forum.arduino.cc/t/8x8x8-rgb-cube-schieberegister-probleme/1121514/38 "2023-05-01T21:48:49Z")

</div>

> [@Soltanius](#):
>
> en SR falsche Daten

und du willst versuchen neuen Layer erst einschalten, wenn Latch Impulse hoch war? aber es war so von anfang an, oder? trotzdem, könnte man alle Layer ausschalten wärend/vor Schieberei.

---

<div class="post-metadata">

**Author:** ![Soltanius](https://avatars.discourse-cdn.com/v4/letter/s/a87d85/32.png) [@Soltanius](https://forum.arduino.cc/u/Soltanius)\
**Post date:** [May 1, 2023, 9:57pm UTC](https://forum.arduino.cc/t/8x8x8-rgb-cube-schieberegister-probleme/1121514/39 "2023-05-01T21:57:44Z")

</div>

> [@kolaha](#):
>
> neuen Layer erst einschalten, wenn Latch Impulse hoch war? aber es war so von anfang an, oder?

Ja genau, das mein Gedanke und das war auch am Anfang genau so. Daten werden in SR geschrieben, Layer leuchtet kurz und wird wieder ausgeschaltet. Neue Daten in SR und von vorne.  
Das heißt nach Programmablauf wird erst das ganze Muster für mein Layer geschrieben und erst dann kurz der Layer durchgeschaltet und nochmal neu..

Daher kann ich mir nicht erklären, wie sonst an den SR Ausgängen noch 5V ausgegeben werden.

Ich habe auch schon nach dem Latchen nen Delay eingebaut, ob dies nach einer Zeit 'verfliegt' aber leider konnte ich nichts desgleichen feststellen.

> [@kolaha](#):
>
> könnte man alle Layer ausschalten

Also anstatt den Layer, den ich eingeschaltet habe wieder aus, nochmal alle 8 Layer aus? Habe ich schonmal versucht.

---

<div class="post-metadata">

**Author:** ![kolaha](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/kolaha/32/966427_2.png) [@kolaha](https://forum.arduino.cc/u/kolaha)\
**Post date:** [May 1, 2023, 10:05pm UTC](https://forum.arduino.cc/t/8x8x8-rgb-cube-schieberegister-probleme/1121514/40 "2023-05-01T22:05:37Z")

</div>

```plaintext
void anzeigen(const cube data[8][8]) {//------------------------------------------------------------Muster anzeigen
  for (int k = 0; k < 1000; k++) {
    for (int j = 0; j < 8; j++) {

      if(j) makePin0(alleLayers[j-1]);
     else makePin0(alleLayers[7]);
      makePin0(latchPin);
       ShiftOut(data[0][j].rot, data[0][j].gruen, data[0][j].blau);
       ShiftOut(data[1][j].rot, data[1][j].gruen, data[1][j].blau);
       ShiftOut(data[2][j].rot, data[2][j].gruen, data[2][j].blau);
       ShiftOut(data[3][j].rot, data[3][j].gruen, data[3][j].blau);
       ShiftOut(data[4][j].rot, data[4][j].gruen, data[4][j].blau);
       ShiftOut(data[5][j].rot, data[5][j].gruen, data[5][j].blau);
       ShiftOut(data[6][j].rot, data[6][j].gruen, data[6][j].blau);
       ShiftOut(data[7][j].rot, data[7][j].gruen, data[7][j].blau);
      makePin1(latchPin);
      
      makePin1(alleLayers[j]);
      delay(5);
      makePin0(alleLayers[j]);
    }
  }
}

```

[Previous page](https://forum.arduino.cc/t/8x8x8-rgb-cube-schieberegister-probleme/1121514.md?page=1)

[Next page](https://forum.arduino.cc/t/8x8x8-rgb-cube-schieberegister-probleme/1121514.md?page=3)
