PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Interner Bandgap und Temp. Sensor



BASTIUniversal
05.02.2006, 12:05
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:

$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

Ich bin ratlos!

BASTIUniversal
05.02.2006, 14:51
Hmm, weiß niemand eine Antwort?
Ich hab jetzt mal verschiedene "Zustände" durchgemessen, bei denen der Bandgapwert immer gleichbleiben müsste, aber nicht tut!

Auf dem Bild entspricht die dunkelblaue Linie dem Ergebniss der AD-Wandlung vom internen Bandgap, die rosa Linie dem Ergebniss der AD-Wandlung vom Temperatursensor LM35 am ADC-Port 3 (Port C 3).

Vielleicht kann jemand von euch damit was anfangen!?

Ratber
05.02.2006, 17:09
Hmm, weiß niemand eine Antwort?

du mußt den Leuten schon etwas Zeit geben um durch dein Programm durchzusteigen.

Um 13:00 das Topic reinsetzen und nichtmal 3 Stunden später gleich ein bisken Mosern ist unfein. :wink: