Analog Digital Wandler

Gast #5121143
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
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.
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.
Mitti schrieb:
> Ah ok, dann muss ich die werte mit einem uc umschreiben damit ich diese
> am lcd ausgeben kann!?

Wie dachtest Du denn die LCD-Ausgabe ohne MC?

Alternativ kannst Du aber auch vor dem ADC analog rechnen (mit OPV und 
Widerständen). Mit dem Ohmschen Gesetz tun sich aber viele schwer.
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
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)
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.
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)
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)
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?
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...
(Firma: keine)
Arc N. schrieb:
>> 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

Ärghs! Da hab ich mich vertippselt. Hast natürlich recht. Danke

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.