Prolog

Oft ist es wünschenswert, Temperaturen an vielen verschiedenen Stellen zu messen. So müssen beispielsweise in einem Serverraum sämtliche Server, die Switches und Router sowie Zu- und Abluft und auch Umgebungstemperatur der Nebenräume überwacht werden. Wenn mehrere 19"-Schränke lokal verteilt im Gebäude befindlich sind, und dennoch die Temperatur zentral überwacht werden soll, ist es wünschenswert, nicht für jeden Sensor ein eigenes Kabel legen zu müssen. Ein Bussystem ist hierfür ideal: Es muss darüberhinaus flexibel nach den Wünschen erweiterbar sein. Dies alles kann "TempGrid".

Features

  1. TempGrid überwacht die Temperatur an vier elektrisch völlig separierten Bussen. An jedem Bus können bis zu 16 Sensoren von DS18S20 (Dallas Semiconductors, Nachfolger des DS1820) angeschlossen werden.
  2. Sensoren können an den Bus während des Betriebs an- und abgesteckt werden (Hotplugging)
  3. Jeder Sensor hat eine Auflösung von 8 Bit und eine Genauigkeit von +-0.5°C
  4. Alle Temperaturdaten werden live per RS232 an beispielsweise einen PC übermittelt
  5. Über ein LCD-Display wird der Status von maximal 12 Sensoren erfasst und angezeigt - wenn der Platz auf dem LCD-Display nicht reicht, werden die restlichen Daten selberverständlich trotzdem an den überwachenden PC übermittelt
  6. TempGrid unterstützt das von Dallas Semiconductors unterstützte One-Write-Protocol und kann auch dessen "Bus Discovery" ausführen - also das Erkennen mehrerer Endgeräte (Sensoren) an einem One-Write-Bus
  7. Alle gesandten Daten werden durch CRC8 gegen Fehler abgesichert.
  8. Beim Booten prüft der Mikrocontroller durch ein CRC8 von 33 254 Bytes-Blöcken, ob sich der Inhalt des Flash verändert hat
  9. Durch die HAL (Hardware Abstaction Layer) kann das Programm unglaublich leicht auf einen anderen AVR uC portiert werden: die ATmega-Controller (also bspw. ATmega8, ATmega16) sollten ohne weitere Probleme funktionieren, für die ATtinys muss der Code wohl etwas abgespeckt werden (LCD-Routinen einfach rausnehmen, fertig). Änderungen am Pinout sind durch die flexible HAL kein Problem mehr.

Zur Hardware

Ich habe einen AT90S8515 Mikrocontroller mit einem 7,3728 MHz Grundton-Quarz für dieses Projekt verwendet. Die Spannungsversorgung wird durch einen 78L05-Linarregler (im TO-92-Gehäuse) gewährleistet, Standardbeschaltung (siehe Datenblatt). An PortA des Mikrocontrollers habe ich ein HD44780-kompatibles LCD-Display angeschlossen (PA0-PA7 mit: RS, RW, E1, E2, D4, D5, D6, D7). Drei Portpins (PC5, PC6, PC7) werden für zwei LEDs verwendet. Hierbei ist eine Besonderheit, dass eine Duo-LED zum Einsatz kommt, die entweder durchgehend grün leuchtet oder rot blinkt (je nach aktivem Portpin). Die zweite LED ist eine herkömmliche gelbe Low-Current-LED. Die vier One-Wire-Busse sind an PC0-PC3 geschaltet und jeweils (wie laut Datenblatt vorgesehen) mit einem 4,7kOhm Pullup-Widerstand versehen. Für das SPI wird der Standard 2x5-Pin Verbinder des STK200 verwandt. Die LEDs sowie das LCD sind per Molex-Steckern angeschlossen: 5 Pin Molex für die LEDs (+5V, PC5, PC6, PC7, GND), 3 Pin Molex für die Spannungsversorgung des LCD (+5V, Kontrastspannung, GND), 8 Pin Molex für die Datenleitungen des LCD (Port A). Die RS232-Schnittstelle wird mit 115200 Baud betrieben (UBRR = 3), hierfür ist ein MAX232 Pegelkonverter im Einsatz (auch Standardbeschaltung, siehe Datenblatt).

Zur Software

Die Software ist fast aussließlich in C geschrieben, wobei ein bischen Inline-Assembler verwendet wird. Es wird für die Ansteuerung des LCD der Code von der von mir geschriebenen LibLCD verwendet. Auf Interrupts wird gänzlich verzichtet, das Programm verläßt sich rein auf "Busy Waiting" - Nebenläufigkeit ist auch nicht notwendig. Die Besonderheit ist auf jeden Fall die Bedienung des Dallas One-Wire-Busses. Für Interessierte lohnt sich hier ein Blick in den Quellcode auf jeden Fall.

Bilder

Wenn TempGrid ausgeschaltet ist:
TempGrid aus

Wärend des Bootens werden die LEDs getestet (rote LED blinkt):
Bootvorgang Screen 1

Danach wird das Flash gegen Veränderungen gecheckt (grüne LED blinkt):
Bootvorgang Screen 2

Das Gerät im Bereitschaftszustand. Noch ist kein Sensor angeschlossen, das Gerät erkennt an allen vier Bussen also Null Sensoren (Zahl vor dem Doppelpunkt):
TempGrid ohne Sensoren

Dann werden per Hotplugging zwei Sensoren an Bus 1 angesteckt:
TempGrid mit zwei Sensoren an Bus 1

Und so sieht TempGrid von innen aus:
TempGrid von innen

Hier der Schaltplan (kann zum vergrößern angeklickt werden):
Schaltplan von TempGrid

Download

Hier kann der Quellcode für TempGrid heruntergeladen werden, der vollständig unter der GNU General Public License steht. Binaries sind für einen einfachen Nachbau enthalten. Um ihn komplett zu benutzen muss man weiterhin die LibLCD haben, die auch unter der GNU GPL steht.