ADC-Wert in Spannung umrechnen

Gast #2355795
Lesenswert?

Hallo,

ich habe an meinem Mikrocontroller eine ADC-Referenzspannung von 5V. Mit 
der Formel im Datenblatt beträgt meine anliegende Spannung also:

Da das LSB mit 4,88mV so ein blöder Wert ist, wäre meine Frage wie ihr 
das sonst immer implementiert bzw. an meiner Stelle umrechnen würdet?

Danke für Antworten...
Gast #2355815
Lesenswert?

Also ich verstehe noch nicht so ganz, wo die Reise hingehen soll.
Kurz: Es ist ein 10bit AD Umsetzer. Deine 4,88mV ist deine 
Quanisierungsstufe.
Was möchstest du nun genau? Möchstest du nun den Wert in Volt umrechnen?

Einfach ADCWert/1024 * 5V fertig.
Gast #2355838
Lesenswert?

Ja, möchte den Wert gerne in mV umrechnen.

Wenn ich das jedoch einfach so im Code eingebe, werden erst mal alle 
Bits auf Null gesetzt, wenn ich durch 1024 rechne.

Wenn ich den ADC-Wert einfach * 5mV (anstatt 4,88mV) nehme, bekomme ich 
allerdings ein "recht hohe" Abweichung, die ich gerne vermeiden würde.
Persönliche Seite #2355841
Lesenswert?

neunfuenfundneunzig schrieb:
> Hallo,
>
> ich habe an meinem Mikrocontroller eine ADC-Referenzspannung von 5V. Mit
> der Formel im Datenblatt beträgt meine anliegende Spannung also:
>
>
>
>
> Da das LSB mit 4,88mV so ein blöder Wert ist, wäre meine Frage wie ihr
> das sonst immer implementiert bzw. an meiner Stelle umrechnen würdet?
>
> Danke für Antworten...

Wie DU schon erfahren hast, ist Deine Fragestellung undurchsichtig.
Solltest Du einen "runden" Wert pro Digit/Bit des ADC - weshalb auch 
immer - haben wollen, dann musst Du eben ein bischen Mathe programmieren 
oder eine andere Referenzspannung nehmen....


Bitte auch beim Fragen stellen das Hirn einschalten.


Gruss

Michael
Gast #2355851
Lesenswert?

Dann rechne doch mit 488 und shifte anschließend. Kommt halt darauf an, 
was für einen Wertebereich deine Variable hat. Du kannst die Zahl ja 
auch vergößern z.B. 8bit in 16bit durch Splittung in LSB und MSB
Gast #2355896
Lesenswert?

Warum denn alles so kompliziert ??

Ich gehe einmal davon aus, daß Du in C programmierst.

Du definierst dann Vin als float-Variable und programmierst einfach:

Vin = adcwert / 1024.0 * 5;

und schon hast Du das Ergebnis exakt in V, nimmst Du es dann noch * 1000 
so hast Du es in mV.

Dein Fehler war:  adcwert / 1024

da adcwert vermutlich eine int-Variable ist im Berech von 0 ... 1023 bei 
einem 10-Bit Wandler, dann ergibt die Division durch 1024 IMMER 0, da 
der Compiler das als int-Division auffast.

Carlos
Gast #2355905
Lesenswert?

Das ist ja das Problem, was bereits angedeutet wurde, dass er hierzu zu 
wenig Info bereit gestellt hat und die Antworten mehr auf Vermutungen 
beruhen. Aber das ist das was ich meinte mit Wertebereich der Variable.
#2355936
Lesenswert?

Grundlagen Grundlagen Grundlagen!

Welchen Variablentyp benutzt du?
Welchen Wertebereich hat der?
Was passiert wenn du durch eine Multiplikation den Wertebereich 
überschreitest?
Was passiert bei Ganzzahlenvariablen wenn du dividierst.

Programmieren ist halt mehr als Codeschnipsel aus dem Internet 
zusammenzusetzen.
Moderator (Firma: Titel) Persönliche Seite #2355979
Lesenswert?

Carlos schrieb:
> Du definierst dann Vin als float-Variable und programmierst einfach:
Und das am besten auf einem Popel-uC wie einem ATtiny10 mit 512 Bytes 
Codespeicher. Und die Ausgabe wird dann mit printf() gemacht...  :-o

> Vin = adcwert / 1024.0 * 5;
> und schon hast Du das Ergebnis exakt in V,
> nimmst Du es dann noch * 1000 so hast Du es in mV.
Was spricht gegen eine Lösung, die mit 5000 multipliziert und dann durch 
1024 teilt? Das lässt sich nämlich sehr effizient ganz ohne Division 
implementieren...

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