Hallo Versuche auf dem Atmega164P einen Timerinterrupt auszulösen. Auf dem Atmega 16 funktioniert der Code habe die Registernamen schon geändert. An Fuse Bits sind BOOTSZ0 und BOOTSZ1nicht gesetzt sonst alle also im PONY Prog nur die beiden angehackt. kann mir da jemand weiter helfen? Code hier:
1 | #include <avr/io.h> |
2 | #include <avr/interrupt.h> |
3 | #include <stdint.h> |
4 | |
5 | #define F_CPU 4000000UL
|
6 | |
7 | |
8 | int a=0; |
9 | |
10 | void init_timer(void) |
11 | {
|
12 | |
13 | //Initialisierung des Timers:
|
14 | |
15 | TCCR0A |= (0<<CS00)|(0<<CS01)|(1<<CS02); //Quarztakt wird durch 256 geteilt 4MHz/1024=15625Hz |
16 | |
17 | TCNT0 = 178; // Vorladen 15625Hz/200,Hz(5ms)=78,125 256-78,125=178 |
18 | |
19 | TIMSK0 |= (1<<TOIE0); // Interrupts aktivieren und damit Timer starten |
20 | |
21 | }
|
22 | |
23 | |
24 | ISR (TIMER0_OVF_vect) |
25 | |
26 | {
|
27 | TCNT0 = 178; |
28 | |
29 | a++; |
30 | if (a>3000)//30sekunde |
31 | {
|
32 | PORTA |= (1<<PA0); |
33 | }
|
34 | }
|
35 | |
36 | int main (void) |
37 | {
|
38 | |
39 | |
40 | DDRA = 0xFF; |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | init_timer(); //Aufruf von timerinitialisierung |
47 | |
48 | sei(); // globale Interrupts zulassen |
49 | |
50 | |
51 | while(1) { } //endlosschleife um programm nicht zu beenden |
52 | return 0; //Rückgabewert an das Betriebssystem (wird nie erreicht wegen while Schleife) |
53 | |
54 | }
|
Vielen Dank MfG