Forum: Mikrocontroller und Digitale Elektronik Problem: Atxmega 128A1 ADC wandelt nicht richtig


von AxmegaFrage (Gast)


Lesenswert?

Hallo,

Versuche einen Analogwert mit einem Atxmega128A1 auf einem ALVIDI 
Entwicklungsboard einzulesen. Jedoch schwanken die eingelesenen Werte 
recht stark von Wandlung zu Wandlung. Kann es sein, dass der ADC noch 
noch falsch konfiguriert ist? Anbei der Code. Jegliche Hilfe ist 
willkommen.
1
/*
2
Multi-Level-Inverter
3
FHWT ´10
4
*/
5
#include <avr/io.h>
6
#include <util/delay.h>
7
#include <avr/interrupt.h>
8
#include <math.h>
9
10
void clock_init(void);
11
12
ISR(ADCB_CH0_vect) 
13
{   
14
  PORTA.OUT = ADCB.CH0RESL;  
15
}
16
17
18
19
int main (void)
20
{  
21
  clock_init();
22
  sei();
23
  PORTA.DIR=0x00;
24
  PORTB.DIR=0x00;
25
  PORTA.OUT=0x00;
26
  
27
  ADCB.CALL = 0x00;
28
  ADCB.CALH = 0x00;
29
  ADCB.CTRLA = 0b00000001;       //ADC enable, flush pipeline aus, start=0
30
  ADCB.CTRLB = 0b00001010;        //unsigned mode,8Bit, Free Running Mode
31
  ADCB.REFCTRL = 0b00000000;      //Externe 1V Referenz
32
  ADCB.PRESCALER = 0x01;     //Vorteiler auf 8 
33
  ADCB.CH0.CTRL = 0x81;     //input mode single ended Kanal 0
34
  ADCB.CH0.MUXCTRL = 0b00000000;  //PIN 0 für ADC wählen
35
  ADCB.EVCTRL = 0b00000000;   // sweep ch0 
36
  ADCB.CH0.INTCTRL = 0b00000011;   // enable hi level interrupts 
37
  PMIC.CTRL = 0b00000111;   // enable interrupt
38
  
39
40
  while(1) 
41
  {  
42
  }        
43
  return 0;
44
}

von G*sti Garsti (Gast)


Lesenswert?

Datenblatt zur Hand nehmen, Abschnitt "Errata" lesen (42 Punkte), sich 
beim XMega ADC über gar nichts mehr wundern.

von wt (Gast)


Lesenswert?

Meine ADC steht wie eine Eins. Ich benutze allerdings interne Ref. 
Vcc/1.6

hier ist noch die Init vom ADC Modul

  // Max. ADC Geschwindigkeit 2Msps
  ADCA.PRESCALER = 0b00000010 & ADC_PRESCALER_gm;

  // Setze ch0 Mode auf SINGLE_ENDED
  ADCA.CH0.CTRL = ADC_CH_INPUTMODE_SINGLEENDED_gc;

  // CH0 MUX -> ADC1
  ADCA.CH0.MUXCTRL = (1 << ADC_CH_MUXPOS_bp);

  // Reference interne Vcc/1.6V
  ADCA.REFCTRL |= (0x01 << ADC_REFSEL_bp);

  // Enable ADC Module
  ADCA.CTRLA = ADC_ENABLE_bm;

gruß

von XMEGA (Gast)


Lesenswert?

Servus,


G*sti Garsti schrieb:
> beim XMega ADC über gar nichts mehr wundern

kein Punkt trifft hier zu! +- 2LSB hat jeder gängige ADC.
Die heutigen Versionen funktionieren astrein. Die beschriebenen Fehler 
sind leicht zu kompensieren.


Meistens ist der Fehler im schlechten Aufbau zu finden. Steckbrett oder 
ähnliches funktionieren zu 75% nicht.

Also keine Panikmache.


Gruß XMEGA

von Avr N. (balze)


Lesenswert?

XMEGA schrieb:
> Die heutigen Versionen funktionieren astrein.

Da wuerde ich gerne zustimmen, kann ich aber leider nicht.
Aber vielleicht kannst Du mir sagen was ich falsch mache.
Beitrag "Atmel Xmega synchrone ADCs / Quantisierungs + Schwingungs Problem"


Bei der Wahl der externen Referenz muss diese natuerlich auch in 
entsprechend guter Qualitaet (und am richtigen) Eingang zur Verfuefung 
stehen.
Ist die exteren Referenz schlecht, ist das Messergebnis auch schlecht.
Ich habe aber wie im oben stehenden link auch genug Probleme mit den 
ADCs der XMega. (Und zwar Probleme, die nicht im Errata stehen. Rev.H)

Mfg;

Balze

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.