So, nun ist alles in dem Timer-ISR.
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! 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...
Und so sieht zur Zeit das Programm aus:
$regfile = "m32def.dat"
$crystal = 16000000
$hwstack = 32
$swstack = 32
$framesize = 40
Dim Ebene As Byte
Ebene = 0
Dim Ebenenbit As Byte
Dim Buffer(64) As Byte
Dim Byteadress As Byte
Config Portb = Output 'Ebenen
Config Portc = Output 'Spalten
Config Porta = Output 'Latches LE
Config Timer0 = Timer , Prescale = 8 'Frequenz für Multiplexing runterteilen
On Timer0 Multiplex
Enable Timer0
Enable Interrupts
Gosub Clear_all 'Lösche Matrix
Looping:
Gosub Show_pattern_1 'Stelle "Irgendwas" dar
Wait 1
Gosub Show_pattern_2 'Stelle "Irgendwas" dar
Wait 1
Gosub Show_pattern_3 'Stelle "Irgendwas" dar
Wait 1
Gosub Clear_all 'Lösche Matrix
Goto Looping
'-----------------------------------------------------------------------
Multiplex:
Portc = 0 'Spaltentreiber abschalten
Incr Ebene 'Ebene hochzählen
If Ebene = 8 Then Ebene = 0 'Überlauf abfangen
Portb = Ebene 'Ebenentreiber umschalten
Portb.3 = 1 ' Latch-Ausgang aus
Byteadress = Ebene * 8 ' Nummer des ersten Bytes in der aktuellen Ebene
Incr Byteadress
Porta = 0 ' alle Latch-Strobes deaktivieren
Portc = Buffer(byteadress) ' zugehöriges Byte an den Latch-Eingang legen
PortA.7 = 1
Porta.7 = 0 ' Puls erzeugen, damit das Latch 1 die Daten übernimmt
Incr Byteadress ' nächstes Byte ausgeben
Portc = Buffer(byteadress) ' zugehöriges Byte an den Latch-Eingang legen
PortA.6 = 1
Porta.6 = 0 ' Puls erzeugen, damit das Latch 2 die Daten übernimmt
Incr Byteadress ' nächstes Byte ausgeben
Portc = Buffer(byteadress) ' zugehöriges Byte an den Latch-Eingang legen
PortA.5 = 1
Porta.5 = 0 ' Puls erzeugen, damit das Latch 3 die Daten übernimmt
Incr Byteadress ' nächstes Byte ausgeben
Portc = Buffer(byteadress) ' zugehöriges Byte an den Latch-Eingang legen
Porta.4 = 1
Porta.4 = 0 ' Puls erzeugen, damit das Latch 4 die Daten übernimmt
Incr Byteadress ' nächstes Byte ausgeben
Portc = Buffer(byteadress) ' zugehöriges Byte an den Latch-Eingang legen
Porta.3 = 1
Porta.3 = 0 ' Puls erzeugen, damit das Latch 5 die Daten übernimmt
Incr Byteadress ' nächstes Byte ausgeben
Portc = Buffer(byteadress) ' zugehöriges Byte an den Latch-Eingang legen
Porta.2 = 1
Porta.2 = 0 ' Puls erzeugen, damit das Latch 6 die Daten übernimmt
Incr Byteadress ' nächstes Byte ausgeben
Portc = Buffer(byteadress) ' zugehöriges Byte an den Latch-Eingang legen
Porta.1 = 1
Porta.1 = 0 ' Puls erzeugen, damit das Latch 7 die Daten übernimmt
Incr Byteadress ' nächstes Byte ausgeben
Portc = Buffer(byteadress) ' zugehöriges Byte an den Latch-Eingang legen
Porta.0 = 1
Porta.0 = 0 ' Puls erzeugen, damit das Latch 8 die Daten übernimmt
Portb.3 = 0 ' Latch-Ausgang an
Return
'------------------------------------------------------------------------
Show_pattern_1:
Buffer(1) = &B00000011
Buffer(2) = &B00000011
Buffer(3) = &B00000011
Buffer(4) = &B00000011
Buffer(5) = &B00000011
Buffer(6) = &B00000011
Buffer(7) = &B11111111
Buffer(8) = &B11111111
...
...
Buffer(63) = &B11111111
Buffer(64) = &B11111111
Return
Show_pattern_2:
Buffer(1) = &B11111111
Buffer(2) = &B11111111
Buffer(3) = &B00000011
Buffer(4) = &B00111111
Buffer(5) = &B00111111
Buffer(6) = &B00000011
Buffer(7) = &B11111111
Buffer(8) = &B11111111
...
...
Buffer(63) = &B11111111
Buffer(64) = &B11111111
Return
Show_pattern_3:
Buffer(1) = &B00011111
Buffer(2) = &B01111111
Buffer(3) = &B11100011
Buffer(4) = &B11000011
Buffer(5) = &B11000011
Buffer(6) = &B11100011
Buffer(7) = &B01111111
Buffer(8) = &B00011111
...
...
Buffer(63) = &B01111111
Buffer(64) = &B00011111
Return
Clear_all:
Buffer(1) = 0
Buffer(2) = 0
Buffer(3) = 0
Buffer(4) = 0
Buffer(5) = 0
Buffer(6) = 0
Buffer(7) = 0
Buffer(8) = 0
...
...
Buffer(63) = 0
Buffer(64) = 0
Return
Alles anzeigen