Hallo,
habe ein kleines Problem mit einer 8x8 Matrix an einem ATMEGA8515 at
16MHz.
Ich habe 64 8 Bit Werte im RAM, die ich mit:
ldi R29,0 ;Y HIGH
ldi R28,DMX_FIELD ;Y LOW
ld R16, Y ;Y REG (RAM) IN R16 LADEN
aus dem RAM Lade. Je nachdem welchen Wert muss man halt DMX_FIELD+x
machen.
Die LED Kathoden hängen über 8 FETs an Port A, die Anoden über
Widerstände an Port B.
Jetzt gehts eigentlich nur darum, ganz Simpel im Hauptprogramm (kein
Timer!) die 64 Werte aus dem Ram zu laden und per PWM an die 8x8 Matrix
auszugeben. Igendwie funzt das aber nicht so recht.
1 | /*
|
2 | LINE:
|
3 | //+OPERATIONEN LINE--------------------------------------------------------------------
|
4 | inc PWMCOUNT ;TIMERVARIABLE FÜR PWM
|
5 | //MULTIPLEX LINE
|
6 | LSL PWM_MPX ;Multiplexline eins nach links
|
7 | OUT PORTA,PWM_MPX ;porta ausgaben
|
8 | CLR PWM_OUT
|
9 | COLUMN:
|
10 | //+OPERATIONEN COLUMN--------------------------------------------------------------
|
11 | //RAM ADRESSE GRUNDWERT
|
12 | ldi R29,0 ;Y HIGH
|
13 | ldi R28,DMX_FIELD ;Y LOW
|
14 | //RAM ADRESSE LINE
|
15 | //LDI R16,8
|
16 | //MUL R16,PWM_LINE ;Multiplikation
|
17 | //ADD R28,R0 ;Ergebnis zu DMX Low
|
18 | //RAM ADRESSE COLUMN
|
19 | //ADD R28,PWM_COLUMN
|
20 | //RAM LADEN
|
21 | ld R16, Y ;Y REG (RAM) IN R16 LADEN,
|
22 | //AUSGABE
|
23 | CP R16,PWMCOUNT
|
24 | BRLO PWM_FIN
|
25 | OR PWM_OUT,PWM_MPX2
|
26 | PWM_FIN:
|
27 | LSL PWM_MPX2
|
28 | //-OPERATIONEN COLUMN--------------------------------------------------------------
|
29 | INC PWM_COLUMN ;Column um 1 erhöhen
|
30 | CPI PWM_COLUMN,7
|
31 | BRLO COLUMN
|
32 | LDI PWM_COLUMN,0x00 ;Column wieder auf 0 stellen (im nächsten Lauf +1)
|
33 | OUT PORTB,PWM_OUT
|
34 | //-OPERATIONEN LINE--------------------------------------------------------------------
|
35 | INC PWM_LINE ;Line um 1 erhöhen
|
36 | CPI PWM_LINE,7 ;Wenn Line unter 8 [1 ... 8] wiederholen, wenn 8 auf 0 stellen
|
37 | BRLO LINE
|
38 | LDI PWM_LINE,0x00 ;Line wieder auf 0 stellen (im nächsten Lauf +1)
|
39 |
|
40 | rjmp main*/
|
Hat jemand vielleicht ein paar Codeschnipsel oder sogar einen kompletten
Ansteuercode, um das Problem zu lösen?