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

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.