Hallo Forum,
ich rätsle gerade an einem kleinen, eigentlich total billigen Stück
Code. Es geht darum, eine LED (später mit Leistung) sehr langsam faden
zu lassen. Dabei wird es 3 Möglichkeiten geben (Auswahl über Schalter
EIN-AUS-EIN):
1) je nach Befehl über I2C sehr langsam (1h) an oder aus
2) deutlich schneller (ca. 13s) ein
3) deutlich schneller (ca. 13s) aus
Variante 1 (beide Richtungen) und 2 funktionieren sehr gut, Variante 3
dagegen nicht. In diesem Fall geht die LED einfach aus. Die beiden
verantwortlichen Eingänge sind nicht entprellt, das schließe ich als
Ursache aber aus, weil Variante 1 und 2 problemlos funktionieren.
Dies ist mein an der Stelle genutzter Code, wenn der Ausschnitt nicht
reicht, gibt es mehr.
1 | switch(PINB & 0x18){
|
2 | case 0x08: //AUTO
|
3 | if(millis - lastchange >= delayms){
|
4 | lastchange = millis;
|
5 | if(config == 1){
|
6 | if(OCR1A < 255)
|
7 | ++OCR1A;
|
8 | else
|
9 | config = 0;
|
10 | }//end if
|
11 | if(config == 2){
|
12 | if(OCR1A > 0)
|
13 | --OCR1A;
|
14 | else
|
15 | config = 0;
|
16 | }//end if
|
17 | }//end if
|
18 | break;
|
19 | case 0x10: //EIN
|
20 | if(millis - lastchange >= 50){
|
21 | lastchange = millis;
|
22 | if(OCR1A < 255)
|
23 | ++OCR1A;
|
24 | }//end if
|
25 | break;
|
26 | case 0x18: //AUS
|
27 | if(millis - lastchange >= 50){
|
28 | if(OCR1A > 0)
|
29 | --OCR1A;
|
30 | }//end if
|
31 | break;
|
32 | }//end switch
|
Das ganze läuft auf einem ATtiny25.
Ich vermute, dass die Lösung trivial ist, aber nach 2 Tagen gegrüble
sehr ich sie einfach nicht.
Vielen Dank im Voraus!