Hallo
Das ist die PingPong-Platine vom C. 120 LEDs mit einem 8MHz-Mega8:
http://www.conrad.de/ce/de/product/902766/
https://www.roboternetz.de/community...mprogrammieren
Zum Bildspeicher: Das Wort klingt zwar gewaltig, aber es handelt sich nur um neun 16-Bit-Werte die selbstverständlich im Ram des µC verwaltet werden. Der Aufbau eines Einzelbildes läuft etwa so: Alle Spalten aus, Zeilenbits für erste Spalte setzen, erste Spalte einschalten, kurz warten, alle Spalten aus, Zeilenbits für zweite Spalte setzen, zweite Spalte ein, kurz warten (später mal ist das der Abstand zwischen den ISR-Aufrufen), alle Spalten aus, ... , letzte Spalte an, kurz warten, letzte Spalte aus, Zeilenbits für erste Spalte setzen,...usw. immer schneller bis das Bild nicht mehr flimmert.
Für den Anfang, um es mit Interrupts nicht ünnötig kompliziert zu machen, kann man das in der Hauptschleife programmieren:
Code:
$regfile = "m16def.dat"
$crystal = 16000000
$hwstack = 40
$swstack = 16
$framesize = 32
Declare Sub Zeilensetzen
Dim Bildspeicher(11) As Word , Spalte As Byte , Temp As Word
Bildspeicher(1) = &B01100001111
Bildspeicher(2) = &B01100001111
Bildspeicher(3) = &B10000001111
Bildspeicher(4) = &B10000001111
Bildspeicher(5) = &B01111110000
Bildspeicher(6) = &B01111110000
Bildspeicher(7) = &B10011110000
Bildspeicher(8) = &B10011110000
Bildspeicher(9) = &B01100001111
Bildspeicher(10) = &B01100001111
Bildspeicher(11) = &B10000001111
Spalte = 1
Do
Select Case Spalte
Case 1 : Reset Portc.7
Zeilensetzen
Set Portd.0
Case 2 : Reset Portd.0
Zeilensetzen
Set Portd.1
Case 3 : Reset Portd.1
Zeilensetzen
Set Portd.2
Case 4 : Reset Portd.2
Zeilensetzen
Set Portd.3
'...
Case 9 : Reset Portd.7
Zeilensetzen
Set Portc.7
End Select
If Spalte < 9 Then Spalte = Spalte + 1 Else Spalte = 1
Waitms 10
'hier kann man dann das Bild zusammenbasteln
Loop
End
Sub Zeilensetzen
Temp = Bildspeicher(spalte)
If temp.0 = 1 Then Set Porta.0 Else Reset Porta.0
If temp.1 = 1 Then Set Porta.1 Else Reset Porta.1
If temp.2 = 1 Then Set Porta.2 Else Reset Porta.2
If temp.3 = 1 Then Set Porta.3 Else Reset Porta.3
If temp.4 = 1 Then Set Portb.4 Else Reset Portb.4
If temp.5 = 1 Then Set Portb.5 Else Reset Portb.5
'...
If temp.10 = 1 Then Set Portc.1 Else Reset Portc.1
If temp.11 = 1 Then Set Portc.2 Else Reset Portc.2
End Sub
'Wenn die Pins aufeinanderfolgen ist es deutlich schlanker:
'Sub Zeilensetzen
'Porta = Bildspeicher(spalte) And 255
'Portb = Bildspeicher(spalte) / 255 And 7
'End Sub
(Kompilierbar, aber ungetestet und eher symbolisch gedacht)
Gruß
mic
Lesezeichen