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
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 :-(
Noch komplizierter hättest du aber in der init Funktion die Einstellung
für die Referenzspannung in ADMUX nicht gestalten können?
Noch bin ich mir nicht sicher, ob das einfach nur blödsinnig oder
blödsinnig falsch ist. Das muss ich erst mal auseinanderdröseln.
>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!
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.
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.
>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!
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. ;-)
(aber natürlich ist das keine Erklärung für die 25666)
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)
>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
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.
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
@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!
adcfail schrieb:> @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!> Also was soll das.
Das Problem ist, wenn jemand Code per Screenshot postet, dann weckt das
erstmal gewisse Agressionen.
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?