Der Nachfolger des WDR-Computerclub mit Wolfgang Back und Wolfgang Rudolph - ...und immer ein Bit übrigbehalten!


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Demoprogramm: Internen Temperatur-Sensor nutzen Kategorie: Open-Micro/Open-Mini/Open-Midi/Open-Macro/Open-Maxi (von Dietmar, Homepage - 19.12.2018 17:36)
Dietmar nutzt:  Open-Micro, Open-Mini, Open-Midi, Open-Macro, Open-Maxi, Open-Mini M-Unit, Open-Mini Station
' ============================================================================
' Internen Temperatur-Sensor der Open-Maxi nutzen
' In OCBASIC 1.12a_e1 von Dietmar Harlos am 10. Dezember 2018
' ============================================================================

' Der MC9S08AW60-Controller, auf dem die Open-Maxi basiert, besitzt einen
' internen Temperatur-Sensor. Der folgende Sourcecode demonstriert, wie auf
' der Open-Maxi die aktuelle Temperatur gemessen, mit 100 skaliert und als
' Kommazahl auf der Seriellen Schnittstelle ausgegeben werden kann. Der Sensor
' arbeitet allerdings nicht sehr genau: 1 Digit Differenz macht bis zu 1,5 °C
' Differenz im Temperaturwert aus.

' --- Rechenweg --------------------------------------------------------------

' Herleitung der Berechnungsformel:
'
' Formel laut Data Sheet MC9S08AW60.pdf:
'
' Temp = 25 - ((VTEMP - VTEMP25) / m)   [Equation 14-1]
'
' where:
'
' - VTEMP is the voltage of the temperature sensor channel at the ambient temperature.
' - VTEMP25 is the voltage of the temperature sensor channel at 25°C.
' - m is the hot or cold voltage versus temperature slope in V/°C.
'
' Werte laut Anhang:
'
' VTEMP25 = 1.396 Volt
'
' Temp sensor slope (m)
' -40°C - 25°C : m = 3.266 mV/°C (Kehrwert: 306.1849357 °C/V)
'  25°C - 125°C: m = 3.638 mV/°C (Kehrwert: 274.8763057 °C/V)
'
' Rechenweg lt. Data Sheet:
'
' In application code, the user reads the temperature sensor channel,
' calculates VTEMP, and compares to VTEMP25 . If VTEMP is greater than
' VTEMP25 the cold slope value is applied in Equation 14-1. If VTEMP is
' less than VTEMP25 the hot slope value is applied in Equation 14-1.
'
' Siehe auch Application Note AN3031.pdf ("Temperature Sensor for the
' HCS08 Microcontroller Family").

' Rechenweg vereinfachen (zuerst für "cold slope value"):

' VTEMP25 in Digits = 1.396 * 1023 / 5 = 285.6216

' Eine Umformung der Formel 14-1 ergibt:
' (Zum Vereinfachen könnte auch "simplify" in "MuPAD Light" verwendet werden.)

' Temp = 25 - ( (Temperature_Sensor - 285.6216) * 1.496505062)

' Welchen Wertebereich hat "Temperature_Sensor"? Mittels Minimal- und Maximaltemperatur ermitteln:
' (Zum Lösen der Gleichung wird "MuPAD Light" verwendet.)
'
' solve(25 - ( (x - 285.6216) * 1.496505062) = -40) -> x = 329.056134 -> 329
' solve(25 - ( (x - 285.6216) * 1.496505062) = 125) -> x = 218.79924 -> 219
'
' Der Term (x - 285.6216) hat also einen Wertebereich von -66.6216 bis 43.3784.
'
' Deshalb geeignet (mit 100) skalieren:
'
' Temperatur in °C/100 = 2500 - ( (Temperature_Sensor - 285.6216) * 149.6505062)
'
' Runden:
'
' Temperatur in °C/100 = 2500 - ( (Temperature_Sensor - 286) * 150)
'
' Prüfen:
'
' 2500 - ( (219 - 286) * 150) = 12550 °C/100
' 2500 - ( (329 - 286) * 150) = -3950 °C/100

' Jetzt noch die Herleitung für "hot slope value":
'
' Temperatur in °C/100 = 2500 - ( (Temperature_Sensor - 286) * 134)

' Alles gilt jedoch nur für exakt 5 Volt Betriebsspannung! Bei einer variablen
' Betriebsspannung muß mit der internen Bandgap-Spannungsreferenz gearbeitet
' werden.

' --- Definitionen für das System --------------------------------------------

INCLUDE "omax.def"         'Definitionen für die Open-Maxi

' --- Definitionen des Anwenders ---------------------------------------------

DIM stellen BYTE
DIM wert WORD

DIM Temperature_Sensor AD[35] 'Temperatur-Sensor (s. Kapitel 14.2.3 im Manual)
DIM VREFH AD[38]           'UREF=VREFH (per Jumper auf: VDD, Betriebsspannung)

' --- Das Hauptprogramm ------------------------------------------------------

ADC1CFG=&b01001000         'AD-Wandler auf gerundete 10 Bit

WHILE TRUE
  PRINT
  PRINT "AD[35]=Temperatur-Sensor=";Temperature_Sensor
  PRINT "AD[38]=VREFH=";VREFH
  PRINT

  IF Temperature_Sensor>286 THEN
    PRINT "VTEMP is greater than VTEMP25 -> the cold slope value is applied"
    wert=2500 - ( (Temperature_Sensor - 286) * 150)
  ELSE
    PRINT "VTEMP is less than VTEMP25 -> the hot slope value is applied"
    wert=2500 - ( (Temperature_Sensor - 286) * 134)
  END IF

  ' Nun liegt der Temperaturwert mit Faktor 100 skaliert vor:

  PRINT "Temperaturwert mit Faktor 100 skaliert=";wert

  ' Nun den Temperaturwert in °C ausgeben:

  PRINT "Temperaturwert in °C=";

  ' Negatives Ergebnis behandeln:

  IF wert<0 THEN
    wert=-wert
    PUT ASC("-")
  END IF

  ' Vorkommaanteil ausgeben, dabei Skalierung beachten:

  PRINT wert/100;".";

  ' Nachkommaanteil ausgeben:

  FOR stellen=1 TO 2
    wert=(wert MOD 100)*10
    PRINT wert/100;
  NEXT stellen

  PRINT "°C"

  PAUSE 25
WEND

End2Host=ON                'Nach Programmende in den Host-Modus
END                        'Programmende, Neustart mit der Enter-Taste

' --- Programmende ----------------------------------------------------------


Passender Link: Bedienungsanleitung zur Open-Macro und Open-Maxi

Meine Homepage: http://ccintern.dharlos.de

 Antwort schreiben

Bisherige Antworten:

Demoprogramm: Internen Temperatur-Sensor bei variabler Betriebsspannung nutzen (von Dietmar - 19.12.2018 17:38)
    Re: Demoprogramm: Internen Temperatur-Sensor bei variabler Betriebsspannung nutzen (von Joachim - 22.12.2018 14:26)