Hallo zusammen,
Ich versuche seit einiger Zeit, den AD Wandler zum Laufen zu bekommen.
An einem Pin des A Ports ist ein Drucksensor angeschlossen, sobald ich den Atmel starte wird nur einmal eine AD Konvertierung durchgeführt, obwohl die routine sich in einer Schleife befindet. Ich muss reset ausführen damit die Konvertierung erneut ausgeführt wird also wieder nur einmal. Es ist so als ob der AD Wandler nach der ersten konvertierung abgeschaltet wird. Die Flags sind richtig gesetzt... Der MC ist in Ordnung, da er andere aufgaben weiter bearbeitet.
ich benutze folgenden Code.
int read_adc(char channel)
{
int result = 0;
DDRA &= ~ (1<<channel); // Pin als input
PORTA &= ~ (1<<channel); // Alle Pullups aus.
ADMUX = 0xC0; // interne Refernzspannung, rechts Ausrichtung
ADMUX |= channel; // Kanal wählen
asm("nop"); //kurze Pause
ADCSRA=(1<<ADPS2)+(1<<ADPS1)+(1<<ADPS0)+(1<<ADEN); //Prescale Faktor, ADC an
asm("nop");
ADCSRA |= (1 << ADSC); // Beginne mit der Konvertierung
while ( (ADCSRA & (1<<ADSC)) != 0){} //Warten bis konvertierung beendet
asm("nop");
result= ADCL; // Ergebnis die letzten 8 BIT
return result;
}
Diese Funktion wird in einem Loop ausgeführt. Trotzdem wird der AD Wandler nur einmal eingeschaltet. Auch eine Löschung der Interrupts nach dieser funktion brachte keinen Erfolg.
Wo mache ich den Fehler??
Für jede Hilfe wäre ich Dankbar.