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.
>Wie kommt adc_average zu seinem Wert?
while(1)
{
ADC_average = ADC_average_read();
}
>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: >>Wie kommt adc_average zu seinem Wert? > > while(1) > { > ADC_average = ADC_average_read(); > } Ah ein Komiker vor dem Herrn ;-)
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.
Hi Du hast linksbündig eingestellt. Also darfst du nur ADCH einlesen. MfG Spess
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!
Wo wird eigentlich die ADLAR Einstellung rausgerechnet? Edit: spess hats früher gesehen
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.
Ich konnte halt nicht mehr in einen Screenshot kopieren, weil ich auch den Debugger mit abbilden wollte. Das war ja nicht böse gemeint! ;)
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!
Ich habe ADLAR mal auf right-adjust gestellt (so wie ich es eigentlich machen wollte) und nun funktioniert es. DANKE nochmal!
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.
@cyblord: Das war das erste mal und nur mit der Absicht, die Debuggerergebnisse mit abzubilden. Gruss
Vorsicht! Nicht mit 1023 rechnen, sondern mit 1024! Macht zwar nicht viel aus, ist aber falsch! Es gibt dazu genügend Foreneinträge!
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?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.