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
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.
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
@ 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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.