Forum: Compiler & IDEs Atmega164P Timerinterruppt


von Michael D. (michaeld)


Lesenswert?

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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Und, was ist damit?

von STK500-Besitzer (Gast)


Lesenswert?

>      TCNT0  = 178;

Bäh!
Dafür gibt es den CTC-Mode. Da muß man keine Takte zählen...

von Michael D. (michaeld)


Lesenswert?

>Und, was ist damit?

der timerinterrupt wird nicht ausgelößt.

>Dafür gibt es den CTC-Mode. Da muß man keine Takte zählen...

klar gibt es den aber das hier hat ja schon funktioniert auf dem 
Atmega16 frage mich nur warum nicht auf dem Atmega164P.

habe die Registernamen alles geändert gibt es noch was was man beachten 
muss??

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.