ADC-Wert springt von 984 auf 1023 bei 4,48V

OP #1860533
Lesenswert?

Hallo,

ich möchte über den ADC0 des ATMEGA32 ein Stromsignal messen. Dazu liegt 
an diesem Pin ein 220 Ohm Shunt gegen Ground. Zudem verwende ich als 
externe 5V-Referenzspannung ein LM4040. Soweit funktioniert auch alles.

Jetzt wollte ich zur Fehlerauswertung und -anpassung eine Kennlinie von 
Eingangsspannung 0-5V und ADC-Ausgang aufnehmen. Bis zu einer Spannung 
von 4,84V und einem ADC-Wert von 984 ist auch alles in Ordnung, danach 
springt der ADC-Wert jedoch sofort auf 1023. D.h. für die letzten 160mV 
bis zu 5V gibt der ADC nur noch 1023 aus.

Hat jemand eine Idee woran das liegen könnte oder ähnliche Erfahrungen 
gemacht?

Auf einem Testboard ohne Shunt und mit VCC als Referenzspannung gab es 
keine Probleme.

MfG
Marcus H.
OP #1860562
Lesenswert?

Schaltung im Anhang und hier der entsprechende Programmausschnitt:
1
void ADC_init (void)
2
{
3
  uint32_t Ergebnis;
4
  DDRA &= ~0xFF;    
5
  PORTA &= ~0xFF;        
6
  ADMUX |= (1<<REFS0);   
7
  ADMUX &= ~(0<<REFS1);    
8
  ADCSRA = (1<<ADPS1)|(1<<ADPS0);      
9
  ADCSRA |= (1<<ADEN); 
10
  ADCSRA |= (1<<ADSC);          
11
  while (ADCSRA & (1<<ADSC) );    
12
  Ergebnis = ADCW;
13
}
14

15
uint32_t ADC_lesen (uint8_t Kanal)
16
{
17
  ADMUX = (ADMUX & ~(0x1F)) | (Kanal & 0x1F);
18
  ADCSRA |= (1<<ADSC);            
19
  while (ADCSRA & (1<<ADSC) );  
20
  return ADCW; 
21
}
22

23
int main (void)
24
{
25
ADC_init ();
26
  do
27
  {
28
    ADC_Wert = ADC_lesen (KANAL_0);
29
    LCD_position (0,1);
30
    LCD_text ("ADC:");
31
    LCD_position (0,2);
32
    LCD_Info (ADC_Wert, 7, 7, 4, " LSB", 0);
33
  }while(1);  
34
return 0;
35
}
Angehängte Dateien:
#1860576
Lesenswert?

@  Marcus H. (darox)

>Schaltung im Anhang und hier der entsprechende Programmausschnitt:

Hmm, also mit einer 5V Referenz und 5V Vcc wird das wahrscheinlich nix. 
Denn du kannst nicht garantieren, dass die 5V von Vcc immer höher als 
die 5V der Referenz sind. Und das müssen sie.

Mein Tip. Nimm die 4,096V Version vom LM4040 und alles ist in Butter. 
Oder dreh deine VCC auf 5,5V hoch.

MfG
Falk
#1860630
Lesenswert?

@  Marcus H. (darox)

>Was wäre wenn Avcc = Aref ist? Avcc darf ja 0,3V von VCC abweichen
>wodurch Schwankungen in der Versorgung egal wären.

Theoretisch machbar. Aber dort hängt noch anderes Zeug dran, nämlich der 
gesamte PortA. Würde ich vermeiden wollen. Ach ja, 100nF an Aref wären 
auch nicht verkehrt.

MFG
Falk

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren