Ich grübel jetzt schon ne ganze weile an diesem problem.
Setup ist ein Mega 8
- An PB 3 - 1 hängen 3 Kabel die zu ner KSQ für Leds führen bei high
leuchten die Leds
-PB3 ist Rot PB2 Grün u. PB1 ist Blau
Nun funktioniert Blau immer wunderbar aber falls ich grün oder rot
einzeln schalten will habe ich immer gelb(grün+rot) und an den Augängen
PB3 Und 2 ein logisches high von 5V.
Mehrere Ausgänge geben dann auch nur noch gelb oder weiß, da die anderen
Kombinationen an dem gelb scheitern.
Schalten tu ich rot in C per:
1 | DDRB |= (1<<PB3);
|
2 | PORTB |= (1<<PB3);
|
Alternativ hatte ich es hexadecimal mit 0x08;
In der main wird auch wirklich nur das aufgerufen.
Da dies ganz am Anfang von main steht und alles andere auskommentiert
ist
können ja eigentlich keine Ports vorher gesetzt sein.
Zudem habe ich schon versucht alle auf 0 zu setzen bevor ich R
geschaltet habe.
Hier die ganze Funktion dazu.
1 | void set_primary_color (unsigned char color)
|
2 | {
|
3 | switch(color)
|
4 | {
|
5 | case 1:
|
6 | DDRB |= (1<<PB3);
|
7 | PORTB |= (1<<PB3);
|
8 | //PORTB = 0x08; //red
|
9 | break;
|
10 | case 2:
|
11 | DDRB = 0x04;
|
12 | PORTB = 0x04; //green
|
13 | break;
|
14 | case 3:
|
15 | DDRB = 0x02;
|
16 | PORTB = 0x02; //blue
|
17 | break;
|
18 | case 4:
|
19 | DDRB = 0x0E;
|
20 | PORTB = 0x0E; //all (white)
|
21 | break;
|
22 | case 5:
|
23 | DDRB = 0x0C;
|
24 | PORTB = 0x0C; //red+green (yellow)
|
25 | break;
|
26 | case 6:
|
27 | DDRB = 0x0A;
|
28 | PORTB = 0x0A; //red+blue (purple)
|
29 | break;
|
30 | case 7:
|
31 | DDRB = 0x06;
|
32 | PORTB = 0x06; //green+blue (turquoise)
|
33 | break;
|
34 | }
|
35 | }
|
Bitte schreibt mir auch wenn es nur etwas triviales ist, ich habe mit C
und den Portregistern erst angefangen, und komme von Java und PHP habe
also von den Registern keinen Plan.
MFG Babbs