4x4x4 RGB Cube

  • Hey,


    ich habe vor, einen 4x4x4 RGB Cube zu bauen.
    Ich möchte jede Säule einzeln ansteuern (durch folgende Latches 74HC 573).
    Alle Ebenen werden seperat von einem Transistor/FET durchgeschaltet.


    Nun meine Frage:
    Ich habe mich mal hin gesetzt und folgenden Code teils aus dem Internet teils selbst geschrieben.
    Würde dieser Code funktionieren, bzw. hättet ihr Verbesserungsvorschläge?


    Danke :)


    Gruß Shock


    $regfile = "m16def.dat"
    $crystal = 1000000


    Config Porta.0 = Output ' Latch rot
    Config Porta.1 = Output ' Latch blau
    Config Porta.2 = Output ' Latch grün
    Config Portb.1 = Output ' Ebene (1)
    Config Portc.0 = Output ' Signal für Latch 1-8
    Config Portd.0 = Output ' Signal für Latch 9-16


    Porta = &B11111111
    Portb = &B11111111
    Portc = &B11111111
    Portd = &B11111111


    Dim Wiederholung As Word
    Dim Weiter_latch As Word
    Dim Weiter_signal1 As Word
    Dim Weiter_signal2 As Word
    Dim Weiter_ebene As Word
    Dim Ebene As Byte
    Dim Latch As Byte


    Do


    For Wiederholung = 0 To 100


    For Ebene = 1 To 4


    For Latch = 0 To 2


    Porta = Lookup(weiter_latch , Tabelle_latch)
    Weiter_latch = Weiter_latch + 1
    Portc = Lookup(weiter_signal1 , Tabelle_animationen1)
    Portd = Lookup(weiter_signal2 , Tabelle_animationen2)
    Waitms 1
    Weiter_signal1 = Weiter_signal1 + 1
    Weiter_signal2 = Weiter_signal2 + 1
    Portc = Lookup(weiter_signal1 , Tabelle_animationen1)
    Portd = Lookup(weiter_signal2 , Tabelle_animationen2)
    Waitms 1
    Weiter_signal1 = Weiter_signal1 + 1
    Weiter_signal2 = Weiter_signal2 + 1
    Portc = Lookup(weiter_signal1 , Tabelle_animationen1)
    Portd = Lookup(weiter_signal2 , Tabelle_animationen2)
    Waitms 1
    Weiter_signal1 = Weiter_signal1 + 1
    Weiter_signal2 = Weiter_signal2 + 1
    Portc = Lookup(weiter_signal1 , Tabelle_animationen1)
    Portd = Lookup(weiter_signal2 , Tabelle_animationen2)
    Waitms 1
    Weiter_signal1 = Weiter_signal1 + 1
    Weiter_signal2 = Weiter_signal2 + 1
    Porta = Lookup(weiter_latch , Tabelle_latch)
    Weiter_latch = Weiter_latch + 1


    Next Latch


    Portb = Lookup(weiter_ebene , Tabelle_ebenen)
    Weiter_ebene = Weiter_ebene + 1
    Waitms 2
    Portb = Lookup(weiter_ebene , Tabelle_ebenen)
    Weiter_ebene = Weiter_ebene + 1


    Next Ebene


    Next Wiederholung


    Loop


    End


    Tabelle_animationen1: 'für portc
    'Bild1
    Data &B11111111 , &B00000000 , &B00000000
    Data &B11111111 , &B00000000 , &B00000000
    Data &B11111111 , &B00000000 , &B00000000
    Data &B11111111 , &B00000000 , &B00000000
    'Bild2
    Data &B11111111 , &B00000000 , &B00000000
    Data &B11111111 , &B00000000 , &B00000000
    Data &B11111111 , &B00000000 , &B00000000
    Data &B11111111 , &B00000000 , &B00000000


    Tabelle_animationen2: 'für portd
    'Bild1
    Data &B11111111 , &B00000000 , &B00000000
    Data &B11111111 , &B00000000 , &B00000000
    Data &B11111111 , &B00000000 , &B00000000
    Data &B11111111 , &B00000000 , &B00000000
    'Bild2
    Data &B11111111 , &B00000000 , &B00000000
    Data &B11111111 , &B00000000 , &B00000000
    Data &B11111111 , &B00000000 , &B00000000
    Data &B11111111 , &B00000000 , &B00000000


    Tabelle_ebenen:
    'Ebene1
    Data &B10000000
    Data &B00000000
    'Ebene2
    Data &B01000000
    Data &B00000000
    'Ebene3
    Data &B00100000
    Data &B00000000
    'Ebene4
    Data &B00010000
    Data &B00000000


    Tabelle_latch:
    'latch rot
    Data &B10000000
    Data &B00000000
    'latch grün
    Data &B01000000
    Data &B00000000
    'latch blau
    Data &B00100000
    Data &B00000000

  • Ok ich habe vielleicht etwas zu wenig Infos gegeben wie das genau aussehen soll.


    Meine konkrete Frage zu dem Projekt ist diese:
    Ich sende durch meinen Atmega z.B. das Software PWM an folgenden Latch (74HC 573): 1/8 der Zeit ein; 7/8 aus
    Würde dieser Teil so aufgehen?
    pina.1 = 1 (LE Pin vom Latch)
    pina.0 = 1
    waitus 1
    pina.0 = 0
    waitus 7
    pina.1 = 0


    und wenn ich nun den Latch am LE Pin abschalte wiederholt er mir diesen Befehl, bis ich LE wieder high setze und einen neuen Befehl gebe?

  • Ein 74573 kann keine "Befehle" ausführen. Siehe dazu im Datenblatt, was Latch enable bewirkt...


    wenn Du damit den Cube insgesamt dimmen willst, dann musst Du den Output enable benutzen (so er denn einen hat, DB gerade nicht da), dann würde ich aber das dimmen extra per HW-PWM machen...

    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!

  • "While the LE input is held at a high level, the Q
    outputs will follow the data input precisely or
    inversely. When the LE is taken low, the Q outputs
    will be latched precisely or inversely at the logic level
    of D input data."
    https://cdn-reichelt.de/docume…74HC563_74HC573%23STM.pdf


    Also ich hab das so verstanden, dass ich das Signal an D anlege und Q wird das Signal in einer "Endlosschleife" bis zu einem neuen Signal halten.


    HW-PWM geht leider nicht, da ich für jede der 16 Säulen ein PWM-Signal benötige.

  • Ja, der hält dann das Signal, entweder High oder Low.


    Er hält aber keine Signal*folge*

    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!