Problem mit dem OCR1B beim ATtiny2313

OP #3235177
Lesenswert?

Hallo,

ich programmiere gerade eine state machine um eine LED zu dimmen bzw. 
Ein / Aus schalten.

Wenn ich im off state hoch dimme, blitzt die LED am OC1B Ausgang kurz 
auf.

Sobalt die Zeile
1
TCCR1A = 0xA2;            // OC1A und OC1B auf ON

im unteren Codeteil ausgeführt wurde geht mein OC1B Ausgang auf High!

Hat jemand einen Tip?

1
if (button_down)
2
  {
3
    if (button_pressed_timer < LONGPRESS_TIMEOUT)
4
      button_pressed_timer++;
5
    else
6
    {
7
      if (state != running)
8
      {
9
        if (state == off)
10
        {
11
          z=1;
12
          p_actual_16 = &black;        // Dim value = 0x0000
13
          dimm_value = 0;
14
          OCR1B = dimm_value;
15
          OCR1A = dimm_value;
16
          TCCR1A = 0xA2;            // OC1A und OC1B auf ON
17
          TCCR1B |= (1 << CS10);            // start timer
18

19
          direction = up;
20
        }
21
        else if (dimm_value == 0xFFFF)
22
          direction = down;
23
        else if (dimm_value <= 0x0100)
24
          direction = up;
25
      }
26
      state = running;
27
    }
28
  }
Gast #3235242
Lesenswert?

H. G. schrieb:
>           dimm_value = 0;
>           OCR1B = dimm_value;
>           OCR1A = dimm_value;
>           TCCR1A = 0xA2;            // OC1A und OC1B auf ON
>           TCCR1B |= (1 << CS10);            // start timer

Im Phase Correct bedeuten deine Bits in A2 für OC1A und OC1B clear on 
match when upcounting und set on downcounting, ergo bei der dimm_value 
von 0 sind sie set, also high?
#3235251
Lesenswert?

Karl Heinz Buchegger schrieb:
> Was genau machst du eigentlich, wenn du den Timer in den off state
> schickst? Schaltest du dann den Timer-Modus auf Normal, drehst du den
> Vorteiler ab oder was machst du sonst noch um die PWM komplett zu
> stoppen?


Worauf ich hinaus will:
Gibt es eine Möglichkeit, dass der TCNT1, also der Timer-Zählwert sich 
ausserhalb des für die PWM zulässigen Zählbereiches befindet?
Denn wenn er das tut, dann muss der Zähler erst mal bis zum Overflow 
weiterzählen, ehe dann der reguläre PWM Betrieb wieder einsetzt. 
Leuchtet in dieser Zeit deine LED, dann siehst du das natürlich.
Es kann daher nicht wirklich schaden, wenn du bei der Freigabe der PWM 
das TCNT1 Register sicherheitshalber erst mal auf 0 setzt und so für 
geordnete Zähleverhältnisse sorgst.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren