ADC Vergleichen und Variable ändern

OP #2061865
Lesenswert?

Hallo alle zusammen,

hab da so ein Problem ich arbeite mit Bascom an dem  Abschlussprojekt 
meiner Ausbildung und Zwar einer digitalen temperatur regelnden 
Lüftersteuerung mit einstellbaren Hysterese werten.
die werte dollen über eine LCD ausgegeben werden.
Ich verwende einen LM235 um die Temperatur zu Messen die Spg des LM 
halbiere ich über einen Spgteiler und Wandle ihn über den ADC Wandler 
des Atmegas 8 um.
die Messung und die Ausgabe funktioniert auch wunder bar nur muss ich um 
die Temperatur anzuzeigen muss ich den Binärwert durch einen wert teilen 
nur ändert sich der Faktor durch den ich Teilen muss und ich weiß nur 
nicht so recht wie ich das anstellen soll. Programm lade ich mit hoch 
sowie das Datenblatt des LM235.

Danke schon mal Knut
Angehängte Dateien:
(Firma: Anscheinend Corner-Cases ;-)) #2061894
Lesenswert?

G. Matthias schrieb:
> Hallo alle zusammen,
>
> hab da so ein Problem ich arbeite mit Bascom an dem  Abschlussprojekt
>...
> die Temperatur anzuzeigen muss ich den Binärwert durch einen wert teilen
> nur ändert sich der Faktor durch den ich Teilen muss und ich weiß nur
> nicht so recht wie ich das anstellen soll...
>
>
Hallo,

ich bin jetzt etwas verwirrt, Teilen => Faktor.
Im Kopf habe ich noch
Divident dividiert durch Divisor gleich Wert des Quotienten.
Hoffe dennoch wir beide meinen das gleiche.

Egal, da gibt es doch so Sachen wie IF... THEN.
Ich meine, wenn die Bedingung ( IF ) für diesen ?Faktor?
gegeben ist,( THEN ) dann lädst Du halt die Variable mit diesem Faktor.

ldi Divisor,Wert_1 ;Das ist Asssembler von Bascom habe ich keine Ahnung.

Also, im THEN Programmabschnitt für diesen Faktor - lädst Du halt die 
Variable die ich Divisor genannt habe, mit dem Wert_1.

Falls der Divisor ein anderer sein soll, dann wird halt die nächste
IF... THEN... Sache abgearbeitet. Sprich

ldi Divisor,Wert_2 usw.

Bernd_Stein
OP #2061911
Lesenswert?

moin


>Hallo,

>ich bin jetzt etwas verwirrt, Teilen => Faktor.
>Im Kopf habe ich noch
>Divident dividiert durch Divisor gleich Wert des Quotienten.
>Hoffe dennoch wir beide meinen das gleiche.
hass ja recht

das hab ich auch schon ausprobiert hab den binären wert genommen wollte 
es eigendlich so machen das ich den wert wann das if losgehen soll 
ändere und den Wert durch den die Binärzahl geteilt wird. hab ein 
Temperatur bereich von ca 70° C das heist 700 if befehle(wenn ich bei 
jedem ° den divisor ändere,was erforderlichwäre)  das ist bissi viel 
find ich.
Ne idee wie der IF befehlt aus sehen könnte
B=606

If A > B Them
   D=D /1,14
   B=B + 5

aber dann wird B ja oben wieder zurück gesetzt auf 606
Gruß knut
#2061922
Lesenswert?

G. Matthias schrieb:
> moin
>
>
>>Hallo,
>
>>ich bin jetzt etwas verwirrt, Teilen => Faktor.
>>Im Kopf habe ich noch
>>Divident dividiert durch Divisor gleich Wert des Quotienten.
>>Hoffe dennoch wir beide meinen das gleiche.
> hass ja recht
>
> das hab ich auch schon ausprobiert hab den binären wert genommen wollte
> es eigendlich so machen das ich den wert wann das if losgehen soll
> ändere und den Wert durch den die Binärzahl geteilt wird. hab ein
> Temperatur bereich von ca 70° C das heist 700 if befehle(wenn ich bei
> jedem ° den divisor ändere,was erforderlichwäre)  das ist bissi viel
> find ich.

Find ich auch.
Es wird doch irgendeinen mathematischen Zusammenhang geben!

> Ne idee wie der IF befehlt aus sehen könnte

Nein.
AUs deinem Gestammel kann man noch nicht einmal erkennen warum 
eigentlich durch immer irgendetwas anderes dividiert werden soll.
Noch nicht mal dann, wenn ich deinen anderen Thread mit dazu nehme.

Formuliere deine Frage erst einmal ordentlich und gib alle relevanten 
Details
OP #2061929
Lesenswert?

na dann

also an meinem LM fallen bei 20° 2,932V ab über den Spg teiler wird sie 
halbiert 1,466 Vref = ",485

ADC= VIn * 1024 /2,485 = 604

SO 604 ist mein wert für 20 ° ich will auf meinem Display auch 20 ° 
stehen haben nicht 604 604 /20 = 30,2 .

für 21° ist mein binäre wert  V in = 2,942/2 =1,471V   Vin * 1024 / 
2,485 = ADC = 606  jetzt brauch ich wieder den Temp wert durch 30,2 sind 
das ?

Richtig 20,066
also 606 / 21 =28,86 dieser wert ist  also um 95,55% kleiner das ist die 
Änderung die ich in dem Divisor habe ?

ist mein Gestammel jetzt einleuchtend??
#2061942
Lesenswert?

G. Matthias schrieb:

> also an meinem LM fallen bei 20° 2,932V ab über den Spg teiler wird sie
> halbiert 1,466 Vref = ",485
>
> ADC= VIn * 1024 /2,485 = 604
>
> SO 604 ist mein wert für 20 ° ich will auf meinem Display auch 20 °
> stehen haben nicht 604 604 /20 = 30,2 .
>
> für 21° ist mein binäre wert  V in = 2,942/2 =1,471V   Vin * 1024 /
> 2,485 = ADC = 606  jetzt brauch ich wieder den Temp wert durch 30,2 sind
> das ?
>
> Richtig 20,066
> also 606 / 21 =28,86 dieser wert ist  also um 95,55% kleiner das ist die
> Änderung die ich in dem Divisor habe ?
>
> ist mein Gestammel jetzt einleuchtend??

Nein.
Aber ich denke du bist auf der Suche nach einer linearen Gleichung und 
nicht einfach nur nach einer Division.


   Temp = ADC_Wert * Konstante + Offset

Du kennst 2 Wertepaare
  Bei einem Messwert von 604   müssen 20 rauskommen
  Bei einem Messwert von 606   müssen 21 rauskommen

Also

  20 = 604 * k + d
  21 = 606 * k + d

das sind 2 Gleichungen in 2 Unbekannte und das kann man lösen und so die 
Konstante k und den Offset d bestimmen. (Und wenn deine Kalibrierwerte 
weiter auseinander liegen würden, wäre es noch besser. Einen 
Wertepärchen für 0° [Eiswasser] und eines bei 100° [Kochendes Wasser] 
wäre besser)

Und da das deine Abschlussarbeit ist, werde ich dir das hier nicht 
vorrechnen.
OP #2061989
Lesenswert?

Also 100° sind 3,732
also ist mein Binärer wert 768,92 = 769 da es keine Kommastellen gibt
0° sind 2,732
also 562,89 = 563

100° = 769 * k + d   (-d
100-d = 769*k          (/100
- d = 769*k / 100


100 = 769 *k - 769*k/100 ( *100
10000=769*k*100-769*k    (/k
10000/k = 769*100-769
10000/k=  76131          (/ 10000
1/k    = 76,131          (^-1
 k     =  0,0131
100    = 769*k+d
100    = 10,07+d         ( - 10,07
89,3   = d


0° = 563 *k + d
0  = 7,375 +d
d= -7,375

Meintest du das so ja das heißt bei 100° Temperatur Änderung wird d um 
96,67
größer oder kleiner
Gast #2062052
Lesenswert?

G. Matthias schrieb:
> Meine Frage ist jetzt wie ich das um setztn kann das ich den faktro
> änder ohne jeden einzelnen binären wert in einer If Verknüpfung
> abzufragen braucht  ganz schön viel Rechen zeit 700 if befehle ab zu
> arbeiten.
Oh Mann! Hast du in Deutsch gefehlt oder bist du besoffen? Du willst 
doch was von uns, dann formulier deine Anfrage gefälligst vernünftig!
OP #2062079
Lesenswert?

Wie Schreibe ich eine If Verknüpfung die es schaft den Divisor und sich 
selbst in Abhängigkeit der Temperatur hoch oder runter zu setzten?

@g_ast
Vernünftig genug??
Wenn wir jetzt kleinlich werden es heißt es formuliere und nicht 
formulier  also erst mal an die eigene Nase packen bevor man jemanden 
anderen wegen etwas verurteilen will .
Gast #2062094
Lesenswert?

Ich verstehe nicht was du dauernd mit der if-Verknüpfung willst?
(wäre sowieso eine if-Abfrage!)

Bei Temperaturfühlern, welche auch immer, kann man meist eine Gerade 
über die Kennlinie legen.
Also: Geradengleichung für deinen Fühler aufstellen und gut ists!

z.B:

Offset = xxxxx;
Steigung = yyyy;

Temperatur = (ADU_Wert * Steigung) + Offset;
Gast #2062104
Lesenswert?

G. Matthias schrieb:
> @g_ast
> Vernünftig genug??
> Wenn wir jetzt kleinlich werden es heißt es formuliere und nicht
> formulier  also erst mal an die eigene Nase packen bevor man jemanden
> anderen wegen etwas verurteilen will .

Sei froh dass ich hier kein Mod. bin!

Darf ich mal entschlüsseln? Der Mensch hat keine Ahnung und schreibt 
jetzt so lange wirres Zeug bis ihm jemand eine fertige Lösung serviert.

plonk
#2062107
Lesenswert?

Hallo,

vielleicht habe ich oben zu undeutlich geschrieben:
der LM235 ist misst LINEAR mit 10mV/Grad Kelvin!

mit seinem Spannungsteiler (wozu???) bekommt er dann eben 10mV/2 Grad 
Kelvin.

Also ohne Teiler (U lm235 - 2732mV) = Temperatur in 1/10 Grad Celsius.
Mit seinem Teiler dann eben (U lm235 - (2732/2)) = Temperatur in 1/5 
Grad Celsius.

Gruß aus Berlin
Michael
Gast #2062115
Lesenswert?

> Weil ich seit 2 Wochen mit Bascom arbeite und noch nie was von Offset
> gehört habe.

> und der ADU_wert meinst du welchen wert Binär oder Dezimal.

Das muss man sich mal auf der Zunge zergehen lassen...

:-(
Gast #2062118
Lesenswert?

>ADU_wert meinst du welchen wert Binär oder Dezimal.

Ich glaube dir fehlt noch einiges an Verständnis.


Mit Offset meinte ich, dass du vermutlich nicht 0V bei 0°C hast.
Wenn du eh 10mV/°C hast ist das Ding ja linear!

Also wo ist das Problem?
Das hat nichts mit BASCOM zu tun, sondern mit y= mx +b .
9. Klasse mal gelernt...
Gast #2062136
Lesenswert?

>Wie man eine Linearen Grafen berechnet ist mir klar nur die Befehle
>waren unklar okay.

Befehle?
Du brauchst eine Addition und eine Multiplikation.


Aber mach dir nichts draus, es gibt viele Erstsemestler die keine 
Geradengleichung aufstellen können.
OP #2062145
Lesenswert?

Es geht nur um den Befehl den ich in Bascom brauche wie ich einen 
Gottverdammten Linearen Grafen berechne weiß ich F (x) = mx + b

B ist der Punkt an dem der Graf die y schneidet m die Steigung und X 
der wert auf der X Achse  ,soll ich auch noch erklären wie man eine 
Parabel berechnet bevor ihr mich weiter für blöd verkauft.
Gast #2062156
Lesenswert?

G. Matthias schrieb:
> Es geht nur um den Befehl den ich in Bascom brauche wie ich einen
> Gottverdammten Linearen Grafen berechne weiß ich F (x) = mx + b
Dann guck in die gottverdammte Doku oder frag Google und belästige uns 
nicht weiter! RTFM

Kann das mal einer zumachen? Ist ja nicht zu glauben!
(Firma: Anscheinend Corner-Cases ;-)) #2062243
Lesenswert?

Justus Skorps schrieb:
> G. Matthias schrieb:
>> und der ADU_wert meinst du welchen wert Binär oder Dezimal.
>
> sowas tut immer wieder weh...

Hallo,

da hast Du recht.
Aber ich meine deine Antwort und nicht seine Frage.




Okay,
die Experten hier im Forum dürften erkannt haben, was er vor hat und wo 
im Moment sein Problem liegt. Für die anderen, will ich es mal mit 
meinen Worten versuchen zu formulieren.

Mit einem ATMega8, LM235, LC-Display und noch anderen Hardwarezutaten 
möchte oder muß G. Mattias alias knut89
eine Lüftersteuerung realisieren. Der Temperaturbereich für den Fühler 
liegt zwischen 0° Celsius und 70° Celsius.

Im Moment hat er ein Problem damit, die vom AD-Wandler eingelesene 
Spannung als Grad Celsius auf dem LC-Display korrekt anzuzeigen.

Der LM235 erzeugt z.B. bei 20°C eine Spannung von 2,932 Volt.
Über einen Spannungsteiler, welcher diese Spannung halbiert bekommt der 
interne AD-Wandler des ATmega8 deshalb an seinem Analogeingang Vin eine 
Spannung von 1,466 Volt ( Spannung des LM234 dividiert durch zwei ).

Die Eingangsspannung Vin am AD-Wandler wird in folgender Gleichung als 
Zahlenwert umgewandelt.

ADC = Vin * 1024/2,485

Als Zahlenwert erhält man nun 604.
Zum Beispiel soll dieser Zahlenwert 604 nun in die Temperatur überführt 
werden und dann auf dem LC-Display als   " 20°C " erscheinen.


Schade das ich da von zu wenig Ahnung habe,
aber für einige Experten hier im Forum dürfte das mit Leichtigkeit zu 
machen sein. Nur ist hier das Problem, es einem anderen auch Vermitteln 
zu können, wie man so etwas macht.

Ich klinke mich jetzt hier aus, da ich weder das eine, noch das andere 
behersche.

Bernd_Stein
OP #2068574
Lesenswert?

Also Lösung für dieses Problem ist wie oben schon von vielen gesagt die 
Formel y=mx+b.

Nur muss
y der Bit wert sein
m die Steigung
X die Temperatur
b Der Offset (der y-Wert an dem X=0 ist)

Um die Temperatur zu berechnen muss ich also nach X umstellen lautet die 
Formel also

X = (y-b)/m
und das ist es

Lb1 = Adcl                               'Abfrage des Lowbits
Hb1 = Adch                                     'Abfrage des Highbits
Hb1 = Hb1 And &B00000011
'Highbit mit 3 und verknüpfen um eventuele Störsignale ich ein zu 
Beziehen
Hb1 = Hb1 * 256                   'High bit * 256 um  1023 bit zu 
bekommen

A = Lb1 + Hb1                    'Variable A = Gesamt bit High- und 
Lowbit
D = A * 100          'Umwandlung von A für die Berechnung der Temperatur
Y = D - C

X = Y / B

Wenn noch fragen bestehen fragen.

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