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
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
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
- 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)
|