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