H-Temperatursensor

Ein kleines Temperatursensor-Modul für den H-Bus. Bis zu 4 Ports für Temperatursensoren, wahlweise ein NTC vom Reichelt oder ein gekapselter Sensor vom ELV mit Kabel.

Hardware

Schaltplan

Im Schaltplan ist nur ein Sensor an ADC0 eingezeichnet, sonst wird das unübersichtlich. Prinzipiell werden aber 4 Sensoren unterstützt (Einfach die Schaltung an PC0 vervielfachen).
Nicht benutzte Eingänge müssen mit Masse verbunden werden, damit erkannt werden kann, dass kein Sensor angeschlossen ist (ich prüfe ACDW<2).

Software

Es wird pro Sekunde für jeden Kanal ein neuer (gemittelter) Messwert zur Verfügung gestellt. Dieser ist das Mittel aus 10 Messungen, damit der Wert nicht so schwankt. Insgesamt werden also 40 Wandlungen pro Sekunde durchgeführt.
Die LED blitzt immer auf, wenn ein neuer Wert verfügbar ist (also 1mal/s).

Nicht angeschlossene Kanäle (auf Masse gelegt oder vom Vergleichswiderstand auf Masse gezogen) geben immer -99°C zurück, um nicht genutzte Kanäle zu erkennen.

Eindrücke

Foto H-Temp Foto2 H-Temp

Bemerkungen

  • Man braucht genaue Widerstände zum Vergleich im Spannungsteiler. Mit 1% kann man schon anständige Ergebnisse erzielen (die NTCs haben auch nur ca 2%), ich verwende 0,1%.
  • Die Bestellnummern für die verwendeten Sensoren sind:
    • Reichelt: NTC-0,2 10K (30ct)
    • ELV: 68-370-75 (2,95€, gekapselt mit Kabel)
  • Als Referenzspannung benutze ich 2,56V aus der Bandgap-Quelle, prinzipiell ist das aber wurscht, es kommt ja nur auf's Verhältnis an. Die Bandgap-Quelle bietet aber den Vorteil, dass durch den Linearregler nochmals die Spannung gesiebt wird.
  • VCC und AVCC werden nicht verbunden! Sie sind intern mit ca 1k verbunden - dadurch entsteht ein RC-Tiefpass zusammen mit dem 100n an AVCC.

Bus-Kommunikation

  • Device configure: 0x02
    • Kanalfunktion lesen: 0x02
      • rechtes Halbbyte (0x0F): Funktion
        • 0 = kanal deaktiviert
        • 1 = Innentemperatur
        • 2 = Außentemperatur
        • 15 = Andere Temperatur
      • linkes Halbbyte (0xF0): Sensortyp
        • 0 = ELV
        • 1 = Reichelt
    • Länge Kanalname lesen: 0x03
      • 1. Byte: Kanalnummer
      • zurück: 1 Byte mit Länge
    • Kanalname Lesen: 0x04
      • 1. Byte: Kanalnummer
      • zurück: n Bytes mit Name
    • Kanalfunktion schreiben: 0x12
      • 1. Byte: Kanalnummer
      • 2. Byte: Funktion, siehe oben
    • Kanalname schreiben: 0x14
      • 1. Byte: Kanalnummer
      • 2. Byte: Länge n
      • n Bytes Name
  • Temperatur abfragen: 0x20
    • 1. Byte: Kanalnummer
    • 2+3. Byte: int16 mit Temperatur in °C mal 10 (23,7°C = 237, MSB first)