Da das letzte Problem gelöst ist habe ich ein schon wieder ein neues Problem:
In meinem Programm verwende ich den Timer Interrupt: SIG_Overflow 0, dieser wird auch ausgelöst, nun möchte ich aber auch noch einen Analog Wert einlesen!
Ich habe am Anfang meines Programm den ADC so initialisiert:
Code:
void adc_init(void)
{
ADMUX=0x00;
ADCSRA=(1<<ADEN);
ADCSRA|=(1<<ADPS2)|(1<<ADPS1);
SFIOR=0x00;
}
Und dann habe ich noch das Unterprogramm für den ADC im SIG_OVERFLOW0 aufgerufen:
Code:
prozent_istwert=adc(1);
Und jetzt kommt nach das Unterprogramm selber:
Code:
float adc (unsigned char kanal)
{
long int x;
ADMUX |= kanal;
ADCSRA|=(1<<ADSC);
while(ADCSRA&(1<<ADSC))
;
x=ADCL+ADCH*256;
prozent_wert=(x*100)/1024;
return(prozent_wert);
}
Das Problem ist: wenn ich in das Unterprogramm gehe für den ADC, steigt er mir plötzlich aus und startet das Programm neu!!!
Zumindest ist es so im AVR STUDIO!
Deshalb meine Frage: Ist das nur im Studio so??? Weiß jemand warum das ist? Und was man dagegen tun kann?
Lesezeichen