mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATmega32 resetet bei Interrupt


Autor: Ben (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich verwende den ATmega32 und würde gerne über einen Timer einen 
Interrupt auslösen. Da es dabei Probleme gibt, habe ich das Programm 
zunächst reduziert - die Interrupt-Funktion ist zunächst leer.

Der folgende Code sollte den Timer und den Interrupt entsprechend 
einstellen und anschließend Port B zunächst auf 0x0F und anschließend 
auf 0xF0 stellen und dann verharren. An Port B sind zu Testzwecken LEDs 
angeschlossen.
#include "main.h"
#include <avr/io.h>
#include <avr/interrupt.h>

int main()
{
  TCCR0 = (1 << WGM01); //CTC Modus
  TCCR0 |= (1 << CS02) | (0 << CS01) | (1 << CS00); //Prescaler
  OCR0 = 255; //Output Compare Register 0
  TIMSK |= (1 << OCIE0); //Compare Interrupt erlauben

  DDRB = 0xFF;

  sei(); // Global Interrupts aktivieren
  PORTB = 0x0F;
  _delay_ms( 10 );
  PORTB = 0xF0;

  while(1);
}

ISR(TIMER0_COMPA_vect)
{
}

Starte ich den ATmega32, so flackern die LED 0-3 und 4-7 abwechselnt. 
Daraus schließe ich, dass der Mikrocontroller ständig neugestartet wird, 
ansonsten würde die LEDs nicht flackern, sondern einige leuchten und 
einige aus sein. Kommentiere ich "TIMSK |= (1 << OCIE0);" oder "sei();" 
aus, so funktioniert dies korrekt. Deshalb denke ich, dass der Interrupt 
schuld sein muss. Kann mir jemand sagen, was ich falsch mache? (Im AVR 
Studio Simulator scheint er auch immer wieder zu resetten.)

Gruß
Ben
P.S.: STK 500 + AVRISP mkII (3.6864MHz Quarz)

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

Bewertung
0 lesenswert
nicht lesenswert
Du solltest die Warnungen deines Compilers etwas ernster nehmen

../SekTakt.c:22: warning: 'TIMER0_COMPA_vect' appears to be a misspelled 
signal handler


Da der Timer 0 keinen A oder B Kanal hat, ist das A in TIMER0_COMPA_vect 
unlogisch. Der Interrupt heisst folgerichtig TIMER0_COMP_vect

Autor: Ben (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke, ich hatte die Warnung zunächst nicht ganz verstanden. Aber 
stimmt, das ist logisch...
Danke.

Gruß
Ben

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.