mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Timer Interrupt Falscher Vector?


Autor: Dennis G. (hans_angemeldet)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>ich da etwas in der iom2561.h ändern muss!

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

Autor: Dennis G. (hans_angemeldet)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: STK500-Besitzer (Gast)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Dennis G. (hans_angemeldet)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
#include "defines.h"

int main(void)
{
   DDRA = 0b00000110;   
   DDRB = 0b11111111;  
   DDRC = 0b11111111;  
   DDRD = 0b11111100;    
   DDRE = 0b01111100;  
   DDRF = 0b11111111;  
   DDRG = 0b100111;    
   
   lcd_init(1);   //Init LCD
// adc_init();    //Init ADC
   lcd_clear();   //Clear Display
   DCF77_init();   //Init das DCF77 Modul

   LED_RIGHT(ON);


   // Timer/Counter0 Overflow
   //
   ISR(TIMER0_OVF_vect)
   {
      PORTE ^= (1 << PE5);    // LED toogle
   } 

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

   //Konfiguration ADC
   //

   //Konfiguration I²C
   //
   
   int t=0;
   char buffer[32];
   unsigned int Clustervar;
   unsigned char Dir_Attrib = 0;
   unsigned long Size = 0;

   while(1)
   {
   }

   return 0;   //Wird nie erreicht!
}

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!

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
5. Nimm das Buch, und verbrenne es!

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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?
#include <avr/io.h>
#include <avr/interrupt.h>

// Timer/Counter0 Overflow
//
ISR(TIMER0_OVF_vect)
{
  PORTE ^= (1 << PE5);    // LED toogle
} 

int main(void)
{
  DDRE = 0b01111100;  
   
  //Konfiguration Timer0
  //
  TIMSK0 |= (1 << TOIE0);              // Overflow Interrupt
  TCCR0B |= (1 << CS00) | (1 << CS01);     // Prescaler F_CPU/64

  sei();

  while(1)
  {
  }

  return 0;   //Wird nie erreicht!
}

Autor: Dennis G. (hans_angemeldet)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: ... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab kein Problem

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Dennis G. (hans_angemeldet)
Datum:

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

Aber Danke!
hans

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.