Hi Leute,
ich les schon ne ganze Weile bei euch. Ich habe ne LED Matrix (10 * 12) wobei die 12 Spalten über ein Schieberegister angesprochen werden.
Heißt jetzt im Klartext, ich Multiplexe über die Spalten. Das klappt auch soweit alles. (Atmega8)
Jetzt meine Frage: Gibt es eine elegantere Möglichkeit Muster zu speichern als von mir jetzt genutzt? (Gibt es sicher, aber WIE?^^)
Da ich Momentan noch keinen Schalter dran habe schaltet das Muster nach 10 durchläufen selbst um. Ich habe mal die SPalten 3 - 8 weg gelassen. da steht das Selbe wie in den anderen spalten bzw halt die restlichen muster drin.
Bei mir laufen beide Muster von rechts nachlinks und zurück.
Also wie kann ich das dauernde IF umgehen und irgendwie die Bilder ablegen und dann passend zur Spalte wieder reinrufen?
Bin über jeden Ratschlag dankbar
Grüße C-F600
$crystal = 8000000
$regfile = "m8def.dat"
$hwstack = 256
$swstack = 256
$framesize = 256
Config Portc.0 = Output
Config Portc.1 = Output
Config Portc.2 = Output
Config Portc.3 = Output
Config Portd.4 = Output
Config Portd.5 = Output
Config Portd.6 = Output
Config Portd.7 = Output
Config Portb.0 = Output
Config Portb.1 = Output
Config Portb.2 = Output
Config Portb.3 = Output
Config Portb.4 = Output
D Alias Portb.4
Clk Alias Portb.3
Strobe Alias Portb.2
Zeile 1 Alias Portc.0
Zeile 2 Alias Portc.1
Zeile 3 Alias Portc.2
Zeile 4 Alias Portc.3
Zeile 5 Alias Portd.4
Zeile 6 Alias Portd.5
Zeile 7 Alias Portd.6
Zeile 8 Alias Portd.7
Zeile 9 Alias Portb.0
Zeile 10 Alias Portb.1
Dim Zaehler As Byte
Dim Rechts As Byte
Dim Sprung As Byte
Dim Laufen As Byte
Dim N As Byte
Dim Z As Byte
Dim X As Byte
Dim U As Byte
Dim V As Byte
Dim Timer0var As Byte
Dim Muster As Byte
Config Timer1 = Timer , Prescale = 256
Enable Timer1
On Timer1 Isr_von_timer1
Enable Interrupts
Timer1 = 50000
'Config Timer0 = Timer , Prescale = 256
'Enable Timer0
'On Timer0 Isr_von_timer0
'Timer0 = 0
Do
Ueberspringen:
'Spalte 1
'If X = 1 Then
D = 0
'Else
'D = 1
'End If
Clk = 1
Clk = 0
N = 12 - Z
For Laufen = N To 11 'Lauflicht, jeweils nach Zähler von Timer eine 1 bit Reihe mehr auf dem Schieberegister
D = 1
Clk = 1
Clk = 0
Next Laufen
Strobe = 1
Strobe = 0
If Muster < 10 Then 'solange Variable Muster kleiner 10 das erste Muster
Zeile 3 = 1
Zeile 4 = 1
Zeile 5 = 1
Waitms 1
Zeile 3 = 0
Zeile 4 = 0
Zeile 5 = 0
Else 'sonst das zweite Muster
Zeile 5 = 1
Zeile 2 = 1
Zeile 8 = 1
Waitms 1
Zeile 8 = 0
Zeile 5 = 0
Zeile 2 = 0
End If
'Spalte 2
Gosub Eins_weiter
If Muster < 10 Then
Zeile 2 = 1
Zeile 3 = 1
Zeile 4 = 1
Zeile 5 = 1
Zeile 6 = 1
Waitms 1
Zeile 2 = 0
Zeile 3 = 0
Zeile 4 = 0
Zeile 5 = 0
Zeile 6 = 0
Else
Zeile 5 = 1
Zeile 7 = 1
Zeile 3 = 1
Waitms 1
Zeile 5 = 0
Zeile 3 = 0
Zeile 7 = 0
End If
'Gosub Ueberspringen
'Spalte 8
Gosub Eins_weiter
If Muster < 10 Then
Zeile 1 = 1
Zeile 2 = 1
Zeile 3 = 1
Zeile 4 = 1
Zeile 5 = 1
Zeile 6 = 1
Zeile 7 = 1
Zeile 8 = 1
Waitms 1
Zeile 1 = 0
Zeile 2 = 0
Zeile 3 = 0
Zeile 4 = 0
Zeile 5 = 0
Zeile 6 = 0
Zeile 7 = 0
Zeile 8 = 0
End If
'Spalte 9
Gosub Eins_weiter
If Muster < 10 Then
Zeile 1 = 1
Zeile 2 = 1
Zeile 3 = 1
Zeile 4 = 1
Zeile 5 = 1
Zeile 6 = 1
Zeile 7 = 1
Waitms 1
Zeile 1 = 0
Zeile 2 = 0
Zeile 3 = 0
Zeile 4 = 0
Zeile 5 = 0
Zeile 6 = 0
Zeile 7 = 0
End If
'Spalte 10
Gosub Eins_weiter
If Muster < 10 Then
Zeile 2 = 1
Zeile 3 = 1
Zeile 4 = 1
Zeile 5 = 1
Zeile 6 = 1
Waitms 1
Zeile 2 = 0
Zeile 3 = 0
Zeile 4 = 0
Zeile 5 = 0
Zeile 6 = 0
End If
'Spalte 11
Gosub Eins_weiter
If Muster < 10 Then
Zeile 3 = 1
Zeile 4 = 1
Zeile 5 = 1
Waitms 1
Zeile 3 = 0
Zeile 4 = 0
Zeile 5 = 0
End If
'Spalte 12
Gosub Eins_weiter
Loop
End
Loeschen: 'Alle Spalten auf 0
For Zaehler = 1 To 11
D = 1
Clk = 1
Clk = 0
Next Zaehler
Return
Eins_weiter: 'Multiplexing der Spalten
D = 1
Clk = 1
Clk = 0
Strobe = 1
Strobe = 0
Return
Isr_von_timer1:
Timer1 = 50000
If Muster < 10 Then 'Muster umschalten
If U = 0 Then
Incr Z
End If
If U = 1 Then
Decr Z
End If
If Z = 1 Then
U = 1
End If
If Z = 0 Then
U = 0
End If
X = Z Mod 2
Incr Muster
Else
If U = 0 Then 'U ist die zum wechsel zwischen incr und decr
Incr Z 'Zähler durchläufe bzw anzahl sprünge
End If
If U = 1 Then
Decr Z
End If
If Z = 5 Then 'anzahl sprünge'
U = 1
End If
If Z = 0 Then
U = 0
End If
X = Z Mod 2 'abfrage ob gerade oder ungerade Z - damit hin und her laufen
Incr Muster
If Muster = 20 Then
Muster = 0
End If
End If
Return
Alles anzeigen