Hallo,
ich bin immer noch an meiner RGBW-Lampe. Sie nimmt langsam gestalt an
:). Aber ein Problem gibt es. Und zwar läuft die PWM aus dem Artikel
hier ohne Probleme. Aber nur solange ich in der ISR, die mit der PWM
nichts zu tun hat wie folgt stehen habe:
1 | volatile uint16_t fader_max[FADER_CHANNELS];
|
2 | volatile uint8_t fader_state;
|
3 | volatile uint8_t fader_ovf; /* wenn mehr als 8 Kanäle benötigt werden vergrößern */
|
4 |
|
5 | ISR(TIMER0_COMP_vect)
|
6 | { /* Überprüfen der Fader - Zähler, wenn Zeit erreicht entsprechendes Flag für Kanal in fader_ch_ovf setzen*/
|
7 | uint8_t i, tmp;
|
8 | uint8_t m1 = 1;
|
9 | tmp = fader_ovf;
|
10 | for(i = 0; i < FADER_CHANNELS; i++){
|
11 | fader_cnt[i]++;
|
12 | if(fader_cnt[i] >= fader_max[i]){
|
13 | fader_cnt[i] = 0;
|
14 | //tmp |= m1; /* Wenn mehr als 8 Kanäle benötigt werden fader_ch_ovf vergrößern */
|
15 | m1 <<= 1;
|
16 | }
|
17 | }
|
18 | fader_ovf = tmp;
|
19 | }
|
Wenn ich die folgende Zeile einkommentiere:
Dann bringt das meine PWM durcheinander (Soft-PWM intelligente Lösung
hier aus den Artikeln) obowhl dort definitiv nicht auf die Variable
fader_ovf zugegriffen wird. Auf die Variable wird auch nirgends sonst im
Programm zugegriffen, nur am Anfanf bei der Initialisierung auf 0
gesetzt.
Habe ich hier irgend einen fatalen Fehler in der ISR gemacht, oder woran
kann das liegen.
Ja ich weiß, ohne ganzen Code wirds schwierig, aber das sind gleich
einige Dateien. Das wollte ich euch erstmal ersparen, vllt. ist ja der
Fehler so schon offensochtlich, nur ich sehe es nicht.
Oder liegt es daran, das die Variable sonst nirgends verwendet wird?
(Ich hatte jetzt den Fader, der sie verwendet ausgeschaltet)
Lg
Edit:
habe gerade nochmal die Zeilen eingebunden, das die Variable auch
außerhalb von der ISR genutzt wird. Trotzdem genau der gleiche Effekt.