Forum: Compiler & IDEs Leider noch immer keine Lösung mit ADC


von Matthias L. (mcl024)


Angehängte Dateien:

Lesenswert?

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

von Sven P. (Gast)


Lesenswert?

Tipp am Rande:
Gugg mal nach loop_until_bit_is_set und benutze statt ADCH:ADCL nur ADC.

von holger (Gast)


Lesenswert?

>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?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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;

von Matthias L. (mcl024)


Lesenswert?

@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?

von Johannes M. (johnny-m)


Lesenswert?

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.

von Matthias L. (mcl024)


Lesenswert?

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
Noch kein Account? Hier anmelden.