Hallo!
Ich hab jetzt seit ein paar Tagen meinen Drucksensor laufen, der bringt auch gute Werte. Für eine exakte Druckmessung brauche ich aber noch die genaue Betriebsspannung und die Temperatur.
Für die Temperatur nehme ich einen LM35, den ich irgendwo ausgeschlachtet hab.
Für die Betriebsspannugn nehme ich den internen Bandgap von meinem Mega48 und rechne die Spannung folgendermasen aus:
1,1V (Vom Bandgap) / ADC-Wert * 1023 = Betriebsspannung
Die Temperatur vom LM35 (der gibt 10mV/°C) lese ich direkt am ADC ein. Da bekomme ich eine Auflösung von ca. 1°C.
Jetzt habe ich ein Programm geschrieben, das zuerst den Bandgap liest, dann den LM35. Das ganze wird an den PC geschickt.
Nun hab ich damit aber ein sehr seltsames Problem:
Wenn ich beide Werte nacheinander einlese bekomme ich 2 mal den gleichen Wert. Dieser Wert entspricht aber weder dem des Bandgap noch dem des Temp. Sensor!
Lese ich beides einzeln ein, so bekomme exakt stimmende Werte (z.B. 35 für den LM35 und 224 für den Bandgap)!
Es geht aber noch besser...nehme ich den gleichen Code und füge ein 500ms Pause zwischen den Messungen ein, so bekomme ich stimmende Werte die aber um ca. +-10 schwanken. Stecke ich den LM35 aus, so stimmt der Bandgapwert nichtmehr und anstatt das der Wert des LM35 wild schwankt, stellt sich der auf den Wert 317 ein.
Hier der Code:
Ich bin ratlos!Code:$regfile = "M48def.dat" $crystal = 16000000 $baud = 19200 Dim Ref As Word , Temp As Word , L As Byte , H As Byte , Ad As Bit Declare Sub Temp Declare Sub Bandgap Adcsra = &B10010111 Sreg.7 = 1 Do Bandgap Waitms 500 Temp Print Ref ; ";" ; Temp Wait 1 Loop Sub Temp Admux = &B01000011 Adcsra.6 = 1 Do If Adcsra.4 = 0 Then L = Adcl H = Adch Ref = Makeint(l , H) Adcsra.4 = 1 Ad = 1 End If Loop Until Ad = 1 Ad = 0 End Sub Sub Bandgap Admux = &B01001110 Adcsra.6 = 1 Do If Adcsra.4 = 0 Then L = Adcl H = Adch Temp = Makeint(l , H) Adcsra.4 = 1 Ad = 1 End If Loop Until Ad = 1 Ad = 0 End Sub End







Zitieren

Lesezeichen