ATMega88 ADC Wert verfälscht, 2 Kanäle

Gast #2916066
Lesenswert?
• ▲
▼
Hallo,
ich lese mit dem ATMega88 den ADC an PC0 und PC1 aus.
Beschaltet mit externem Quarz 16MHz.
AVCC (Spule 100µH gegen 5V, Kondensator 100nF gegen Masse)
AREF (Kondensator 100nF gegen Masse)

Dazu verwende ich folgende Routinen:
1
void adc_init(void)
2
{
3
  ADCSRA = (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0) | (1<<ADEN);
4
  ADMUX = (1<<REFS0);
5
  ADCSRA |= (1<<ADSC);  
6
  while (ADCSRA & (1<<ADSC));
7
  (void)ADCW;            
8
}
9

10

11
uint16_t read_channel(uint8_t channel)
12
{
13
  ADMUX = (ADMUX & ~(0x1F)) | (channel & 0x1F);
14
  ADCSRA |= (1<<ADSC);
15
  while (ADCSRA & (1<<ADSC));
16
  return ADCW;
17
}

Der Aufruf in der main() sieht folgendermaßen aus:
1
...
2
    temp=read_channel(0);
3
    adc_buffer[0]=temp & 0x00FF;
4
    adc_buffer[1]=temp & 0xFF00;
5
    current_left=(uint16_t)(adc_buffer[1]+adc_buffer[0]);
6
    
7
    
8
    temp=read_channel(1);
9
    adc_buffer[2]=temp & 0x00FF;
10
    adc_buffer[3]=temp & 0xFF00;
11
    current_right=(uint16_t)(adc_buffer[3]+adc_buffer[2]);
12
...

Im Ruhezustand (PC0 und PC1 nicht beschaltet) liefert der ADC exakte 
Werte. Auch wenn ich beispielsweise die zweite Wandlung auskommentiere 
liefert er richtige Ergebnisse. Wenn ich jedoch z.B. auf PC0 einen 
Sprung auf 5V gebe, so liefert der ADC an PC1 nicht mehr 0V, sondern 
wird allmählich auf knapp 5V gezogen.

Ich könnte mir vorstellen, das die Zeit zwischen den beiden Wandlungen 
zu knapp bemessen ist und dadurch der Kondensator des ADC nicht genügend 
Zeit hat sich wieder zu entladen. Aber selbst wenn ich ein delay 
zwischen beide Aufrufe mache, tritt dieses Problem auf.

Viele Grüße,
Andy

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.