Analog Digital Wandler

Gast #5121143
Lesenswert?

Hallo Forum,

möchte ein Analogsignal(0-5V) mit 8bit digitalisieren.
Somit erhalte ich bei 5V 1111 1111 und bei 0V 00000000.
Wie mache ich das jetzt am besten wenn ich bei 5V
einen Digitalwert von 80(Temperaturwert) und bei 0V 10(Temperaturwert) 
erhalten möchte?

Grüsse Thomas
#5121163
Lesenswert?

mitti schrieb:
> möchte ein Analogsignal(0-5V) mit 8bit digitalisieren.
> Somit erhalte ich bei 5V 1111 1111 und bei 0V 00000000.

Gibt es einen besonderen Grund, warum du diese Werte in der 
Binärdarstellung schreibst?

> Wie mache ich das jetzt am besten wenn ich bei 5V
> einen Digitalwert von 80(Temperaturwert) und bei 0V 10(Temperaturwert)
> erhalten möchte?

10 und 80 was? Äpfel, Birnen? Oder doch eher °C?

Durch umrechnen? Male ein Diagramm: x-Achse ist der ADC-Wert, y-Achse 
die Temperatur. Du hast bereits zwei Punkte in diesem Diagramm. Je 
nachdem, welche Kennlinie dein Temperatursensor hat, mußt du da jetzt 
eine Gerade oder eine passend gekrümmte Kurve durchlegen.

Falls dein Problem ist, die Formel für die Gerade herauszubekommen - das 
ist Mathe-Stoff ca. 8. Klasse.
#5121175
Lesenswert?

Route 6. schrieb:

>>das ist Mathe-Stoff ca. 8. Klasse.
> In Bayern? Normalerweise gibt es das spätestens in der Sechsten.

Leider nicht nur in Bayern, sondern z.B. auch in Hessen. Ich gebe den 
Nachbarskindern hin und wieder Mathe-Nachhilfe. Die Große ist jetzt in 
der 7. Klasse und weit und breit nichts von linearen Funktionen in Sicht 
<seufz>. Eine kurze Google-Suche meint, das wäre Stoff für die 8. 
Klasse.
#5121249
Lesenswert?

So ein blödes Geschwätz! Bloß keine Hilfe leisten -aber grienend Leute 
verarschen....

@TO

Du mußt den Zusammenhang zwischen der Spannung (die in festem 
Zusammenhang zur Temperatur steht) und dem Anzeigewert herstellen:

Anzeigewert=(Spannungswert*14)+10

Bei Null Volt: Anzeigewert=(0*14)+10    ->  ist 10
Bei Fünf Volt: Anzeigewert=(5*14)+10    ->  ist 80

-Feldkurat-
Gast #5121300
Lesenswert?

Wobei Du natürlich 0..255 bekommst, die in ein Byte passen.

Zur Umrechnung brauchst idealerweise einen mindestens 2-Byte-Wert. Das 
ist kein Problem, wenn der Compiler "integral Promotion" nicht 
abschaltet

Lineare Skalierungen (aus einem x wird ein y) laufen immer in folgender 
Form ab: y = mx+b; mit m=Steigung (Multiplikator) und b=Basis.

Rein technisch kann man auch y=m(x+b) rechnen, dann haben m und b andere 
Zahlenwerte.

Wenn Du mit Integer-Zahlen rechnen willst, dann wird noch ein Divisor 
gebraucht, meist eine Potenz von 2, z.B. 256, da der µC dann ggf. nicht 
rechnen braucht, also: y = (mx+b)/256

Die Koeffizienten bestimmt man durch Lösung linearer Gleichungen, was in 
diesem Fall (ein Wert ist 0) auch einfacher geht. Zuerst Umstellen, dann 
die Wertepaare (x=0->y=10, x=255->y=80) einsetzen
1
256*y = mx+b
2
256*10= m*0+b   -->  2560=b
3
256*80= m*255+b --> 20480=m*255+2560 --> 17920 = 255*m --> 70 = m

Die Rechnung im Controller ist also: Temperatur=(70*ADWert()+2560)/256;
Beitrag #5121338 wurde von einem Moderator gelöscht.
(Firma: keine) #5121341
Lesenswert?

Feldkurat K. schrieb:
> So ein blödes Geschwätz! Bloß keine Hilfe leisten -aber grienend Leute
> verarschen....

Hmmm...
Es gab doch Hinweise wie das Problem zu lösen ist. Und "verarscht" wurde 
auch niemand.

Feldkurat K. schrieb:
> Du mußt den Zusammenhang zwischen der Spannung (die in festem
> Zusammenhang zur Temperatur steht) und dem Anzeigewert herstellen:
>
> Anzeigewert=(Spannungswert*14)+10
>
> Bei Null Volt: Anzeigewert=(0*14)+10    ->  ist 10
> Bei Fünf Volt: Anzeigewert=(5*14)+10    ->  ist 80

Von allen Antworten die gegeben wurden ist diese am wenigsten zu 
gebrauchen weil leider falsch!

Richtige Antwort siehe Achim S.
#5121524
Lesenswert?

Co E. schrieb:
> Von allen Antworten die gegeben wurden ist diese am wenigsten zu
> gebrauchen weil leider falsch!

Erklärst Du bitte mal, was daran falsch ist? Meine Lösung ist nämlich 
genau die, die Achim später beschrieb.

Achim S. schrieb:
> Lineare Skalierungen (aus einem x wird ein y) laufen immer in folgender
> Form ab: y = mx+b; mit m=Steigung (Multiplikator) und b=Basis.

-Feldkurat-
(Firma: keine) #5121678
Lesenswert?

Feldkurat K. schrieb:
> Erklärst Du bitte mal, was daran falsch ist? Meine Lösung ist nämlich
> genau die, die Achim später beschrieb.

Na klar! ;-)

Feldkurat K. schrieb:
> Achim S. schrieb:
>> Lineare Skalierungen (aus einem x wird ein y) laufen immer in folgender
>> Form ab: y = mx+b; mit m=Steigung (Multiplikator) und b=Basis.

Soweit richtig.
Gesucht sind m und b

Lösung Feldkurat (falsch):
m=5
b=10

Lösung Achim (richtig):

Achim S. schrieb:
> 256*y = mx+b
> 256*10= m*0+b   -->  2560=b
> 256*80= m*255+b --> 20480=m*255+2560 --> 17920 = 255*m --> 70 = m
>
> Die Rechnung im Controller ist also: Temperatur=(70*ADWert()+2560)/256;

Einwände ;-)
(Firma: keine) #5121696
Lesenswert?

Feldkurat K. schrieb:
> Co E. schrieb:
>> Einwände ;-)
>
> Gesucht ist vom TO die Formel, die er direkt benutzen kann. Die habe
> ich geliefert und sie bringt die gesuchten Resultate.
>
> Willst Du mir ein Ohr abkauen -oder wie?
>

Hmmm?

Die Formel ist richtig, die Berechnung von m und b ist falsch. Du hast 
mit dem Spannungswert gerechnet. Den hat der TO in der Form nicht. 
Richtig wäre es gewesen mit dem AD-Wert zu rechnen. Sonst kommt Murks 
heraus.

Okay?
#5121759
Lesenswert?

Co E. schrieb:
> Feldkurat K. schrieb:
>> Erklärst Du bitte mal, was daran falsch ist? Meine Lösung ist nämlich
>> genau die, die Achim später beschrieb.
>
> Na klar! ;-)
>
> Feldkurat K. schrieb:
>> Achim S. schrieb:
>>> Lineare Skalierungen (aus einem x wird ein y) laufen immer in folgender
>>> Form ab: y = mx+b; mit m=Steigung (Multiplikator) und b=Basis.
>
> Soweit richtig.
> Gesucht sind m und b
>
> Lösung Feldkurat (falsch):
> m=5
> b=10

m = 5?

> Bei Null Volt: Anzeigewert=(0*14)+10    ->  ist 10
> Bei Fünf Volt: Anzeigewert=(5*14)+10    ->  ist 80

m = 14

> Lösung Achim (richtig):
>
> Achim S. schrieb:
>> 256*y = mx+b
>> 256*10= m*0+b   -->  2560=b
>> 256*80= m*255+b --> 20480=m*255+2560 --> 17920 = 255*m --> 70 = m
>>
>> Die Rechnung im Controller ist also: Temperatur=(70*ADWert()+2560)/256;

Mal 255 für ADWert einsetzen... wenn man's mit Fließkommazahlen rechnet 
kann man's nachher passend runden, mit reiner Integerrechnung landet man 
bei 79...

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