PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : LED Matrix möglichst effizient ansteuern



nxtman95
21.10.2011, 13:53
Hallo Community,
Ich habe mir eine 9 x 11 Pixel Led Matrix gebaut. Die matrix steht hochkant, funktionert mit Multiplexing (wie sonst :D), und ist funktionstüchtig.
Ich habe sie über ein Steckbrett mit meinem Atmel Evaluations-Board verbunden. Eingesteckt ist ein Atmega16.
Nun ist meine Frage:
Wie kann ich die Matrix möglichst leicht mit Bascom ansteuern? Da man ja in Bascom nur 4kb große Programme entwickeln kann und ich auch Animationen bzw. Texte über die Matrix laufen lassen will.
kennt jemand eine gute Ansteuerung, oder sollte ich mir eine andere Programmiersprache lernen?

Hoffe auf gute Antworten :)

Gruß nxtman95

Besserwessi
21.10.2011, 14:42
Die Beschränkung auf 4 kBytes gilt bei BASCOM nur für die kostenlose Testversion. Die richtige Version kann auch mehr Flash nutzen.
9 x 11 Pixel ist vom Ausbau nicht gerade kompatibel mit 8 Bits / Byte. Es ist auch noch die Frage ob man die LEDs nur an/aus, oder auch in der Helligkeit steuern will. Für die Ansteuerung selber sollten auch 4 kBytes noch reichen, nur Animationen nehmen ggf. viel Platz ein. Texte Sind dagegen eher klein.

Ob man mit BASCOM glücklich wird, muss man selber wissen - dafür ist die Testversion mit 4 kB Limit da. Als eine Alternative gibt es C (z.B. GCC) oder mit etwas Umstand auch C++ .

radbruch
21.10.2011, 14:56
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

nxtman95
21.10.2011, 16:27
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:
20331
20332
20333


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

radbruch
21.10.2011, 19:27
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.


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 | /




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:


http://www.youtube.com/watch?v=EpW4n09WuZA
https://www.roboternetz.de/community/threads/50954-Ping-Pong-umprogrammieren?p=494065&viewfull=1#post494065

Gruß

mic

nxtman95
22.10.2011, 00:47
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

Torrentula
22.10.2011, 09:25
@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

radbruch
22.10.2011, 10:59
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/threads/50954-Ping-Pong-umprogrammieren

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:


$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

nxtman95
22.10.2011, 16:03
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

radbruch
22.10.2011, 16:30
...müssen die Ports nicht noch als Output konfiguriert werden Klar müssen sie das. Da ich aber deine Pinbelegung nicht kenne, und es ja eigentlich deine Matrix ist, habe ich dir auch was zum Tippen übriggelassen.

nxtman95
22.10.2011, 16:50
Ich verstehe jetzt immer noch nicht, wie ich jetzt an dieser Stelle


'hier kann man dann das Bild zusammenbasteln

das Bild, oder die Bilder zusammensetzen soll o.O

radbruch
22.10.2011, 18:10
Der Bildspeicher ist die Schnittstelle zwischen deinem Programm und der Matrix. Sein Inhalt wird, normalerweise im Hintergrund per Interrupt, immer an die Matrix ausgegeben. Um die Anzeige zu ändern muss man deshalb den Bildspeicher ändern. Jedes Bit im Array Bildspeicher() repräsentiert eine LED in der Matrix. Wenn das Bit zum Zeitpunkt der Spaltenabfrage gesetzt (=high) ist leuchtet die LED nicht gesetzt (=low) bedeutet LED ist aus.

Jedes Bit im Bildspeicher steht für ein Pixel (http://de.wikipedia.org/wiki/Pixel) im darzustellenden Bild. Wie ändert man ein bestimmtes Bit im Bildspeicher? Dafür schreibt man sich kleine Funktionen die gezielt einen einzelnen Pixel ändern. Zum Setzen und Löschen könnten die Funktionen etwa so aussehen:


Declare Sub Zeilensetzen
Declare Sub Set_pixel(byval X As Byte , Byval Y As Byte) ' Nullpunkt ist oben links als 0,0
Declare Sub Reset_pixel(byval X As Byte , Byval Y As Byte)

Dim Bildspeicher(11) As Word , Spalte As Byte
Dim X As Byte , Y As Byte
Dim Temp As Word , Zaehler As Word

' ...

If Spalte < 9 Then Spalte = Spalte + 1 Else Spalte = 1

Waitus 100 ' 10000*100µs ergeben eine Sekunde

'hier kann man dann das Bild zusammenbasteln

Select Case Zaehler
Case 10000 : For X = 0 To 8 ' diagonale
Set_pixel X , X
Next X

Case 20000 : For X = 0 To 10 ' waagrecht
Set_pixel X , 0
Set_pixel X , 8
Next X

Case 30000 : For Y = 0 To 8 ' senkrecht
Set_pixel 0 , Y
Set_pixel 10 , Y
Next X

Case 40000 : For X = 1 To 9 ' alle an
Bildspeicher(x) = 255
Next X

Case 50000 : For X = 1 To 9 ' Bitmuster
Bildspeicher(x) = &B10101010101
Next X

Case 60000 : For X = 1 To 9 ' alle aus
Bildspeicher(x) = 0
Next X
Zaehler = 0
End Select

Zaehler = Zaehler + 1
Loop

End

Sub Set_pixel(byval x As Byte , byval Y As Byte)
Bildspeicher(x + 1).y = 1 ' Bascom startet Arrays mit 1
End Sub

Sub Reset_pixel(byval X As Byte , Byval Y As Byte)
Bildspeicher(x + 1).y = 0
End Sub

Sub Zeilensetzen
(ungetestet)


Gruß

mic

nxtman95
22.10.2011, 22:17
danke, dass du mir jetzt schon (fast) den ganzen Code zusammen "gebastelt" hast. Meiner sieht jetzt so aus:


$regfile = "m16def.dat"
$crystal = 16000000
$hwstack = 40
$swstack = 16
$framesize = 32

Config Porta = Output
Config Portb = Output
Config Portc = Output
Config Portd = Output

Declare Sub Zeilensetzen
Declare Sub Set_pixel(byval X As Byte , Byval Y As Byte) ' Nullpunkt ist oben links als 0,0
Declare Sub Reset_pixel(byval X As Byte , Byval Y As Byte)

Dim X As Byte , Y As Byte

Dim Bildspeicher(11) As Word , Spalte As Byte , Temp As Word , Zaehler As Word

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 5 : Reset Portd.2
Zeilensetzen
Set Portd.3

Case 6 : Reset Portd.2
Zeilensetzen
Set Portd.3

Case 7 : Reset Portd.2
Zeilensetzen
Set Portd.3

Case 8 : 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


Waitus 100


Select Case Zaehler
Case 10000 : For X = 0 To 8 ' diagonale
Set_pixel X , X
Next X

Case 20000 : For X = 0 To 10 ' waagrecht
Set_pixel X , 0
Set_pixel X , 8
Next X

Case 30000 : For Y = 0 To 8 ' senkrecht
Set_pixel 0 , Y
Set_pixel 10 , Y
Next X

Case 40000 : For X = 1 To 9 ' alle an
Bildspeicher(x) = 255
Next X

Case 50000 : For X = 1 To 9 ' Bitmuster
Bildspeicher(x) = &B10101010101
Next X

Case 60000 : For X = 1 To 9 ' alle aus
Bildspeicher(x) = 0
Next X
Zaehler = 0
End Select

Zaehler = Zaehler + 1
Loop

End


Sub Set_pixel(byval X As Byte , Byval Y As Byte)
Bildspeicher(x + 1).y = 1 ' Bascom startet Arrays mit 1
End Sub

Sub Reset_pixel(byval X As Byte , Byval Y As Byte)
Bildspeicher(x + 1).y = 0
End Sub

Sub Zeilensetzen
Temp = Bildspeicher(spalte)
If Temp.1 = 1 Then Set Portd.2 Else Reset Portd.2
If Temp.2 = 1 Then Set Portd.1 Else Reset Portd.1
If Temp.3 = 1 Then Set Portd.0 Else Reset Portd.0
If Temp.4 = 1 Then Set Portc.7 Else Reset Portc.7
If Temp.5 = 1 Then Set Portc.6 Else Reset Portc.6
If Temp.6 = 1 Then Set Portc.5 Else Reset Portc.5
If Temp.7 = 1 Then Set Portc.4 Else Reset Portc.4
If Temp.8 = 1 Then Set Portc.3 Else Reset Portc.3
If Temp.9 = 1 Then Set Portc.2 Else Reset Portc.2
If Temp.10 = 1 Then Set Portc.1 Else Reset Portc.1
If Temp.11 = 1 Then Set Portc.0 Else Reset Portc.0
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


aber es gibt immer noch keine Reaktion auf der Matrix. Sollte ich die Platine von der Matrix vlt. nochmal neu machen und diesmal mit Schieberegistern?

gruß nxtman95

radbruch
22.10.2011, 22:45
Case 3 : Reset Portd.1
Zeilensetzen
Set Portd.2

Case 4 : Reset Portd.2
Zeilensetzen
Set Portd.3

Case 5 : Reset Portd.2
Zeilensetzen
Set Portd.3
So einfach gehts ja nicht. Du musst schon deine eigenen Pins einsetzen.

nxtman95
23.10.2011, 00:01
Och man binn ich doof! :Haue #-o
Das hab ich völlig vergessen xD
Danke für den Tipp, sonst wär ich wahrscheinlich nie drauf gekommen...

Aber jetzt, wenn das Muster "alle an" da ist, ist nur die hälfte der Leds angeschaltet...

Edit: Die Zeilen 5,6,7,8,9 und 11 gehen nicht komischerweise... alles ist gut verlötet, also kein kurzer und in der software kann ich auch keinen Fehler entdecken...

Gruß nxtman95

nxtman95
24.10.2011, 18:54
radbruch, ich verzweifele an dem Ding. Ich hab schon alles mögliche durchgecheckt die Platine, den Code. Ich binn halt noch nicht so gut, was das programmieren betrifft...

radbruch
24.10.2011, 19:02
Durchaus möglich, dass mein Code nicht funktioniert. Wie ist deine Matrix jetzt angeschlossen? Wie sieht das komplette Programm aus? Wir sollten uns Spalte für Spalte und Zeile für Zeile vorantasten.

nxtman95
24.10.2011, 19:03
Hi, danke für die schnelle Antwort,

der Code:

$regfile = "m16def.dat"
$crystal = 16000000
$hwstack = 40
$swstack = 16
$framesize = 32

Config Porta = Output
Config Portb = Output
Config Portc = Output
Config Portd = Output

Declare Sub Zeilensetzen
Declare Sub Set_pixel(byval X As Byte , Byval Y As Byte) ' Nullpunkt ist oben links als 0,0
Declare Sub Reset_pixel(byval X As Byte , Byval Y As Byte)

Dim X As Byte , Y As Byte

Dim Bildspeicher(11) As Word , Spalte As Byte , Temp As Word , Zaehler As Word

Spalte = 1

Do
Select Case Spalte
Case 1 : Reset Portb.5
Zeilensetzen
Set Portb.4

Case 2 : Reset Portb.4
Zeilensetzen
Set Portb.3

Case 3 : Reset Portb.3
Zeilensetzen
Set Portb.2

Case 4 : Reset Portb.2
Zeilensetzen
Set Portb.1

Case 5 : Reset Portb.1
Zeilensetzen
Set Portb.0

Case 6 : Reset Portb.0
Zeilensetzen
Set Porta.7

Case 7 : Reset Porta.7
Zeilensetzen
Set Porta.6

Case 8 : Reset Porta.6
Zeilensetzen
Set Porta.5

Case 9 : Reset Porta.5
Zeilensetzen
Set Portb.5
End Select

If Spalte < 9 Then Spalte = Spalte + 1 Else Spalte = 1


Waitus 100


Select Case Zaehler
Case 1000 : For X = 0 To 8 ' diagonale
Set_pixel X , X
Next X

Case 2000 : For X = 0 To 10 ' waagrecht
Set_pixel X , 0
Set_pixel X , 8
Next X

Case 3000 : For Y = 0 To 8 ' senkrecht
Set_pixel 0 , Y
Set_pixel 10 , Y
Next X

Case 4000 : For X = 1 To 11 ' alle an
Bildspeicher(x) = &B11111111111
Next X

Case 5000 : For X = 1 To 9 ' Bitmuster
Bildspeicher(x) = &B11111111100
Next X

Case 6000 : For X = 1 To 9 ' alle aus
Bildspeicher(x) = 0
Next X

Zaehler = 0

End Select

Zaehler = Zaehler + 1
Loop

End


Sub Set_pixel(byval X As Byte , Byval Y As Byte)
Bildspeicher(x + 1).y = 1 ' Bascom startet Arrays mit 1
End Sub

Sub Reset_pixel(byval X As Byte , Byval Y As Byte)
Bildspeicher(x + 1).y = 0
End Sub

Sub Zeilensetzen
Temp = Bildspeicher(spalte)
If Temp.1 = 1 Then Set Portd.2 Else Reset Portd.2
If Temp.2 = 1 Then Set Portd.1 Else Reset Portd.1
If Temp.3 = 1 Then Set Portd.0 Else Reset Portd.0
If Temp.4 = 1 Then Set Portc.7 Else Reset Portc.7
If Temp.5 = 1 Then Set Portc.6 Else Reset Portc.6
If Temp.6 = 1 Then Set Portc.5 Else Reset Portc.5
If Temp.7 = 1 Then Set Portc.4 Else Reset Portc.4
If Temp.8 = 1 Then Set Portc.3 Else Reset Portc.3
If Temp.9 = 1 Then Set Portc.2 Else Reset Portc.2
If Temp.10 = 1 Then Set Portc.1 Else Reset Portc.1
If Temp.11 = 1 Then Set Portc.0 Else Reset Portc.0
End Sub

Ich habe es zig mal überprüft, alle Zeilen und Spalten belegungen stimmen

radbruch
24.10.2011, 23:02
Hallo

Obwohl die Arrays mit dem Index 1 starten, ein Byte besteht auch bei Bascom aus Bit0 bis Bit7:


Temp = Bildspeicher(spalte)
If Temp.1 = 1 Then Set Portd.2 Else Reset Portd.2


Ich bin leider auch ziemlich ratlos. Scheinbar ist nur der Port C betroffen. Das einzige was mir dazu einfällt: JTAG ist nicht ausgeschaltet. Das würde allerdings nur PC2-5 betreffen. Wird an den "fehlerhaften" Pins etwas ausgegeben?

http://www.google.de/search?q=JTAG+ist+nicht+ausgeschaltet

Version 2:

$regfile = "m16def.dat"
$crystal = 16000000
$hwstack = 40
$swstack = 16
$framesize = 32

Config Porta = &B11100000 ' PA7-PA5 sind Ausgang (Spalten 7-9)
Config Portb = &B00111111 ' PB5-PB0 (Spalten 1-6)
Config Portc = &B11111111 ' PC7-PC0 (Zeilen 0-7)
Config Portd = &B00000111 ' PA2-PA0 (Zeilen 8-10)

Declare Sub Set_pixel(byval X As Byte , Byval Y As Byte) ' Nullpunkt ist oben links als 0,0?
Declare Sub Reset_pixel(byval X As Byte , Byval Y As Byte) ' x von 0 bis 8, y von 0 bis 10

Dim Bildspeicher(11) As Word , Spalte As Byte , Temp As Word , Zaehler As Word
Dim X As Byte , Y As Byte

Zaehler = 0
Spalte = 1 ' Spalte ist Index im Array und startet deshalb mit 1!

Do
' Anfang der späteren ISR

' alle Spalten aus
Portb = Pinb And &B11000000 ' PB5-PB0 ausschalten
Porta = Pina And &B00011111 ' PA7-PA5 ausschalten

' Zeilenpins der aktuellen Spalte setzen
' Zeile 0 bis 7 ist PC0 bis 7, Zeile 8 bis 10 ist PD0 bis 2
Temp = Bildspeicher(spalte)
Portc = Temp And 255 ' Bits 0 bis 7 an PortC.0 bis .7 ausgeben
Temp = Temp / 256 ' Bits 8-10 werden Bits 2-0
Portd = Temp And 7 ' Bits 7-3 ausblenden und Bits 2-0 an Port D ausgeben

' aktuelle Spalte einschalten
Select Case Spalte
Case 1 : Set Portb.4
Case 2 : Set Portb.3
Case 3 : Set Portb.2
Case 4 : Set Portb.1
Case 5 : Set Portb.0
Case 6 : Set Porta.7
Case 7 : Set Porta.6
Case 8 : Set Porta.5
Case 9 : Set Portb.5
End Select

If Spalte < 9 Then Spalte = Spalte + 1 Else Spalte = 1

' Ende der späteren ISR


Waitus 100

Select Case Zaehler
Case 1000 : For X = 0 To 8 ' diagonale
Set_pixel X , X
Next X

Case 2000 : For X = 0 To 10 ' waagrecht
Set_pixel X , 0
Set_pixel X , 8
Next X

Case 3000 : For Y = 0 To 8 ' senkrecht
Set_pixel 0 , Y
Set_pixel 10 , Y
Next X

Case 4000 : For X = 1 To 11 ' alle an
Bildspeicher(x) = &B11111111111
Next X

Case 5000 : For X = 1 To 9 ' Bitmuster
Bildspeicher(x) = &B11111111100
Next X

Case 6000 : For X = 1 To 9 ' alle aus
Bildspeicher(x) = 0
Next X

Zaehler = 0

End Select

Zaehler = Zaehler + 1
Loop

End

Sub Set_pixel(byval X As Byte , Byval Y As Byte)
Bildspeicher(x + 1).y = 1 ' Bascom startet Arrays mit 1
End Sub

Sub Reset_pixel(byval X As Byte , Byval Y As Byte)
Bildspeicher(x + 1).y = 0
End Sub

'(
' Wird nicht verwendet und soll nur die Zeilenbelegung zeigen.
Durch die aufsteigenden Bits kann man die Bytes schneller ausgeben.

Sub Zeilensetzen
Temp = Bildspeicher(spalte)
If Temp.0 = 1 Then Set Portc.0 Else Reset Portc.0
If Temp.1 = 1 Then Set Portc.1 Else Reset Portc.1
If Temp.2 = 1 Then Set Portc.2 Else Reset Portc.2
If Temp.3 = 1 Then Set Portc.3 Else Reset Portc.3
If Temp.4 = 1 Then Set Portc.4 Else Reset Portc.4
If Temp.5 = 1 Then Set Portc.5 Else Reset Portc.5
If Temp.6 = 1 Then Set Portc.6 Else Reset Portc.6
If Temp.7 = 1 Then Set Portc.7 Else Reset Portc.7

If Temp.8 = 1 Then Set Portd.0 Else Reset Portd.0
If Temp.9 = 1 Then Set Portd.1 Else Reset Portd.1
If Temp.10 = 1 Then Set Portd.2 Else Reset Portd.2
End Sub
')(ungetestet)

nxtman95
25.10.2011, 17:35
Ich hab mit nem Code JTAG deaktiviert, jetzt gehts!
Du bist ein GENIE! :Strahl

Ganz ganz großen Dank an dich

gruß nxtman

Edit: Das Bild ist aber insgesamt um 1 nach oben verschoben, weißt du warum?

radbruch
25.10.2011, 18:57
Hallo

Prima, Glückwunsch. Danke für die Blumen. :)


Das Bild ist aber insgesamt um 1 nach oben verschobenBei welcher Programmversion? In der ersten Version würde das genau passen:

If Temp.1 = 1

Die Pixel der ersten Reihe werden in Bildspeicher(x).0 gespeichert, weil die Zählung der Bits eines Bytes bei 0 beginnt. Wenn du bei .1 startest wird die oberste Zeile "verschluckt". (des hab ich aber weiter oben schon mal angedeutet...)

Gruß

mic

nxtman95
25.10.2011, 19:45
Hatte (bzw. habe noch) die erste, habe jetzt anstatt Temp.1 = 1 Temp.2 = 1 gemacht funktioniert jetzt alles suuuper!
Jetzt gehts an die Texte und Animationen ;)

nxtman95
02.11.2011, 18:37
Ich lasse das mit der 9x11 Matrix erstmal in Raum stehen und baue mir erstmal eine 8x8 Matrix, die Programmierung der 9x11 Matrix is mir nämlich fürs erste zu umständlich und kompliziert...

radbruch
02.11.2011, 20:37
Ich lasse das mit der 9x11 Matrix erstmal in Raum stehen...Tja, schade eigentlich. Von einer "effizienten" Ansteuerung waren wir möglicherweise gar nicht so weit entfernt.

nxtman95
03.11.2011, 15:04
Ja ich weis, ich bin gerade am überlegen, ob ich nicht nur die Platine von der LED-Matrix neu mache, weil die nicht so gut aussieht. Ich habe zur Zeit auch kaum zeit, weil ich noch ne Englisch-Präsentation machen muss. Und was noch dazu kommt ist meine Hausarbeit Und meine Präsentationsprüfung. Das is ne heiden Arbeit.

Ich bin mir (noch) nicht sicher, ich denke aber, ich werde nur die Platine neu machen und ein ordentliches Flachbandkabel dran machen.

Gruß nxtman95

nxtman95
01.04.2012, 03:33
Hab jetzt nach langer Zeit die Arbeit an der Matrix wieder aufgenommen. Jetzt sind ja Ferien, da kann ich etwas machen.