Forum: Mikrocontroller und Digitale Elektronik ATMega128 ADC Differentiell


von Hans (Gast)


Lesenswert?

Hallo Leute,

ich möchte mit dem ADC des ATMega128 eine differentielle Spannung 
messen, also zwischen zwei bestimmten Punkten und nicht gegen GND.
Ich bekomme aber bei der differentiellen Messung einen falschen 
Spannungswert von dem ADC geliefert.
Die Spannung an Punkt1(ADC0) ist 5V und an Punkt2(ADC1) 1V. Also müsste 
mir der ADC eine Spannung von 4V bzw. einen Wert von ca. 820 liefern. Er 
liefert mir allerdings einen Wert von 419.
Zum Testen des ADCs habe ich auch mal beide Channels ADC0,ADC1 single 
ended konfiguriert und gemessen. In beiden Fällen liefert mir der ADC 
korrekte Werte.
Folgend die Funktionen zur Konfiguration des ADCs.
adc_channel: 0x10 für Messung ADC0-ADC1
1
void ADC_init(unsigned char prescale)
2
{
3
  unsigned int result;
4
  ADCSRA |= (1<<ADEN);
5
  ADCSRA |= prescale;
6
  ADMUX |= (1<<0);
7
  ADCSRA |= (1<<ADSC);
8
  while(!(ADCSRA & (1<<ADSC)));
9
  result = ((ADCL) | (ADCH<<8));
10
}
11
12
unsigned int get_adc_value(unsigned char adc_channel)
13
{
14
  ADMUX = (ADMUX & ~(0x1F)) | (adc_channel & 0x1F);
15
  ADCSRA |= (1<<ADSC);
16
  while(!(ADCSRA & (1<<ADSC)));
17
  return ((ADCL) | (ADCH<<8));
18
}

von spess53 (Gast)


Lesenswert?

Hi

> Er liefert mir allerdings einen Wert von 419.

Dann lies mal im Abschnitt:

ADC Conversion Result

nach.

MfG Spess

von Hans (Gast)


Lesenswert?

Ach alles klar danke! =) Zweierkomplement!

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.