Timer Interrupt Falscher Vector?

OP #1463303
Lesenswert?

Hey ihr...
Ich hab mal etwas mit dem ATmega 2561 herumgespielt, und wollte jetzt 
einen Timer0 einsetzen.
Aus dem Datenblatt hab ich mir meine Bits herausgesetzt und alles 
richtig gesetzt, sagt mir der Kompiler zumindest.
Jetzt hab ich oben das ISR (TIMER0_OVF_vect) drin und wenn ich jetzt 
kompilieren will, sagt er mir das:

../main.c:36: error: static declaration of 'TIMER0_OVF_vect' follows 
non-static declaration

../main.c:36: error: previous declaration of 'TIMER0_OVF_vect' was here


Ich hab da ein Buch wo etwas über Timer steht, aber ich versteh nicht ob 
ich da etwas in der iom2561.h ändern muss!

Auf einem Mega32 gehen meine Timer alle...

Hoff ich hab nichts total doofes übersehen -.-

Besten Dank schonmal hans
#1463328
Lesenswert?

Dennis G. schrieb:
> Naja bei meinem Buch stand da mal was von "wenn man sich da net sicher
> ist lieber mal gucken..."

Ja. Ins iom2561.h kann man mal hineinschauen um zu sehen was da alles 
drinnen ist, wie bestimmte Bits oder auch Interruptvektoren heissen.
Aber gearbeitet wird immer mit der io.h. Dazu stellt man dann in seiner 
Entwicklungsunmgebung noch den verwendeten Prozessor ein und die io.h 
verzweigt selbst zur richtigen, prozessorspezifischen uim...h

Code zeigen!
OP #1463469
Lesenswert?

1
#include "defines.h"
2

3
int main(void)
4
{
5
   DDRA = 0b00000110;   
6
   DDRB = 0b11111111;  
7
   DDRC = 0b11111111;  
8
   DDRD = 0b11111100;    
9
   DDRE = 0b01111100;  
10
   DDRF = 0b11111111;  
11
   DDRG = 0b100111;    
12
   
13
   lcd_init(1);   //Init LCD
14
// adc_init();    //Init ADC
15
   lcd_clear();   //Clear Display
16
   DCF77_init();   //Init das DCF77 Modul
17

18
   LED_RIGHT(ON);
19

20

21
   // Timer/Counter0 Overflow
22
   //
23
   ISR(TIMER0_OVF_vect)
24
   {
25
      PORTE ^= (1 << PE5);    // LED toogle
26
   } 
27

28
   //Konfiguration Timer0
29
   //
30
   TCNT0 |= (1 << TOIE0);              // Overflow Interrupt
31
   TCCR0B |= (1 << CS00) | (1 << CS01);     // Prescaler F_CPU/64
32

33
   //Konfiguration ADC
34
   //
35

36
   //Konfiguration I²C
37
   //
38
   
39
   int t=0;
40
   char buffer[32];
41
   unsigned int Clustervar;
42
   unsigned char Dir_Attrib = 0;
43
   unsigned long Size = 0;
44

45
   while(1)
46
   {
47
   }
48

49
   return 0;   //Wird nie erreicht!
50
}

Also hier mal der Code...
Ich find alles genau so im Datenblatt, hab das ja auch raus gelesen, 
aber irgendwo ist der Wurm drin...

Guten Morgen!
Gast #1463485
Lesenswert?

>#include "defines.h"

1. Was steht da drin?
2. Wieso inkludierst du die "io.h". nicht?
3. Um Interrupts zu nutzen, musst du auch noch die "interrupts.h" mir 
einladen...

4. GUCK INS TUTORIUM!
#1463493
Lesenswert?

In deinem Code sind soviele elementare Problemstellen, dass ich mich 
frage, wie diese Aussage
> Auf einem Mega32 gehen meine Timer alle...
wohl zu verstehen ist.

Was ist damit?
1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3

4
// Timer/Counter0 Overflow
5
//
6
ISR(TIMER0_OVF_vect)
7
{
8
  PORTE ^= (1 << PE5);    // LED toogle
9
} 
10

11
int main(void)
12
{
13
  DDRE = 0b01111100;  
14
   
15
  //Konfiguration Timer0
16
  //
17
  TIMSK0 |= (1 << TOIE0);              // Overflow Interrupt
18
  TCCR0B |= (1 << CS00) | (1 << CS01);     // Prescaler F_CPU/64
19

20
  sei();
21

22
  while(1)
23
  {
24
  }
25

26
  return 0;   //Wird nie erreicht!
27
}
OP #1464420
Lesenswert?

Hallo,
im Header defines.h werden ALLE HEADER und DEFINES des GESAMTEN 
PROGRAMMS geschrieben, um den Überblick zu behalten, daran ist doch 
nichts auszusetzen, drum auch nur der eine Header...

UND wenn ich die io.h und die interrupt.h einbinde geht es genauso wenig 
wie vorher! Ich weiß nicht was euer Problem sein soll!

hans

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren