Hallo zusammen,
irgendwie habe ich gerade ein Problem mit meinem Controller Takt.
Die Fuses habe ich wie im Anhang gezeigt eingestellt.
Nun habe ich um den Takt zu testen dieses Programm hier geschrieben:
1 | /* Bit setzen */
|
2 | #define sbit(var, bit) ((var) |= (1 << (bit)))
|
3 |
|
4 | /* Bit löschen */
|
5 | #define cbit(var, bit) ((var) &= (unsigned)~(1 << (bit)))
|
6 |
|
7 | /* Byte definieren*/
|
8 | #define byte uint8_t
|
9 |
|
10 | /* Bit togglen */
|
11 | #define tbit(var,bit) ((var) ^= (1 << (bit)))
|
12 |
|
13 | #include <avr/io.h>
|
14 | #include <avr/interrupt.h>
|
15 |
|
16 | int main(void)
|
17 | {
|
18 | sbit (DDRB,PB2);
|
19 | init_pwm();
|
20 | while(1)
|
21 | {
|
22 | }
|
23 | }
|
24 |
|
25 |
|
26 | void init_pwm (void)
|
27 | {
|
28 | cli(); // Interrupts kurz deaktivieren
|
29 |
|
30 | TCCR1B = 4; // Interrupt = Takt/256
|
31 | TIMSK1 |= (1<<TOIE1); // Interrupt freischalten
|
32 | sei(); // Interrupts global einschalten
|
33 | }
|
34 |
|
35 | //Timer 1 Interrupt
|
36 | ISR(TIMER1_OVF_vect) {
|
37 | tbit (PORTB,PB2);
|
38 | }
|
An PORTB, PB2 ist eine LED angeschlossen. Da mein Controller an einem
20MHz Quarz betrieben wird sollte die LED doch nun mit der Frequenz
20.000.000/256/256 = 305 blinken. Tut sie aber nicht, real dauert das
umschalten zwischen an und aus ca. 1,5sec was nicht mal 1Hz entspricht.
Was habe ich falsch gemacht?