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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.