ADC liefert falschen Messwert

Gast #2860248
Lesenswert?

Hallo!

Ich habe einen ADC aufgebaut und diesen wie im GCC-Tutorial beschrieben 
übernommen.

Ich lege eine Spannung von 1,73 V an den ADC.
Jedoch ist der gemessene Wert (ADC_average = 25666) falsch.
Laut Formel im Datenblatt: ADC = Vin * 1023/Vref
müsste sich bei einer Eingangsspannung von 1,73 V und Vref=5V ein 
ADC-Wert von 353,96 erbeben.

Was läuft hier falsch?

Vielen  DANK!

Gruss
Angehängte Dateien:
#2860268
Lesenswert?

adcfail schrieb:

> Was läuft hier falsch?

Das du einen Screenshot postest anstatt dem Code.

Wie kommt adc_average zu seinem Wert?
Der kann nicht 25666 sein.
Selbst wenn der ADC 32 mal hintereinander 1023 liefern würde, ist der 
Mittelwert davon immer noch 1023 und kann auch niemals größer als 1023 
sein.

Da du aber in der Variablen 25666 stehen hast, liegt die Vermutung nahe, 
dass du mit dem Returnwert der Funktion nicht das richtige machst. Nur 
leider sieht man das in deinem Screenshot nicht, weil wir nicht im Code 
scrollen können :-(
#2860284
Lesenswert?

adcfail schrieb:
>>Noch komplizierter hättest du aber in der init Funktion die Einstellung
> für die Referenzspannung in ADMUX nicht gestalten können?
>
> Vll. kompliziert, funktioniert jedoch so!

Na, wenn alles so funktionieren würde, wie du dir das vorstellst, dann 
sollte es ja auch kein Problem geben. Da es aber ein Problem gibt, 
stimmt also ganz offenbar irgendwo was nicht. Und unverständlicher Code, 
über den man erst mal 2 Minuten nachdenken muss um sich zu überzeugen, 
dass er das tut was er soll, macht die Sache nicht leichter.
#2860287
Lesenswert?

adcfail schrieb:
>>Ah ein Komiker vor dem Herrn ;-)
>
> Wie kann man das verstehen?

Das das nicht dein Code sein kann.
Da wird die Ausgabefunktion nicht aufgerufen.


Was soll das eigentlich?
Ich dachte bisher eigentlich immer, dass der der Hilfe braucht alles 
dazu tun sollte, um seinen Helfern die Sache möglichst einfach zu 
machen. Und du veranstaltest stattdessen eine Rätselrunde.
Gast #2860288
Lesenswert?

>Na, wenn alles so funktionieren würde, wie du dir das vorstellst, dann
sollte es ja auch kein Problem geben.

Ich habe diese ADMUX-Zeile auch mal auskommentiert, jedoch verhält sich 
das Programm genauso.

DANKE!
#2860295
Lesenswert?

Stefan Ernst schrieb:
> Karl Heinz Buchegger schrieb:
>> Mittelwert davon immer noch 1023 und kann auch niemals größer als 1023
>> sein.
>
> Doch, weil 33 Messungen aufaddiert werden, aber nur durch 32 dividiert
> wird. ;-)

Ah.
Hast du recht. Sieht man auch auf dem JPG so wahnsinnig gut.


(Manchmal frag ich mich schon, wozu eigentlich im Tutorial fix&fertige 
ADC Routinen rumliegen, die man benutzen und studieren kann)
Gast #2860297
Lesenswert?

>Das das nicht dein Code sein kann.
Da wird die Ausgabefunktion nicht aufgerufen.


Ich versteh grad das Problem nicht, was für eine Ausgabefunktion?
Man sieht doch auf dem Bild eindeutig den nichtfunktionierenden Code. 
Mehr braucht man doch nicht!

Gruss
#2860298
Lesenswert?

adcfail schrieb:
>>Das das nicht dein Code sein kann.
> Da wird die Ausgabefunktion nicht aufgerufen.
>
>
> Ich versteh grad das Problem nicht, was für eine Ausgabefunktion?
> Man sieht doch auf dem Bild eindeutig den nichtfunktionierenden Code.
> Mehr braucht man doch nicht!

Na dann.
Dann such deine Fehler doch bitte nächstes mal selber. Ok?

Hinterher, wenn einem die anderen die Fehler gezeigt haben, ist es 
leicht klug zu scheissen.
#2860319
Lesenswert?

Der Wert des ADC steht im ADCL und ADCH Register. in deinem Bild wird 
jedoch nicht gezeigt wie der Wert in eine Variable übergeben oder 
berechnet wird.

Schau mal im Datenblatt deines Controllers (Bsp.: ATMEGA8 S.201) unter 
"The ADC Data Register - ADCL ans ADCH". Da wird die Verwendung von 
ADLAR = 0/1 beschrieben.

mfg
Hohmi
Gast #2860326
Lesenswert?

@spess53: Vielen DANK für deine Hilfe!

@kbuckegg: Ich hab jetzt ein paar mal was gepostet, das einzige was von 
dir kommt sind ständig Vorwürfe oder irgendein doofes rumgemotze, du 
konntest mir in keinem einzigen Beitrag wirklich helfen!

Mir wurde nur durch Gasteinträge weitergeholfen!

Also was soll das.

Ich bin erst Anfänger, ich glaub es ist noch kein Meister vom Himmel 
gefallen und du bist auch keiner!
#2860390
Lesenswert?

Sepp schrieb:
> Vorsicht!
>
> Nicht mit 1023 rechnen, sondern mit 1024!
> Macht zwar nicht viel aus, ist aber falsch!
> Es gibt dazu genügend Foreneinträge!

Richtig. Steht aber auch so im Datenblatt. Wer zu blöd ist, daraus die 
Formel abzumalen dem kann man halt auch nicht mehr helfen.

@adcfail:
Und was spricht dagegen, den Code als Textdatei(.c) hochzuladen und den 
Debugger als Screenshot?

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