Forum: Mikrocontroller und Digitale Elektronik LED-Fading Fehler


von Michael K. (tkd)


Lesenswert?

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!

von Teo D. (teoderix)


Lesenswert?

Michael K. schrieb:
> case 0x18:  //AUS
>     if(millis - lastchange >= 50){
lastchange = millis;
>       if(OCR1A > 0)
>         --OCR1A;
>     }//end if
>     break;

von Michael K. (tkd)


Lesenswert?

Nach dem x-ten Mal lesen habe ich die Antwort verstanden.
Trivial, wie ich ja schon vermutet habe.
Vielen Dank!!!

von Martin (Gast)


Lesenswert?

Warum verwenden so wenig Leute einen Debuger oder machen einfach ein 
paar Debugausgaben im Terminal?

von Teo D. (teoderix)


Lesenswert?

Martin schrieb:
> Warum verwenden so wenig Leute einen Debuger oder machen einfach ein
> paar Debugausgaben im Terminal?

Weil Sie meist noch Anfänger sind und noch wie ein Blinder durch den 
Wald stapfen.

Michael K. schrieb:
> Nach dem x-ten Mal lesen habe ich die Antwort verstanden.
> Trivial, wie ich ja schon vermutet habe.
> Vielen Dank!!!

Ja Sorry, bin "manchmal" schreibfaul.
Wenn man sowas nich sieht, heißt das meist nur "Junge mach mal Pause!". 
:)

von Michael K. (tkd)


Lesenswert?

Martin schrieb:
> einfach ein paar Debugausgaben im Terminal?
welches Termin, bei einem stumpfen ATtiny?

Martin schrieb:
> Warum verwenden so wenig Leute einen Debuger
Teo D. schrieb:
> Weil Sie meist noch Anfänger sind
Ich würde mich nicht mehr als Anfänger bezeichnen, aber ich komme eher 
von der Hardware-Seite, meine Programm waren bis jetzt eher 
übersichtlich und wie der Debugger im Atmel Studio funktioniert habe ich 
noch nicht herausgefunden (und auch noch nicht ernsthaft versucht)

von Joachim B. (jar)


Lesenswert?

der größere LED-Fading Fehler ist LED-Fading nicht zu beachten
https://www.mikrocontroller.net/articles/LED-Fading

von Michael K. (tkd)


Lesenswert?

Dass die Helligkeit bei meiner linearen Zählweise nicht linear steigt, 
ist mir vollkommen bewusst. Ist an dieser Stelle aber nicht schlimm. Es 
geht nicht um die menschliche Wahrnehmung

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.