Forum: Mikrocontroller und Digitale Elektronik ATtiny24 Timer/Counter 1 Fast PWM 8-Bit Mode


von Simon (Gast)


Lesenswert?

Hallo,
folgendes Programm erzeugt bei mir, nach meinem Verständnis, eine 
falsche Frequenz. Weiß jemand was ich falsch gemacht habe?
1
#define BV(bit) (1 << (bit))
2
int __attribute__((OS_main)) main(void)
3
{
4
  DDRB = BV(PB0);
5
  TCCR1A = BV(WGM12) | BV(WGM10);  // 0101 Fast PWM, 8-bit
6
  TCCR1B = BV(CS11) | BV(CS10);  // 64
7
  
8
  while (1)
9
  {
10
    if (TIFR1 & BV(TOV1))
11
    {
12
      PORTB ^= BV(PB0);
13
      TIFR1 = BV(TOV1);
14
    }
15
  }
16
  return 1;
17
}
Der Controller arbeitet mit dem Internen Takt von 8MHz.
Deshalb erwarte ich ca. alle 2ms eine Flanke. (256 * 64 / 8.000.000)s
Dennoch sehe ich am Oszilloskop die Flanken nur alle 4ms.
Die Fuse-Bits sind wie folgt programmiert:
1
SELFPRGEN = [ ]
2
RSTDISBL = [ ]
3
DWEN = [ ]
4
SPIEN = [X]
5
WDTON = [ ]
6
EESAVE = [ ]
7
BODLEVEL = DISABLED
8
CKDIV8 = [ ]
9
CKOUT = [ ]
10
SUT_CKSEL = INTRCOSC_8MHZ_6CK_14CK_64MS_DEFAULT
11
12
EXTENDED = 0xFF (valid)
13
HIGH = 0xDF (valid)
14
LOW = 0xE2 (valid)

Herzlichen Dank,
Simon

von Schnorch (Gast)


Lesenswert?

WGM12 ist nicht im TCCR1A Register

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Simon schrieb:
> TCCR1A = BV(WGM12) | BV(WGM10);  // 0101 Fast PWM, 8-bit

WGM12 befindet sich nicht im TCCR1A Register, sondern in TCCR1B.
Deswegen aktivierst du den Phase Correct Mode 1, deswegen nur die halbe 
Frequenz.
Ausserdem brennst du ein Loch in TCCR1A, denn die Stelle ist Read-Only 
:-)

: Bearbeitet durch User
von Simon G. (sigro)


Lesenswert?

Schnorch schrieb:
> WGM12 ist nicht im TCCR1A Register

Matthias S. schrieb:
> WGM12 befindet sich nicht im TCCR1A Register, sondern in TCCR1B.
> Deswegen aktivierst du den Phase Correct Mode 1, deswegen nur die halbe
> Frequenz.
> Ausserdem brennst du ein Loch in TCCR1A, denn die Stelle ist Read-Only
> :-)

Vielen Dank!
Man sollte doch das Datenblatt lesen. :-D
Simon

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.