LED-Cube 8x8x8 (pink)

  • So, nun ist alles in dem Timer-ISR. :D
    Die 3 Pattern habe ich mit derselben Bitkombination jeweils bis 64 erweitert. "Clear_all" geht dementsprechend auch bis 64.
    Wie du schon vermutet hast, geht das bei Bascom nicht, dass ein Array bei 0 losgeht. Also habe ich "Incr Byteadress" eingefügt.


    Der Cube leuchtet jetzt! :thumbup: Nur leider nicht ganz so wie er soll... :)
    Irgendwie ist die Adressierung verschoben und die Buchstaben "LED" sieht man jetzt von der Draufsicht... woran liegt das?
    Eigentlich soll er doch die jeweiligen 8 Bits aus den Pattern an den richtigen Stellen anzeigen.
    Hier ein kurzes Video von der Draufsicht. Vorne ist bei dem Cube auf der "rechten" Seite, wo die Platinen liegen. Irgendwie hat Youtube das Video gedreht...


    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.


    Und so sieht zur Zeit das Programm aus:

  • Eigentlich soll er doch die jeweiligen 8 Bits aus den Pattern an den richtigen Stellen anzeigen.

    Ja, was sind denn "die richtigen Stellen"...


    das ist ja Ansichts/Definitionssache, bzw. wie Du das haben willst...


    überleg' Dir doch einfach mal, wie die Daten aus der Tabelle an die LEDs gelangen, also welches Bit in welchem Byte nun welche LED ansteuert... Du hast ja letztlich pro Byte 8 LEDs nebeneinander (hoffentlich) oder hintereinander (wenn's so wäre, kannst Du aber auch einfach den ganzen Cube mechanisch um 90° um die Hochachse drehen, und jedes Byte ist dann diese Reihe an ner anderern Stelle...


    Du holst ja für eine Ebene 8 Bytes nacheinander aus dem Buffer und gibst die an eine Ebene aus, da ist es doch klar, dass


    Code
    Buffer(1) = &B00000011
     Buffer(2) = &B00000011
     Buffer(3) = &B00000011
     Buffer(4) = &B00000011
     Buffer(5) = &B00000011
     Buffer(6) = &B00000011
     Buffer(7) = &B11111111
     Buffer(8) = &B11111111


    Ein "L" in einer *Ebene* ergibt, also dann von oben drauf gesehen... ;)


    wenn Du das so haben willst, dass das von "vorne" ein "L" ergibt, musst Du die Daten dementsprechend umsortieren - das kannst Du entweder beim erstellen machen (eher kompliziert, wenn Du die so per Hand eingeben willst), oder dann bei der Ausgabe...


    Ich erkenne bei dem Video gar kein "L".... ?(


    wenn das nun so sein soll, dass die 8 Byte nacheinander keine Ebene, sondern eine "Scheibe" (quer x hoch) ergeben, dann musst Du Dir überlegen, wie Du die der Reihe nach da verteilst, dass die an der richtigen Stelle landen - Tipp: wenn z.B. Byte 1 die Reihe oben vorne ist, dann ist die Reihe darunter...? (Antwort: Byte 9).


    da kannst Du ja noch rum drehen, z.B. Reihenfolge der Ebenen tauschen (einfach (7-Ebene) ausgeben, dann geht's von 7 bis 0, nicht von 0 bis 7), Reihenfolge der "Scheiben" tauschen (indem Du die Latches in umgekehrter Reihenfolge ansteuerst, Links und Rechts tauschen (entweder per SW, eher aufwändig, oder einfach das Flachbandkabel pro UDN umdrehen).


    So bekommst Du das dann hin, dass ein so ein 8-er-Block eben ne Scheibe von vorne gesehen ist, erfordert halt ein bisschen räumliches Vorstellungsvermögen - oder ausprobieren... ;)


    Zitat

    Wie du schon vermutet hast, geht das bei Bascom nicht, dass ein Array bei 0 losgeht.

    Das ist ja doof - bei allen "Computersachen" wo irgendwie gezählt wird o.ä., geht's immer bei 0 los... naja, das hast Du ja rausgefunden, wie man das Problem umgeht... ;)

    It's only light - but we like it!


    Da es sich in letzter Zeit häuft: Ich beantworte keine PNs mit Fragen, die sich auch im Forum beantworten lassen!
    Insbesondere solche von Mitgliedern mit 0 Beiträgen, die dann meist auch noch Sachen fragen, die bereits im entsprechenden Thread beantwortet wurden.
    Ich bin keine private Bastler-Hotline, technische Tipps etc. sollen möglichst vielen Lesern im Forum helfen!

  • Danke dir erstmal für deine ausführlichen Antworten!


    Na die "richtigen Stellen" sind halt, wenn man von vorne auf den Cube schaut, das Muster anliegt was auch eingegeben wurde :)
    Das die LEDs aus der richtigen, also gewollten Perspektive leuchten, kriege ich schon ausgetüftelt denke ich...
    was mich allerdings stutzig macht ist, wie du es auch schon gesehen hast, dass nicht nur das "L", sondern auch "E" und "D" nicht richtig zu erkennen sind. Beim "L" kommt eher ein "T" raus... also stimmt irgendwas mit der Spaltenadressierung nicht. Ich weiß aber noch nicht was... weißt du vielleicht wieso das so ist?


    Und wie kann ich weitere "Bilder" wie z.B beim 3x3x3 Cube in den Code einbauen? Oder ist nun mit den 3 Pattern das Limit erreicht? Weil nur die werden ja hier abgerufen und wiederholt ausgegeben.


    Gruß
    Stas

  • Genau, nur die 3 werden hier in den Buffer geschrieben - das heisst aber nicht, dass es nicht mehr sein können... ;)


    Du kannst also nun nach dieser recht umständlichen Methode per C&P weitere Bilder hinzufügen, oder Du schaust Dir mal an, wie das bei dem 3er-Cube gemacht ist, mit diesen Data-Zeilen...


    dazu ggfs. auch mal die Bascom-Hilfe konsultieren, weil wenn Du nicht kapierst, was da passiert, dann kannst Du's ja auch schlecht programmieren... ;)


    Du legst dann praktisch Deine ganzen Bilder in Data-Zeilen ab (das braucht weniger Speicher als x mal "Buffer(foo) = bar"), liest sie dort in regelmäßigen Abständen raus (*da* kannst Du erst mal "waitms" benutzen, weil in der Mainloop ja sonst nix passiert) und schreibst sie in den Buffer


    das wäre übrigens auch ne geeignete Stelle, um die Daten umzusortieren. Also in anderer Reihenfolge in den Buffer zu schreiben, als die, in der Du sie aus den Data-Zeilen holst...


    Beim "L" kommt eher ein "T" raus... also stimmt irgendwas mit der Spaltenadressierung nicht. Ich weiß aber noch nicht was... weißt du vielleicht wieso das so ist?

    Hm, k.A. - würde noch mal überprüfen, ob auch wirklich alles richtig angeschlossen ist, also die Latches an den jeweiligen Spalten, sowie die Latch-Strobes an den richtigen µC-Portpins...

    It's only light - but we like it!


    Da es sich in letzter Zeit häuft: Ich beantworte keine PNs mit Fragen, die sich auch im Forum beantworten lassen!
    Insbesondere solche von Mitgliedern mit 0 Beiträgen, die dann meist auch noch Sachen fragen, die bereits im entsprechenden Thread beantwortet wurden.
    Ich bin keine private Bastler-Hotline, technische Tipps etc. sollen möglichst vielen Lesern im Forum helfen!

  • Hallo,


    ich habe noch ein Frage zum Multiplexen. Mit welcher Frequenz läuft nun der Cube bzw. wie lange braucht es bis ein Bild entsteht?
    Habe schon alles im www durchsucht aber finde keine passende erklärung dafür ?(


    Der Cube läuft mit 16 MHz vom Quarz, dann ist der Timer0 aktiviert und mit Vorteiler = 8 eingestellt. Dann ergibt das bei mir 16 MHz / prescale=8 / 8 Ebenen = 250KHz.
    Aber das kann ja gar nicht stimmen...

  • nein - der Takt 16 MHz wird erst mal durch 8 geteilt = 2 MHz. Mit diesem Takt zählt der Zähler, immer wenn er überläuft (= von 255 auf 0 springt), wird die Timer-ISR ausgelöst, also noch mal durch 256 = 7812,5 Hz. Mit dieser Geschwindigkeit werden die Ebenen durchgeschaltet, da es 8 Ebenen sind, wird der ganze Cube also 976,5625 mal in der Sekunde durchlaufen beim Multiplexen...


    dazu am Besten über Grundlagen informieren, was in so nem µC so vor sich geht... Timer und so.


    Das auch zu Deinem Ablaufplan oben: der stimmt so auch nicht ganz, Du hast im Prinzip zwei "Prozesse", die nebenher laufen: Das eine ist das Multiplexen in der Timer-ISR, das regelmäßig die Daten aus dem RAM liest und an die LEDs ausgibt, egal ob sich da nun was geändert hat oder nicht.


    Und das andere ist das Programm in der Hauptschleife, das die Bilder aus dem Flash holt, umsortiert, und in's RAM schreibt... wie schnell das wiederum geht, hat mit der Multiplex-Frequenz überhaupt nix zu tun.

    It's only light - but we like it!


    Da es sich in letzter Zeit häuft: Ich beantworte keine PNs mit Fragen, die sich auch im Forum beantworten lassen!
    Insbesondere solche von Mitgliedern mit 0 Beiträgen, die dann meist auch noch Sachen fragen, die bereits im entsprechenden Thread beantwortet wurden.
    Ich bin keine private Bastler-Hotline, technische Tipps etc. sollen möglichst vielen Lesern im Forum helfen!