Problem mit ADC - offset?

Gast #85177
Hallo,
ich habe mir hier gerade mal einen einfachen AD Wandler mit meinem
ATmega128 gebastelt. Das Programm habe ich mit CodevisionAVR erstellt
und lasse mir den gewandelten wert mittels der Routine

v_mess = (float) ((5.0/1023)*read_adc(0));
      ftoa(v_mess,4,wert);
      puts(wert);

direkt aufs Terminal ausgeben.
An sich funktioniert der ADC, das merkwürdige ist jedoch, daß ich auf
dem Terminal einen viel zu niedrigen Wert bekomme. Wenn ich
beispielsweise 1 Volt anliegen habe, bekomme ich sowas wie 0.2
ausgegeben. Habe ich da irgendwo einen Denkfehler mit eingebaut?
Beispielsweise beim Ausgeben der Werte im ASCII Format?
Gruß,
Stefan
Gast #85179
Die Ausleseroutine hat mir der Codevision Wizard selbst hingebastelt.
Sieht dann so aus:

unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input|ADC_VREF_TYPE;
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}

Das hat auch eigentlich immer funktioniert. Ich glaube ja daß das
Problem eher in meiner Dezimalwertumrechnung liegt, bzw. den
verwendeten Datentypen.
STefan
Gast #85181
Bei mir ist es so definiert.

#define ADC_VREF_TYPE 0x00

Das verwirrt mich nun auch etwas. Wie kamst du denn auf ADC_VREF_TYPE
0x40? Ich verstehe nicht genau was da passiert.
'wert' ist einfach ein Array, daß ich so definiert habe:
char wert[4];
Gast #85182
nun du hast zumindest 2 fehler:

1.#define ADC_VREF_TYPE 0x40 bedeutet unter anderem, dass
du die 5v als referenzspannung benutzen willst (du berechnest ja
mit v_mess = (float) ((5.0/1023)*read_adc(0)); in bezug auf 5v
referenzspannung;

2. wert[4] ist zu wenig, das fasst nur 3 stellen zusammen; den "wert"
musst du mindestens mit wert[5] definieren, besser mit wert[6]
Gast #85183
Habe das Problem endlich gelöst, es lag an was ganz anderem: Der GND Pin
des uC´s lag nicht auf dem selben Niveau wie der Netzteil GNC (dessen
Spannung ich wandeln wollte). Deshalb hat mir mein ADC immer Murcks
rausgegeben.
Mensch, an so einfachen Fehlern hängt man sich doch immer wieder ganz
schön lange auf....
Trotzdem danke für eure Tipps,
Stefan

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 22 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.