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:
(Kompilierbar, aber ungetestet und eher symbolisch gedacht)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
Gruß
mic







Zitieren


Lesezeichen