avrflo
19.07.2005, 15:01
Hallo,
ich bin gerade dabei, mir eine Wetterstation mit zwei Tempsensoren (DS1820),
ner RTC (DS1307) und nem Drucksensor (MPX 4115 von Freescale) zu bauen. Nun funktioniert bis auf den Drucksensor alles soweit. Der Drucksensor gibt eine dem Druck proportionale Spannung aus, diese lese ich mit dem 10 bit ADC des mega8 aus. dann berechne ich den Druck mit Hilfe folgender Formel aus dem Datasheet:
P=((Vout/Vin)+0.095)/0.009
Ich nun bekomme ich immer einen viel zu niedrigen Luftdruck heraus:
Momentan zeigt mir mein Sensor ca 970 mbar an, laut der nächstgelegenen Wetterstation (Stuttgart-Flughafen:http://www.wetteronline.de/Baden-Wuerttemb/Stuttgart.htm)
müsste der jedoch bei ca 1019 mbar liegen.
Die Sensor- und die Eingangsspannung messe ich über einen 2,11:1 Spgteiler (82k:39k). Wenn ich nun mit meinem Multimeter die Spanungen nachmesse erhalte ich um ca 0.2V höhere Werte.
Hat jemand ne Idee, wo der Fehler liegen könnte?
Achja, hier noch der link zum Datasheet des Sensors:
http://www.freescale.com/files/sensors/doc/data_sheet/MPX4115A.pdf
Und hier noch mein Code, ich progge in BASCOM:
$regfile = "m8def.dat"
$crystal = 8000000
$baud = 9600
Config Lcd = 40 * 4
Config Lcdpin = Pin , Rs = Portb.6 , Db4 = Portb.7 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portb.1 , E2 = Portb.2
Config Adc = Single , Prescaler = Auto , Reference = Internal
Config 1wire = Portb.0
Dim Help As Single
Dim Help1 As Single
Dim Volt As Word
Dim ___lcdno As Bit
Dim Ar(2) As Integer
Dim T1 As Integer
Dim N As Byte
Dim I As Byte
Dim Luft As Word
Dim Luft2 As Single
Dim Temp As Single
Dim Bar1 As Single
Dim Volt1 As Single
Dim Luft1 As Single
___lcdno = 0
Initlcd
Cls
Cursor Off
___lcdno = 1
Initlcd
Cls
Cursor Off
Do
Start Adc 'adc werte für batteriespannung und mpx4115 auslesen
Luft = Getadc(0)
Volt = Getadc(1)
Stop Adc
Volt1 = Volt * 2.56 'batteriespannung Berechnen , 2:1 spgteiler
Volt1 = Volt1 / 1023
Help1 = Volt1 * 2.11111
Volt1 = Help1 + Volt1
Bar1 = Luft * 2.56 'Sensorspannung berechnen
Bar1 = Bar1 / 1023
Help = Bar1 * 2.13157
Bar1 = Bar1 + Help
1wreset 'temp aus ds1820 auslesen
1wwrite &HCC
1wwrite &H44
Waitms 200
1wreset
1wwrite &HCC
1wwrite &HBE
For I = 1 To 2
Ar(i) = 1wread()
Next
T1 = Ar(1) + Ar(2)
T1 = T1 / 2
Luft1 = Bar1 / Volt1 'druck aus sensor und eingangsspannung berechnen
Luft1 = Luft1 + 0.095
Luft1 = Luft1 / 0.009
Luft1 = Luft1 * 10
'empirisch ermittelte Abweichung vom Referenzwert
If N = 0 Or N = 1 Or N = 2 Or N = 3 Or N = 4 Or N = 5 Then 'Mittelwertbildung
Incr N
Luft2 = Luft2 + Luft1
Else
N = 0
Temp = Luft2 / 6
Luft2 = 0
End If
___lcdno = 0 'lcd ausgabe
Upperline
Lcd "Eingangsspannung: " ; Volt1
Lowerline
Lcd "Momentanwert P: " ; Luft1
___lcdno = 1
Upperline
Lcd "Spg sensor: " ; Bar1
Lowerline
Lcd "Mittelwert P: " ; Temp
'ausgabe über uart, nur versuchsweise
Print "Eingangsspannung :" ; Volt1
Print " "
Print "Momentanwert Luftdruck :" ; Luft1
Print " "
Print "Spg sensor :" ; Bar1
Print " "
Print "Mittelwert Luftdruck" ; Temp
Print " "
Print "---------------------------------------"
Waitms 500
Loop
MfG
Florian[/url]
ich bin gerade dabei, mir eine Wetterstation mit zwei Tempsensoren (DS1820),
ner RTC (DS1307) und nem Drucksensor (MPX 4115 von Freescale) zu bauen. Nun funktioniert bis auf den Drucksensor alles soweit. Der Drucksensor gibt eine dem Druck proportionale Spannung aus, diese lese ich mit dem 10 bit ADC des mega8 aus. dann berechne ich den Druck mit Hilfe folgender Formel aus dem Datasheet:
P=((Vout/Vin)+0.095)/0.009
Ich nun bekomme ich immer einen viel zu niedrigen Luftdruck heraus:
Momentan zeigt mir mein Sensor ca 970 mbar an, laut der nächstgelegenen Wetterstation (Stuttgart-Flughafen:http://www.wetteronline.de/Baden-Wuerttemb/Stuttgart.htm)
müsste der jedoch bei ca 1019 mbar liegen.
Die Sensor- und die Eingangsspannung messe ich über einen 2,11:1 Spgteiler (82k:39k). Wenn ich nun mit meinem Multimeter die Spanungen nachmesse erhalte ich um ca 0.2V höhere Werte.
Hat jemand ne Idee, wo der Fehler liegen könnte?
Achja, hier noch der link zum Datasheet des Sensors:
http://www.freescale.com/files/sensors/doc/data_sheet/MPX4115A.pdf
Und hier noch mein Code, ich progge in BASCOM:
$regfile = "m8def.dat"
$crystal = 8000000
$baud = 9600
Config Lcd = 40 * 4
Config Lcdpin = Pin , Rs = Portb.6 , Db4 = Portb.7 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portb.1 , E2 = Portb.2
Config Adc = Single , Prescaler = Auto , Reference = Internal
Config 1wire = Portb.0
Dim Help As Single
Dim Help1 As Single
Dim Volt As Word
Dim ___lcdno As Bit
Dim Ar(2) As Integer
Dim T1 As Integer
Dim N As Byte
Dim I As Byte
Dim Luft As Word
Dim Luft2 As Single
Dim Temp As Single
Dim Bar1 As Single
Dim Volt1 As Single
Dim Luft1 As Single
___lcdno = 0
Initlcd
Cls
Cursor Off
___lcdno = 1
Initlcd
Cls
Cursor Off
Do
Start Adc 'adc werte für batteriespannung und mpx4115 auslesen
Luft = Getadc(0)
Volt = Getadc(1)
Stop Adc
Volt1 = Volt * 2.56 'batteriespannung Berechnen , 2:1 spgteiler
Volt1 = Volt1 / 1023
Help1 = Volt1 * 2.11111
Volt1 = Help1 + Volt1
Bar1 = Luft * 2.56 'Sensorspannung berechnen
Bar1 = Bar1 / 1023
Help = Bar1 * 2.13157
Bar1 = Bar1 + Help
1wreset 'temp aus ds1820 auslesen
1wwrite &HCC
1wwrite &H44
Waitms 200
1wreset
1wwrite &HCC
1wwrite &HBE
For I = 1 To 2
Ar(i) = 1wread()
Next
T1 = Ar(1) + Ar(2)
T1 = T1 / 2
Luft1 = Bar1 / Volt1 'druck aus sensor und eingangsspannung berechnen
Luft1 = Luft1 + 0.095
Luft1 = Luft1 / 0.009
Luft1 = Luft1 * 10
'empirisch ermittelte Abweichung vom Referenzwert
If N = 0 Or N = 1 Or N = 2 Or N = 3 Or N = 4 Or N = 5 Then 'Mittelwertbildung
Incr N
Luft2 = Luft2 + Luft1
Else
N = 0
Temp = Luft2 / 6
Luft2 = 0
End If
___lcdno = 0 'lcd ausgabe
Upperline
Lcd "Eingangsspannung: " ; Volt1
Lowerline
Lcd "Momentanwert P: " ; Luft1
___lcdno = 1
Upperline
Lcd "Spg sensor: " ; Bar1
Lowerline
Lcd "Mittelwert P: " ; Temp
'ausgabe über uart, nur versuchsweise
Print "Eingangsspannung :" ; Volt1
Print " "
Print "Momentanwert Luftdruck :" ; Luft1
Print " "
Print "Spg sensor :" ; Bar1
Print " "
Print "Mittelwert Luftdruck" ; Temp
Print " "
Print "---------------------------------------"
Waitms 500
Loop
MfG
Florian[/url]