Hallo Matthias,
die Matrix hat [0..14] Spalten. Ich habe das Programm für
Spaltenaktivierung schon geschrieben und es sieht bei mir so aus:
1 | ISR(TIMER2_COMP_vect) //Interrupt ausgelöst
|
2 | {
|
3 | Interrupt_Zaehler++;
|
4 |
|
5 | if (Interrupt_Zaehler < 15)
|
6 | {
|
7 | //---> HIER SOLL aktuelle Array-Bit-Belegung auf Zeilenports übertragen werden, aber WIE?
|
8 | //
|
9 | PORTB=Spalte_RAM [Spalten_Nr][0]; //Spalte
|
10 | PORTC=Spalte_RAM [Spalten_Nr][1]; //aktivieren
|
11 | Spalten_Nr++;
|
12 | }
|
13 |
|
14 | else if (Interrupt_Zaehler == 15) //letzte Spalte
|
15 | {
|
16 | // HIER SOLL aktuelle Array-Bit-Belegung auf Zeilenports übertragen werden, aber WIE?
|
17 | //
|
18 | PORTB=Spalte_RAM [Spalten_Nr][0]; //Spalte
|
19 | PORTC=Spalte_RAM [Spalten_Nr][1]; //aktivieren
|
20 | Spalten_Nr = 0;
|
21 | Interrupt_Zaehler = 0;
|
22 | }
|
23 | }
|
ich habe um Funktionalität zu prüfen alle Zeilenports in main()
aktiviert, und auf der LED-Matrix laufen also volle Spalten. Das macht
den Effekt,dass alle LEDS an sind, Spalten leuchten aber alle
nacheinander mit ca. 130 Hz
http://rapidshare.com/files/30595793/video.rar
Aber es sollen eben nicht alle Zeilenbits aktiviert werden, sondern nur
die, die benötigt werden um ein Zeichen darzustellen.
Diese Bits sind im Array [128][6] definiert (128 Zeichen, 6 Spalten pro
Zeichen) Ein Element in [20][3] liefert z.B. 0b00001111 Das bedeutet
dass nur die oberen 4 zeilen aktiviert werden müssen. Wie teile ich
diese Bits den Ports mit ??
Ich muss für Zeile 0 in dem PORTD PD5 auf 0 setzten
für Zeile 1 PORTD PD6 auf 0 setzten
... für Zeile 7 PORTC PC4 auf 0 setzten ... usw.
Wenn ich weiß, wie sich das realisieren lässt, dann kann ich das
Programm zu Ende machen (hoffe ich)