Leider habe ich immer noch keine Lösung warum der Wert meines ADC so schwankt. Ich verweise auf den Artikel von mir "Gemessene Spannung ungleich ADC-Wert". Ich habe ADREF mit einem 100nF Kondensator auf GND gelegt und nutze AVCC als AVREF sowie es im Datenblatt steht. Nur leider schwankt mein Wert bei einer konstant zu messenden Spannung um 3-4 Einheiten. Warum es nicht besser wird wenn ich den Mittelwert mit mehr Einzelwerten bilde verstehe ich nicht. Ich hoffe ich war nicht zu voreilig mit dem Öffnen eines neuen Artikel aber ich vermute das viele denken das das Problem gelöst ist. Gruss matthias
Tipp am Rande: Gugg mal nach loop_until_bit_is_set und benutze statt ADCH:ADCL nur ADC.
>Nur leider schwankt mein Wert bei einer konstant zu messenden Spannung >um 3-4 Einheiten. Warum es nicht besser wird wenn ich den Mittelwert mit >mehr Einzelwerten bilde verstehe ich nicht. Nur eine Vermutung: Vieleicht schwankt der Messwert so stark das sich das im Mittelwert nicht mehr wegrechnen lässt?
Mach doch mal noch einen min- und max-Wert mit in die Mittelwert-Schleife, dann weißt du, wie weit deine Werte schwanken. Mit dem Filter siehst du alles wie mit einer Milchglasscheibe.
1 | uint32_t min=0xffffffff; |
2 | uint32_t max=0; |
3 | :
|
4 | :
|
5 | result2 = ADC; |
6 | result +=result2; |
7 | if (result2>max) max = result2; |
8 | if (result2<min) min = result2; |
@Sven P. das ändert leider nichts Aber sagt mal was kann die itoa Funktion den alles auch 32Bit Werte? Wie groß sollte dann das Array sein. Doch min so groß wie die Zahl Ziffern hat oder?
Matthias Laubnitz wrote: > @Sven P. > das ändert leider nichts > > Aber sagt mal was kann die itoa Funktion den alles auch 32Bit Werte? Nicht in der Version, die mit der AVR-libc kommt, bei der ist int 16 Bit breit. Wenn es mehr sein soll, musst Du z.B. ultoa (unsigned long to ascii) benutzen. > Wie > groß sollte dann das Array sein. Doch min so groß wie die Zahl Ziffern > hat oder? Plus den Nullterminator und ein eventuelles Vorzeichen (in Deinem Fall aber irrelevant, da alle Werte positiv). Wenn sowieso alle Werte positiv sind, benutze besser utoa anstelle von itoa. Das ist auf unsigned int ausgelegt.
Danke für diese Information. War genau das was ich wissen wollte. Super Danke
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.