Hallo zusammen,
ich habe folgenden code, der zwar auf einem ATmega8 problemlos läuft,
auf einem Mega16 aber nicht.
1 | #include <avr/io.h>
|
2 | #include <stdint.h>
|
3 | #include <stdlib.h>
|
4 | #include <avr/interrupt.h>
|
5 | #include <util/delay.h>
|
6 |
|
7 |
|
8 | void io_init(void)
|
9 | {
|
10 | DDRD |= (1<<PD5); // ausgang
|
11 |
|
12 | PORTD |= (1<<PD5); // Pullup
|
13 | }
|
14 |
|
15 |
|
16 | int main(void)
|
17 | {
|
18 | io_init();
|
19 | sei();
|
20 |
|
21 |
|
22 | TCCR1B |= (1<<CS10) | (1<<CS12) | (1<<WGM12); // Timer1 = Timer , Prescaler = 1024 , clear timer on compare match
|
23 | TIMSK |= (1<<OCIE1A); // interrupt bei compare match
|
24 |
|
25 | OCR1A = 40000;
|
26 |
|
27 | while(1)
|
28 | {
|
29 |
|
30 | }
|
31 | }
|
32 |
|
33 |
|
34 | ISR(TIMER1_COMPA_vect)
|
35 | {
|
36 | PORTD ^= (1<<PD5);
|
37 | }
|
Der compare match ist bei ca. 5,1 sec erreicht und da sollte PD5
getoggelt werden (wird er auf nem Mega8 auch).
Kann mir jemand sagen woran das liegen kann? Die Register müssten ja bei
beiden uCs gleich sein.
mfg Markus