Hallo, Ich habe gestern ein sehr komsiches Verhatlen von meinem Atxmega128a1 entdeckt. Der ADC ist Single Ended konfiguriert und ich habe Input-Voltage/1.6 als Referenzspannung genommen. Wenn ich jetzt in 2 Kanälen eine Conversion starte, sind die Werte plötzlich viel zu klein. Obwohl die Werte passeen, wenn ich ein Kanal nach dem anderen starte und das Ergebnisregister auslese. Zum starten von 2 Kanälen benutze ich: uint8_t chan = 0b11; ADCA_CTRLA |= (0xF & chan)<<2; und zum auslesen vom nullten Kanal das etwas eigene Konstrukt: uint8_t chan = 0; return (*(volatile uint16_t *)(0x0224+0x8*chan)); Kann sich jemand von Euch dieses Verhalten erklären ? Vielen Dank ! Besten Gruß, Robert
Meinst du erstnhaft jemand dröselt deine Hex-Schreibweise auf? Wofür gibt es denn diese tollen #Defines ? Ingo
Hallo, Rob88 schrieb: > Kann sich jemand von Euch dieses Verhalten erklären ? // wait for result while(!ADCA.CH0.INTFLAGS); // wait for conversion complete flag vermutlich wurde die zeitliche Abfolge nicht eingehalten. Ich würde dir auch raten deinen Code ein bisschen leserlich zu schreiben. z.B. ADCA.CH0.CTRL = ADC_CH_INPUTMODE_SINGLEENDED_gc; ADCA.CH0.MUXCTRL = ADC_CH_MUXPOS_PIN0_gc; // PORTA:0 positiv -> GND Gruß G.G.
Hallo, Das while(Intflag) habe ich mit eingebaut (sorry dass ich das nicht gepostet habe), daran kann es leider nicht liegen. Ok zugegeben, dass sieht ein bisschen gruselig aus was ich da hingeschriben habe, aber ich habe versucht die Adressen für die einzelnen Ergebnisregister in eine schöne Form zu bringen mit den defines von Atmel wäre das dann: return (*(volatile uint16_t *)(ADCA_CH0_RES+0x8*chan)); Jetzt kann ich eben der Variable chan = 0-N geben und komme so an die einzelnen Channel Ergebnisse. Ich fand das irgendwie elegant :) Außerdem kann ich so mit wenig Code schnell drauf zugreifen oder ginge es anders noch schöner ? Dieses 0x8 sind die Abastände zwischen den Registern... Danke für die gegebenen und kommenden Antworten, Robert
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.