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.
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.
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
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.
ich habe mir überlegt, wieso mir das Konstruktion nicht gefällt
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.
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.
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.
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?
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
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?
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.
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
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
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:
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
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.
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.
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.
Also anstatt den Layer, den ich eingeschaltet habe wieder aus, nochmal alle 8 Layer aus? Habe ich schonmal versucht.