Gast
#1942648
Hallo,
habe ein Problem mit meiner Interrupt Routine. Wahrscheinlich mal wieder
nur eine Kleinigkeit aber ich komme einfach nicht darauf.
Hier ein Ausschnitt:
void init_ADC(void)
{
//ADC
ADMUX = (1<<REFS0) | (1<<ADLAR); // interne
Referenzspannung nutzen // linkes Datenregister
ADCSRA = (1<<ADIE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0); // ADC Interrupt
Flag enable // ADC Prescaler
ADCSRA = (1<<ADEN); // ADC Enable
ADCSRA = (1<<ADATE); // Automatisches Convertieren bei
steigender Flanke am gewähltem Eingang
ADCSRA |= (1<<ADSC);
//Data
gStatusPoti = Poti_1;
}
ISR(ADC_vect)
{
if (gStatusPoti == Poti_1)
{
ADMUX &= ~(1<<MUX0);
ADMUX &= ~(1<<MUX1);
ADMUX &= ~(1<<MUX2);
//ADCSRA = (1<<ADSC); // Start Conversion
gPoti[0] = ADCH;
gStatusPoti = Poti_2;
}
if (gStatusPoti == Poti_2)
{
ADMUX = (1<<MUX0);
ADMUX &= ~(1<<MUX1);
ADMUX &= ~(1<<MUX2);
//ADCSRA = (1<<ADSC); // Start Conversion
gPoti[1] = ADCH;
gStatusPoti = Poti_3;
}
}
In meiner Main Funktion rufe ich erst die ADC_init Funktion auf und dann
sollte er nach dem Starten des ADC in meine ISR hüpfen....macht er aber
(laut Simulation) nicht. Habe aber keine Idee wie ich ihn dazu bringe.
Wäre Dankbar, wenn ihr euch mal den Quellcode anseht und evtl. einen
Tipp für mich habt.
MFG Timm