ADC Atmega88

Gast #2097490
Lesenswert?

Hallo

Jungs, habe ein Programm geschrieben, der mir 3 spannungegn misst und 
diese in einer Berechnung einbezieht und anschliessend an PC übertrage.
nun habe ich ich eine schwankende Messung, mal richtig mal falsch, 
obwohl meine Eigangsspannungen alle relativ konstant sind.

Nun habe ich die Bitte, ob jemand mal schauen kann, ob ich den 
integreirten Adc richtig verwende, besonders ob die Anweiseung für den 
ADMUX in der richtigen Stelle steht.Wäre auch dankbar für Andare 
Hinweise bezüglich des Programms.
Das Programm findt ihr im Anhang, ich verwende ein Atmega88

Danke im Voraus

Pedro
Angehängte Dateien:
Gast #2097518
Lesenswert?

Hallo!

Mein erster Gedanke war die Übertaktung des ADCs. Der Teiler steht auf 
32, was bei den im Quelltext angegebenen 3,072MHz richtig gewählt ist. 
Allerdings ist diese Frequenz ziemlich exotisch. Prüfe deshalb bitte 
zuerst, ob Du wirklich diese Taktung benutzt und nicht etwa den internen 
RC-Oszillator mit 8MHz, denn damit würdest Du übertakten und ein 
instabiles Wandeln provozieren.

Gruß - Wolfgang
#2336298
Lesenswert?

Du rechnest da

     a=1-(((Vml/Vms2)-1)/((Vml/Vms1)-1));

      b=((Vml/Vms2)-1)*((1/(Rsa*((Vml/Vms1)-1)))-(1/Rsi));

      c=((Rma*Rsa*((Vml/Vms2)-1))-Rsi*Rsa-Rsi*Rma)/(Rsi*Rma*Rsa);


      t=b+c;

        Rka=a/t;

ziemlich blauäugig drauf los.
Hast du schon versucht, ob du mathematisch diesen Formalismus noch 
vereinfachen kannst? Dinge zusammenziehn, Brüche auflösen, Doppelbrüche 
auflösen etc. Solange bis du alles in nur einer Formel beisammen hast.

Floating Point rechnen ist wie das Umschaufeln von Sand.
Mit jeder Operation verliert man ein bischen Sand und gewinnt ein 
bischen Schmutz dazu. Je weniger Operationen, desto reiner bleibt der 
Sand.
#2336821
Lesenswert?

@Karl Heinz Buchegger

hast recht, auf den ersten Blick sieht das ziehmlich wuest aus.

Beim naeheren hinschauhen, sieht man das es schon zusammengefasst und 
c-Code optimiert ist.

@Anfänger

Das Datenblatt sagt, so in etwa,  dass man nach Aenderungen am MUX 
(Kanalwechsel) die erste Messung wegschmeissen soll.

So wie Du das machst, beziehst Du den Muell nach der Kanalumschaltung 
mit in Deine Mittelwertberechnung ein.
Keine Ahnung ob das bei 18 Messungen ins Gewicht faellt.

anderer Tip: bei 2^x Messungen reicht ein >> (right shift) fuer die 
Division.

Ju
#2336893
Lesenswert?

Juergen G. schrieb:
> @Karl Heinz Buchegger
>
> hast recht, auf den ersten Blick sieht das ziehmlich wuest aus.
>
> Beim naeheren hinschauhen, sieht man das es schon zusammengefasst und
> c-Code optimiert ist.

Ich weiss nicht, wie und wo du dir das angesehen hast. Aber diese 
Variablen sind durchgehend double und volatile. Wenn der Compiler da 
grossartig optimiert dann ist er fehlerhaft. Denn genau das darf er 
nicht.


> anderer Tip: bei 2^x Messungen reicht ein >> (right shift) fuer die
> Division.

Der Tip mit der 2-er Potenz ist gut. Aber den Shift lass besser den 
Compiler ersetzen.
#2337006
Lesenswert?

oben geschriebenes bezog sich auf folgende Aussage von Dir.

[schnipp]
>
> ziemlich blauäugig drauf los.
> Hast du schon versucht, ob du mathematisch diesen Formalismus noch
> vereinfachen kannst? Dinge zusammenziehn, Brüche auflösen, Doppelbrüche
> auflösen etc. Solange bis du alles in nur einer Formel beisammen hast.

Ju

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