Forum: Mikrocontroller und Digitale Elektronik ATmega32 resetet bei Interrupt


von Ben (Gast)


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.
1
#include "main.h"
2
#include <avr/io.h>
3
#include <avr/interrupt.h>
4
5
int main()
6
{
7
  TCCR0 = (1 << WGM01); //CTC Modus
8
  TCCR0 |= (1 << CS02) | (0 << CS01) | (1 << CS00); //Prescaler
9
  OCR0 = 255; //Output Compare Register 0
10
  TIMSK |= (1 << OCIE0); //Compare Interrupt erlauben
11
12
  DDRB = 0xFF;
13
14
  sei(); // Global Interrupts aktivieren
15
  PORTB = 0x0F;
16
  _delay_ms( 10 );
17
  PORTB = 0xF0;
18
19
  while(1);
20
}
21
22
ISR(TIMER0_COMPA_vect)
23
{
24
}

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)

von Karl H. (kbuchegg)


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

von Ben (Gast)


Lesenswert?

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

Gruß
Ben

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.