Forum: Mikrocontroller und Digitale Elektronik Timer Interrupt Falscher Vector?


von Dennis G. (hans_angemeldet)


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

von STK500-Besitzer (Gast)


Lesenswert?

>ich da etwas in der iom2561.h ändern muss!

Die braucht dich gar nicht interessieren.
Dafür ist die io.h da!

von Dennis G. (hans_angemeldet)


Lesenswert?

Naja bei meinem Buch stand da mal was von "wenn man sich da net sicher 
ist lieber mal gucken..." ja und warum grig ich dann den Fehler ist doch 
alles richtig...

Wenn ich die GANZE ISR Funktion ausklammere, dann geht alles durch!

Grüße hans

von STK500-Besitzer (Gast)


Lesenswert?

Wie wäre es, wenn du hier mal dein Programm posten würdest?!

von Karl H. (kbuchegg)


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!

von Dennis G. (hans_angemeldet)


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!

von STK500-Besitzer (Gast)


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!

von STK500-Besitzer (Gast)


Lesenswert?

5. Nimm das Buch, und verbrenne es!

von Karl H. (kbuchegg)


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
}

von Dennis G. (hans_angemeldet)


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

von ... (Gast)


Lesenswert?

Ich hab kein Problem

von holger (Gast)


Lesenswert?

>Wenn ich die GANZE ISR Funktion ausklammere, dann geht alles durch!

Was hat die ISR in der main() zu suchen? Genau, nichts!
Da gehört sie nicht hin. Siehe Post von Karl Heinz.

von Dennis G. (hans_angemeldet)


Lesenswert?

Und warum dann so einen Aufstand machen, wenn man einfach mal was 
übersieht und nicht mehr durchkommt?
Schon komisch...

Aber Danke!
hans

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.