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
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).
>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
>Umrechnung dezimal zu ASCII unbekannt.
Irrelevant, da BASCOM eine "Print"-Funktion hat, die Zahlen in
ASCII-Zeichen wandelt und dann auf dem LCD anzeigt.
@ 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
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"
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
@ 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
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
>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ö.
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
Lustig, wie immer -350.0 auf dem LCD ausgegeben wird. Wieso ist das so?
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.
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.
$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
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.
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.
blablabla schrieb: > Nicht fragen. Machen (und zeigen) Das Hintereinanderausführen zweier linearer Funktionen wirst du doch wohl noch selber hinkriegen :-(
Uwe D. schrieb: > Ja dann stell doch mal Deinen Zwischenstand des Programms hier vor. Nach NEUN JAHREN sicherlich nicht.