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 | }
|