Moin moin, ZUERST ERWÄHNT: ICH BIN NEWBIE!!
Ich bin im Moment am rumprobieren und habe mir aus 9LEDs eine kleine
Matrix gebaut.
a b c
3 X X X
2 X X X
1 X X X
und habe sie wie folgt an meinen Atmega8 angeschlossen.
a = PC1
b = PC2
c = PC3
1 = PB1
2 = PB2
3 = PB3
Um zu schauen ob es funktionier habe ich ein Programm geschrieben,
welches jede LED von a1 bis c3 einmal anschaltet und wieder ausschaltet.
Das hat auch alles Prima geklappt.
jetzt möchte ich aber ein Schritt weiter gehen und beispielsweise
c3 und b2 gleichzeitig schalten, ohne dass c2 und b3 leuchten.
Durch googeln habe ich herausgefunden, dass es machbar ist, indem ich
die LEDs so schnell an und ausschalte, dass es fürs menschliche Auge nur
als AN zu erkennen ist.
Ich verstehe das also so:
1.Takt: c3=AN, b2=AUS;
2.Takt: c3=AUS, b2=AN;
3.Takt: c3=AN, b2=AUS;
4.Takt: c3=AUS, b2=AN;
5.Takt: c3=AN, b2=AUS;
6.Takt: c3=AUS, b2=AN;
7.Takt: c3=AN, b2=AUS;
8.Takt: c3=AUS, b2=AN;
...
mein Code dazu sieht wie folgt aus:
1 | #include <avr/io.h>
|
2 |
|
3 | void initialisieren()
|
4 | {
|
5 | DDRB = 0xff;
|
6 | DDRC = 0xff;
|
7 | }
|
8 |
|
9 | void LEDOFF()
|
10 | {
|
11 | PORTB = 0x00;
|
12 | PORTC = 0xff;
|
13 | }
|
14 |
|
15 | int LED(unsigned char state)
|
16 | {
|
17 | switch(state)
|
18 | {
|
19 | case 1:
|
20 | PORTB = (1<<PB3);
|
21 | PORTC = (1<<PC1) | (1<<PC2);
|
22 | break;
|
23 | case 2:
|
24 | PORTB = (1<<PB2);
|
25 | PORTC = (1<<PC1) | (1<<PC2);
|
26 | break;
|
27 | case 3:
|
28 | PORTB = (1<<PB1);
|
29 | PORTC = (1<<PC1) | (1<<PC2);
|
30 | break;
|
31 | case 4:
|
32 | PORTB = (1<<PB3);
|
33 | PORTC = (1<<PC1) | (1<<PC3);
|
34 | break;
|
35 | case 5:
|
36 | PORTB = (1<<PB2);
|
37 | PORTC = (1<<PC1) | (1<<PC3);
|
38 | break;
|
39 | case 6:
|
40 | PORTB = (1<<PB1);
|
41 | PORTC = (1<<PC1) | (1<<PC3);
|
42 | break;
|
43 | case 7:
|
44 | PORTB = (1<<PB3);
|
45 | PORTC = (1<<PC2) | (1<<PC3);
|
46 | break;
|
47 | case 8:
|
48 | PORTB = (1<<PB2);
|
49 | PORTC = (1<<PC2) | (1<<PC3);
|
50 | break;
|
51 | case 9:
|
52 | PORTB = (1<<PB1);
|
53 | PORTC = (1<<PC2) | (1<<PC3);
|
54 | break;
|
55 | default:
|
56 | break;
|
57 | }
|
58 |
|
59 | return(1);
|
60 | }
|
61 |
|
62 | void main()
|
63 | {
|
64 |
|
65 | initialisieren();
|
66 |
|
67 | LEDOFF();
|
68 |
|
69 | while(1)
|
70 | {
|
71 | LED(1);
|
72 | LED(5);
|
73 | }
|
74 |
|
75 | }
|
Mein Problem ist nun, dass c3 und b2 zwar leuchten, c2 und b3 leuchten
aber auch leicht. Desshalb nun meine Frage: Wie setze ich es in der
Software um, dass nur c3 und b2 leuchten und nicht c2 und b3???