Forum: Mikrocontroller und Digitale Elektronik ADC-Wert springt von 984 auf 1023 bei 4,48V


von Marcus H. (darox)


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.

von Karl H. (kbuchegg)


Lesenswert?

Programm zeigen
Schaltung zeigen

von Marcus H. (darox)


Angehängte Dateien:

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
}

von Falk B. (falk)


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

von Marcus H. (darox)


Lesenswert?

Danke für den Hinweis, darüber werde ich nochmal nachdenken!

Also müsste ja mein VCC 4,84V betragen? Denn die Referenz erkennt er ja 
korrekt wenn er bei dieser Spannung noch 984 ausgibt.

von Falk B. (falk)


Lesenswert?

@  Marcus H. (darox)

>Also müsste ja mein VCC 4,84V betragen? Denn die Referenz erkennt er ja
>korrekt wenn er bei dieser Spannung noch 984 ausgibt.

Kann sein.

von Marcus H. (darox)


Lesenswert?

Ok - noch eine Überlegung:

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

von Falk B. (falk)


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

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.