Forum: Mikrocontroller und Digitale Elektronik ADC Problem Atmega8


von Jabu (Gast)


Lesenswert?

Hallo,

Ich möchte, dass der ADC ein Potentiometer auswertet. Folgender Code 
scheint jedoch nicht zu funktionieren, ich bekomme im Terminal nur die 
Zahl 1023 heraus, egal welche Spannung anliegt:

int main(void)
{
  DDRC  = 0b00000000;
  PORTC  = 0b00000000;
  uart_init();

  while(1)
        {
    _delay_ms(100);
    uart_puts(utoa( ADmessung(), s, 10 ));
  }
}

uint16_t ADmessung(void)
{
  ADMUX   = 0b00000100;
  ADCSRA |= (1<<ADEN)|(1<<ADPS1);
  ADCSRA |= (1<<ADSC);

  while((ADCSRA & (1<<ADSC)));
  return ADC;
}

Die serielle Übertragung mithilfe der puts methode funktioniert! 
Mehrfach getestet. Kann mir jemadn helfen? Danke im Voraus.

von sauger (Gast)


Lesenswert?

Nabend,

Jabu schrieb:
> Kann mir jemadn helfen? Danke im Voraus.

lege alles offen (Hard/Software) sonst wird das nichts mit der Hilfe

MfG

von Spess53 (Gast)


Lesenswert?

Hi

>Folgender Code
>scheint jedoch nicht zu funktionieren, ich bekomme im Terminal nur die
>Zahl 1023 heraus, egal welche Spannung anliegt:

Falsche Referenzspannung. Außerdem ist eine stetige Neuinitialisierung 
vor einer Messung Unsinn.

MfG Spess

von katastrophenheinz (Gast)


Lesenswert?

Hi,

lt ADMUX-Einstellungen verwendest du eine externe Vref.

um zu verifizieren, daß der ADC grundsätzlich funktioniert, würde ich 
einfach mal Vin=Vbg und Vref=Avcc anlegen, d.h. ADMUX=0b01001110, an 
Vref nur eine Kapazität gegen Masse. Da sollte dann halbwegs konstant 
ein Wert in der Größenordnung 1.3/Avcc*1024 rauskommen.

Wenn das funktioniert, als nächstes wieder die externe Vref anlegen und 
noch einmal Vbg gegen die die externe Vref wandeln,d.h. ADMUX=0b00001110 
Da sollte dann halbwegs konstant ein Wert von 1.3/Vef*1024 rauskommen.

Wenn das funktioniert, dann erst, wie ursprünglich gedacht, ADC4 gegen 
externe Vref wandeln. Wenn das dann immer noch nicht funktioniert, kann 
der Fehler eigenlich nur auf der Strecke vom Input-Pin bis zum 
Analog-Multiplexer liegen.

Ebenfalls problematisch ist der Start der Wandlung sofort nach ADEN=1.
Lt. Datenblatt werden alle Spannungen erst bei ADEN=1 geschaltet und die 
werden sich nicht bis zum nächsten Clk-Zyklus stablisiert haben.
D.h. zumindest die ersten paar Wandlungen liefern nur Schrott.

Zuletzt noch: passt das mit der Prescaler-Einstellung? Datenblatt: "By 
default, the successive approximation circuitry requires an input clock 
frequency between50kHz and 200kHz to get maximum resolution. If a lower 
resolution than 10 bits is needed, the input clock frequency to the ADC 
can be higher than 200kHz to get a higher sample rate."

Gruss, Heinz

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.