ATmega8535 AD Wandler Problem

Alle allgemeinen Themen zu Elektronik und Elektro

Alle allgemeinen Themen zu Elektronik und Elektro

Moderator: Moderatorengruppe

ATmega8535 AD Wandler Problem

Neuer Beitragvon MaleYAK am Donnerstag 10. November 2005, 23:41

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.
MaleYAK
Threadstarter
15949
 
Beiträge: 2
Registriert: Donnerstag 10. November 2005, 23:39

Neuer Beitragvon MaleYAK am Freitag 11. November 2005, 00:58

Hat sich erledigt.

Der Fehler lag an dem Auslesen des Registers.

Der Register ADCH und ADCL muss komplett ausgelesen werden, damit er beim nächsten mal beschrieben werden kann.
Liest man nur ein Teil aus, bleibt er konstant auf dem alten wert und ein neuer wert kann nicht in den register geschoben werden.

Lösung:
...
result = ADCW;
...

jetzt Läuft der MC einwandfrei.

Irgendwie habe ich das in dem Datenblatt nicht gefunden...
Wieso das so ist keine Ahnung. Man geht davon aus das der Register ständig neu beschrieben wird nach einer Konvertierung.
MaleYAK
Threadstarter
15952
 
Beiträge: 2
Registriert: Donnerstag 10. November 2005, 23:39


Zurück zu Elektronik Allgemein

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 45 Gäste