AD-Wandler

Gast #72622
Lesenswert?

Hallo zusammen

Ich arbeite mit dem ATmega128 und möchte den AD-Wandler dieses
Controllers ansteuern um sechs verschiedene Werte einzulesen. Leider
habe ich es noch nicht geschafft den Wandler so zu intitialisieren,
dass er mir auch nur einen Wert ausspuckt. Ich arbeite mit JTAG, d.h.
ich kann den Ablauf realtime verfolgen. Ich initialisiere ihn wie
folgt:

prescaler 64 (8MHz osz)
enable free running
set MUX
enable ADC
start conversion
wait until complete, ADIF
read ADCL
reasd ADCH

Habe ich etwas vergessen? Hat jemand von euch Erfahrung mit dem Wandler
der AVR's? Falls ja, wie initialisiert ihr das Ding?

Danke
Gast #72623
Lesenswert?

int hole_ad(char kanal)  // ca. 5mV pro Bit absolut
{
  ADCSR = 0x86;    /* enable + %64-Vorteiler */
  ADMUX = kanal;
  ADCSR |= 0x40;  /* start ad */
  while(ADCSR & 0x40);  /* warten */
  return(ADC);
}

z.B. so.
Gast #72624
Lesenswert?

Hallo,
ich habe bei einem anderen AVR (4433) erlebt, dass im Gegensatz zum
Datenblatt es doch auf die Reihenfolge des Auslesens (ADCL bzw. ~H)
ankommt, hat mich wahnsinnig gemacht. Einfach mal ausprobieren!
mfg
Frank
Gast #72625
Lesenswert?

@ Frank

im Datenblatt des 4433 steht doch eindeutig, daß ADCL vor ADCH
ausgelesen werden muß.

"When reading data, ADCL must be read first. Once ADCL is read, ADC
access to Data Registers is blocked. This means that if ADCL has been
read and a conversion completes before ADCH is read, none of the
registers are updated and the result from the conversion is lost. When
ADCH is read, ADC access to the ADCH and ADCL Registers is
re-enabled."

Gruß
Markus

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren