-         

Ergebnis 1 bis 3 von 3

Thema: Interner Bandgap und Temp. Sensor

  1. #1
    Moderator Roboter Genie
    Registriert seit
    26.08.2004
    Beiträge
    1.228

    Interner Bandgap und Temp. Sensor

    Anzeige

    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:
    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!

  2. #2
    Moderator Roboter Genie
    Registriert seit
    26.08.2004
    Beiträge
    1.228
    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!?
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken zusammenfassung.jpg  

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.09.2004
    Ort
    Düsseldorf
    Beiträge
    3.948
    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.
    Gruß
    Ratber

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •