Forum: Mikrocontroller und Digitale Elektronik Volt-Celsius umrechnen mit Bascom


von Jey B. (jeybee)


Lesenswert?

Hallo Leute,

Ich hab ein Problem, zwar habe ich einen LM335 per Spannungsteiler 
(Festwiederstand ist 2.2kOhm) mit dem Portc.2 (ADC2) Pin eines Atmega48 
verbunden. Später soll die Temperatur über ein bereits angeschlossenes 
LCD display in °C ausgegeben werden.

Jedoch habe ich keinen Plan, wie ich diese Volt Zahl in °C umrechnen 
kann. Das ganze kann von mir aus um bis zu 3-5°C ungenau sein. Mein 
Sensor bringt bei 25°C genau 3.75 Volt und erhöht 10mV/K bzw. 
verringert. Diese Daten habe ich im Exel als Tabelle eingegeben und 
berchnen lassen.

Ich habe die SuFu benutzt und gegoogelt, da habe ich dutzende Beiträge 
gefunden, jedoch nichts das funktionierte.

Könnt ihr mir bitte helfen?


Mfg JeyBee

: Gesperrt durch User
von STK500-Besitzer (Gast)


Lesenswert?

1. Du mußt die Spannung mit dem AD-Wandler digitalisieren.
2. Da du natürlich die Referenzspannung weißt, weißt du auch, welchen 
Wert der ADC bei welcher Spannung liefert.
3. Aus dem ADC-Wert berechnest du die Temperatur (wahlweise in °C, °F 
oder K).

von dummy (Gast)


Lesenswert?

>Ich hab ein Problem, zwar habe ich einen LM335 per Spannungsteiler
>(Festwiederstand ist 2.2kOhm) mit dem Portc.2 (ADC2) Pin eines Atmega48
>verbunden. Später soll die Temperatur über ein bereits angeschlossenes
>LCD display in °C ausgegeben werden.

Festwiderstand heißt das. Typisches Bascom User Problem.
Mathe Note 5. Umrechnung dezimal zu ASCII unbekannt.
Tss, tss, tss

von HildeK (Gast)


Lesenswert?

In deinem Fall:
(Umess - 3.5V) * 100 => Temp. in °C

von STK500-Besitzer (Gast)


Lesenswert?

>Umrechnung dezimal zu ASCII unbekannt.

Irrelevant, da BASCOM eine "Print"-Funktion hat, die Zahlen in 
ASCII-Zeichen wandelt und dann auf dem LCD anzeigt.

von Falk B. (falk)


Lesenswert?

@ Joel Bodenmann (jeybee)

>Ich hab ein Problem, zwar habe ich einen LM335 per Spannungsteiler
>(Festwiederstand ist 2.2kOhm) mit dem Portc.2 (ADC2)

Nie wieder Wiederstand! ;-)

>Jedoch habe ich keinen Plan, wie ich diese Volt Zahl in °C umrechnen
>kann.

Siehe Festkommaarithmetik.

> Das ganze kann von mir aus um bis zu 3-5°C ungenau sein. Mein
>Sensor bringt bei 25°C genau 3.75 Volt und erhöht 10mV/K bzw.

Dann wäre er kaputt. Der LM335 bringt bei 25C ca. 2,98V, nämlich die 
Temperatur in Kelvin * 10mV/K.

http://de.wikipedia.org/wiki/Kelvin_(Einheit)

>verringert. Diese Daten habe ich im Exel als Tabelle eingegeben und
>berchnen lassen.

Dann hast du dich verrechnet. Oder Excel wars, ist ja von Microsoft.

>Ich habe die SuFu benutzt und gegoogelt, da habe ich dutzende Beiträge
>gefunden, jedoch nichts das funktionierte.

"nichts, was funktionierte"

1. Schritt ADC-Wert in Spannung umrechnen, siehe obigen Link.
2. Schritt Spannung in Temperatur umrechnen, sollte auch nicht sooo 
schwer sein.

MFG
Falk

Könnt ihr mir bitte helfen?


Mfg JeyBee

von Klaus (Gast)


Lesenswert?

es gibt 3 Vatianten.

1.) "Exel" Tabelle in den EEProm bewegen und auf deinem Mega8
    "Exel" installieren. (sehr einfach aber teuer)

2.) Messverstärker konstruieren, der die den U/T - Verlaufuf
    liniariesiet und anpasst, davorschalten.
    (mittelschwer, mittelteuer)

3.) dig. Wetterstation mit ext. Messfühler kaufen
    (billig und geht schnell)

man man man

Beitrag "Temperatur des PT100 mit Atmega8 in Bascom auf Display anzeigen"

von Jey B. (jeybee)


Lesenswert?

Bitte doch nicht kritisiern, ich bin doch noch am anfang :'(


Also, ich habe jetzt den ADC eingangswert in eine Spannung (Volt) 
umgerechnet. Ich weiss, es sollte ja nicht so schwer sein, ich kriege es 
aber trotzdem nicht hin. Wie kann ich das nun in einen Temperatur Wert 
umrechnen?


Sorry wegen den noob fragen, ist aber so :(



Mfg JeyBee

von Falk B. (falk)


Lesenswert?

@ Joel Bodenmann (jeybee)

>aber trotzdem nicht hin. Wie kann ich das nun in einen Temperatur Wert
>umrechnen?

Mit der Formel aus dem Dateblatt?

Den Rest solltest du selber hinkriegen, Formeln umstellen und so.

MFG
Falk

von Jey B. (jeybee)


Lesenswert?

Ich habe jetzt ein bissel dranne rumgenuckelt gg aber ich kriege es 
einfach nicht hin. Es tut mir leid. Kann mir nicht einfach jemand den 
Quelcode schreiben/schiken? Ich verspreche, ich bin das nächste mal auch 
ganz Brav :D


Mfg JeyBee alias Noob

von dummy (Gast)


Lesenswert?

>Ich habe jetzt ein bissel dranne rumgenuckelt gg aber ich kriege es
>einfach nicht hin.

Sach ich doch: Mathe 5

> Es tut mir leid. Kann mir nicht einfach jemand den
>Quelcode schreiben/schiken?

Nö.

von Olli R. (xenusion)


Lesenswert?

T_K=U/(10mV/K) und T_C=T_K-273,15

=> T_C=U/(10mV/K)-273,15

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Joel Bodenmann wrote:

> Also, ich habe jetzt den ADC eingangswert in eine Spannung (Volt)
> umgerechnet. Ich weiss, es sollte ja nicht so schwer sein, ich kriege es
> aber trotzdem nicht hin. Wie kann ich das nun in einen Temperatur Wert
> umrechnen?

>> Mein Sensor bringt bei 25°C genau 3.75 Volt und erhöht 10mV/K
>> bzw. verringert.

Temperatur = (Spannung - 3.75) / 0.01 + 25

oder Temperatur = 100*Spannung - 100*3.75 + 25

oder Temperatur = 100*Spannung - 100*3.50

oder (Spannung - 3.50) * 100 = Temperatur

Das hat dir aber HildeK schon geschrieben

> (Umess - 3.5V) * 100 => Temp. in °C

von JeyBee (Gast)


Lesenswert?

Lustig, wie immer -350.0 auf dem LCD ausgegeben wird.

Wieso ist das so?

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Temperatur = -350°C? Laut Gleichung muss dann Spannung gleich 0 sein.

Bist du sicher, dass du im Programm die Spannungsmessung (ADC Benutzung 
und Umrechnung des ADC Messwerts in einen Spannungswert) im Griff hast?

Du könntest mal die Variable mit der Spannung direkt aufs Display geben 
und nachsehen, ob der angezeigte Wert mit einer Multimetermessung am 
ADC-Pin in etwa übereinstimmt.

Beitrag #5242731 wurde von einem Moderator gelöscht.
von Uwe D. (monkye)


Lesenswert?

Jey B. schrieb:
> Ich habe jetzt ein bissel dranne rumgenuckelt gg aber ich kriege es
> einfach nicht hin. Es tut mir leid. Kann mir nicht einfach jemand den
> Quelcode schreiben/schiken? Ich verspreche, ich bin das nächste mal auch
> ganz Brav :D
>
>
> Mfg JeyBee alias Noob

Ja dann stell doch mal Deinen Zwischenstand des Programms hier vor. 
Einen Beitrag dazu musst Du schon abliefern, ansonsten wirst Du nicht 
mehr viel erwarten können.
Übrigens, es gibt ein Buch von Stefan Hoffmann zum Thema BASCOM - da 
findest Du genau solche Beispiele.

von Hugo (Gast)


Lesenswert?

$regfile = "m1280def.dat"                                   ' specify 
the used micro
$crystal = 16000000                                         ' used 
crystal frequency
$baud = 57600                                               ' used baud 
rate

$programmer = 13                                            ' MCS 
Bootloader

$hwstack = 40                                               ' default 
use 32 for the hardware stack
$swstack = 40                                               ' default 
use 10 for the SW stack
$framesize = 40                                             ' default 
use 40 for the frame space

$include "Pins_M1280.inc"                                   ' adaption 
to Arduino pin numbers

Config Io13 = Output
Config Adc = Single , Prescaler = Auto , Reference = Avcc

Const K0 = 273.15
Const K1 = 0.97

Dim Voltage As Single , Kelvin As Single , Celsius As Single
Dim Adc_value As Word , Channel As Byte
Channel = 0                                                 ' AIN0 used

Print "LM335 Temperature Measurement"

Do
   Io13 = 1
   Waitms 50
   Adc_value = Getadc(channel)
   Voltage = Adc_value * 5.
   Voltage = Voltage / 1024
   Voltage = Voltage * K1                              ' Voltage Divider 
for Calibration
   Kelvin = Voltage * 100
   Celsius = Kelvin - K0
   Print "ADC: " ; Adc_value ; Spc(3) ;
   Print "Voltage: " ; Fusing(voltage , "#.##") ; Spc(3) ;
   Print "Kelvin: " ; Fusing(kelvin , "#.##") ; Spc(3) ;
   Print "Celsius: " ; Fusing(celsius , "#.##")
   Io13 = 0
   Waitms 950
Loop

End

von Wolfgang (Gast)


Lesenswert?

Uwe D. schrieb:
> Ja dann stell doch mal Deinen Zwischenstand des Programms hier vor.

Ob Jey B. hier nach 9 Jahren noch mitliest und an dem Problem sitzt, 
wage ich mal zu bezweifeln.

Zum Programm:
Wozu werden die Daten eigentlich der Reihe nach durch zwei Mühlen 
gedreht. Das ist doppelte Arbeit.

Ok, irgendwie muss der µC beschäftigt werden :-(

Jeder vernünftig denkende Mensch würde im auszuführenden Code eine 
direkte Umrechnung von ADC-Werten in die gefragte °C-Temperatur 
implementieren - einen minimalen Willen zur Effizienz vorausgesetzt.

Die Zusammenfassung der Konstanten der beiden Skalierungen kann sonstwo 
(Stück Papier, Compiler) passieren, hat aber im auszuführenden Code 
nichts mehr zu suchen, insbesondere da es sich um Float Operationen 
handelt, die auf einem AVR recht teuer sind.

von blablabla (Gast)


Lesenswert?

Wolfgang schrieb:
> Zum Programm:
> Wozu werden die Daten eigentlich der Reihe nach durch zwei Mühlen
> gedreht. Das ist doppelte Arbeit.

Nicht fragen. Machen (und zeigen)

> Jeder vernünftig denkende Mensch würde im auszuführenden Code eine

Sehe ich von dir auch nicht.

von Wolfgang (Gast)


Lesenswert?

blablabla schrieb:
> Nicht fragen. Machen (und zeigen)

Das Hintereinanderausführen zweier linearer Funktionen wirst du doch 
wohl noch selber hinkriegen :-(

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Uwe D. schrieb:
> Ja dann stell doch mal Deinen Zwischenstand des Programms hier vor.

Nach NEUN JAHREN sicherlich nicht.

Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.