Hallo
Um eine effiziente Ansteuerung entwickeln zu können sollte man zumindest den Schaltplan kennen.
In C habe ich mal eine clevere Ansteuerung für eine 10x12-Matrix entwickelt die danach schreit nach Bascom portiert zu werden.
Gruß
mic
Hallo
Um eine effiziente Ansteuerung entwickeln zu können sollte man zumindest den Schaltplan kennen.
In C habe ich mal eine clevere Ansteuerung für eine 10x12-Matrix entwickelt die danach schreit nach Bascom portiert zu werden.
Gruß
mic
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Hi, danke für die Antworten
ich habe einen Plan von der "steuerplatine" von der Matrix gemacht, die sind aber mit Lochmaster gemacht. Die Kontakte zum mega16 verbinde ich über ein Steckbrett.
Hier die Fotos:
Ich hab den Schaltplan jetzt in Lochmaster gemacht, weil ich nicht wusste, wie man das mit Splan macht. Habe auch nur die Demoversion davon...
@radbruch: Das ist gut, wenn du es erlaubst, würde ich mir den Code mal angucken
gruß nxtman95
Oje.
Durch das Steckbrett bist du relativ frei beim Belegen der Kontrollerpins. Optimal wären 1 1/2 komplette Ports für die Zeilen, oder zumindest 3 je aufeinander folgende Port-Nipples, also Pin0-Pin3 oder Pin4-Pin7. Dadurch kann man die Zeilen ohne grosse Berechnung ausgeben. Das Weiterschalten der Spalten ist nicht ganz so zeitkritisch, allerdings sind auch hier zusammenhängende Pins von Vorteil.
Beim Bildspeicher würde ich ganze Bytes bevorzugen. Die 11 Zeilen würde ich in 3 Nipples zu je 4 Bits speichern, verteilt auf zwei Bytes oder einem 16-Bit-Wert.
Bei der Ausgabe werden nacheinander die Spalten durchgeschaltet und pro Spalte jeweils alle Zeilenbits ausgegeben. Für unterschiedliche Helligkeiten der Bildpunkte kann man mehrere Bildspeicher als Farbebenen verwalten:Code:Aufbau des Bildspeichers: 0123 4567 8 | Spalte 0000 0000 0 | Bit \ 1111 1111 1 | | Zeile 2222 2222 2 | | Pin 0-3 3333 3333 3 | / 4444 4444 4 | \ 5555 5555 5 | | Zeile 4-7 6666 6666 6 | | Pin 4-7 7777 7777 7 | / 8888 8888 8 | Bit \ 9999 9999 9 | | Zeile 1111 1111 1 | | Pin 8-10 0000 0000 0 | /
https://www.roboternetz.de/community...l=1#post494065
Gruß
mic
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Das ist ne gute Idee
Nur, wie lese ich das aus? Mit einer For ... next schleife?
und, soll ich den Bildspeicher dann in ne externe Datei verlegen, sprich eine Textdatei?
Gruß und danke für die gute Antwort von nxtman95
@radbruch:
Kann man die LED-Matrix aus dem Video irgendwo kaufen oder hast du dir die Platine selber gelayoutet und ätzen/bestücken lassen?
MfG
Torrentula
MfG Torrentula
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
Geändert von radbruch (22.10.2011 um 13:24 Uhr) Grund: Kleine Optimierung eingebaut
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Danke für den Code,
und wie kann ich jetzt das "Bild" anzeigen lassen, müssen die Ports nicht noch als Output konfiguriert werden?
gruß nxtman95
Lesezeichen