Forum: Mikrocontroller und Digitale Elektronik ADC löst keinen Interrupt aus (ATMega 16)


von Raphael F. (erdbewohner)


Lesenswert?

Hallo!

Ich möchte in meinem Programm den ADC verwenden der dann den 
ADC-Interrupt auslöst. Nach dem das nicht funktionierte, habe ich ein 
kleines Testprogramm geschrieben, das nur den ADC-Interrup testet. Das 
programm beweist nun eindeutig: der ADC löst den Interrupt nicht aus. 
(die LED leuchtet nicht). Aber wieso? hat jemand einen Rat für mich??

Mein Programm:
1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3
4
int main(void)
5
{
6
  DDRB = 0x1F;  //Portkonfigurationen
7
  DDRD = 0xF8;
8
  PORTC = 0xFC;
9
  PORTB |= (1<<0)|(1<<1)|(1<<4);
10
  
11
  ADMUX = (1<<REFS0)|(1<<ADLAR)|(1<<MUX2)|(1<<MUX0);                          //Analog-Digitalwandler-Konfigurationen
12
  ADCSRA = (1<<ADEN)|(1<<ADSC)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);
13
  
14
  sei();        //Interrupts erlaubt
15
}
16
ISR(ADC_vect)
17
{
18
  PORTD |= (1<<6);
19
}
Vielen Dank für jegliche Hilfe!
Gruss Erdbewohner

von Karl H. (kbuchegg)


Lesenswert?

Weil dein Programm endet, noch ehe irgendwer eine Chance hat einen 
Interrupt auszulösen

(weiter hab ich dann nicht mehr geschaut)

von hans (Gast)


Lesenswert?

while(1);

von Raphael F. (erdbewohner)


Lesenswert?

ah, ok. vielen Dank!
Ich dachte, dass der C-Compiler (Win-AVR) am ende selbständig eine 
endlosschlaufe einfügt. Aber wenn ich es manuell mache geht es!
Danke!
Erdbewohner

von Karl H. (kbuchegg)


Lesenswert?

Raphael F. schrieb:
> ah, ok. vielen Dank!
> Ich dachte, dass der C-Compiler (Win-AVR) am ende selbständig eine
> endlosschlaufe einfügt.

Tut er auch.
Nur friert er zusätzlich alles ein, damit der µC nichts anstellt.

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.