Guten Tag,
ich hänge bei einem alten, wieder hervorgebrachten Projekt. Mein
Thermometer mit 10 RGB LEDs, von 10-30°C, je 2°C eine LED. Je kälter
desto mehr blau, je wärmer, desto mehr rot sollen die LEDs leuchten.
Ich habe daher eine Matrix, welche die Ansteuerung der Einzelfarben
erlaubt.
Nun hänge ich aber an folgendem Problem. Wenn ich den Code wie im Anhang
mal testweise geschrieben auf den µC brenne:
1 | int main() {
|
2 | while(1) {
|
3 |
|
4 | LightUpLed(0x01, 0x01, 30);
|
5 | LightUpLed(0x01, 0x02, 30);
|
6 | LightUpLed(0x01, 0x04, 30);
|
7 | LightUpLed(0x02, 0x01, 30);
|
8 | LightUpLed(0x02, 0x02, 30);
|
9 | LightUpLed(0x02, 0x04, 30);
|
10 | LightUpLed(0x04, 0x01, 30);
|
11 | LightUpLed(0x04, 0x02, 30);
|
12 | LightUpLed(0x04, 0x04, 30);
|
13 |
|
14 | };
|
15 | };
|
16 |
|
17 | void LightUpLed(uint8_t uRow, uint8_t uCol, int Brightness)
|
18 | {
|
19 | int diff = (100 - Brightness) * 10;
|
20 |
|
21 | PORTC = ~uRow;
|
22 | PORTD = uCol;
|
23 |
|
24 | for (int i = 0; i < Brightness; i++) {
|
25 | _delay_us(1);
|
26 | };
|
27 |
|
28 | PORTC = ~0x00;
|
29 | PORTD = 0x00;
|
30 |
|
31 | for (int i = 0; i < diff; i++)
|
32 | {
|
33 | _delay_us(1);
|
34 | };
|
35 | }
|
Dann hab ich auf den LEDs ein unwahrscheinliches Flackern drauf. Bei
1MHz internem Oszillator ist das wohl viel zu langsam. Allerdings möchte
ich den Takt niedrig halten, da das Teil hinterher an einem 9V Block
läuft, und mir 10mA Stromaufnahme eigentlich eh schon viel zu viel sind.
Habt ihr irgendwelche Ideen?