Projekt: Temperatur-Messsystem - Sensormodul 2/3


PfeilKapitel 1:Überblick über das System Menübild
PfeilKapitel 2:Sensormodul 1
PfeilKapitel 3:Sensormodul 2/3
PfeilKapitel 4:Anzeigemodul 1
PfeilKapitel 5:Anzeigemodul 2
PfeilKapitel 6:Anzeigemodul 2a
PfeilKapitel 7:Anzeigemodul 3
PfeilKapitel 8:Web-Modul
PfeilKapitel 9:Datenkommunikation
PfeilKapitel 10: Software „TAnz“
PfeilKapitel 11: Software „AnzKom“

Letzte Bearbeitung: 01.04.2017

SymbolDownloads

 Sensormodul 2Sensormodul 3
Schaltplan Sensormodulsm2-sch.pdfsm3-sch.pdf
Schaltplan Beschaltungsbeispielsm2-3-beispiel.pdf
Schaltplan Sensorensm2-3-sensoren.pdf
Stückliste mit Empfehlungen zur Bauteilbestellungsm2-stkl.htmsm3-stkl.htm
Stückliste für die Sensorensm2-3-sensoren-stkl.htm
Software v1.00 für ATmega8 vom 19.07.2007 (Assembler)
unterstützt nur 16 Temperatursensoren
sm2-atmega8-v100.zip -
Software v2.11 für ATmega8 vom 29.03.2017 (Assembler)sm2-atmega8-v211.zip sm3-atmega8-v211.zip
Platinen-Layout von Daniel Suhm als PDF-Dateism2-layout1.zip-
Platinen-Layout von Jens Krause im Eagle-Format und als PDF-Dateism2-layout2.zip-
Platinen-Layout von Lothar Jasper für Luftfeuchtigkeitssensoren im Sprint-Layout-Format sm2-3-fsensor-layout.zip
Platinen-Layout und ausführliche Aufbauanleitung von Bernd Stein http://www.mikrocontroller.net/topic/350407#new-

SymbolInhaltsverzeichnis

BeschreibungAllgemeine Informationen über das Sensormodul 2/3
SchaltungBeschreibung der Schaltung der Sensormodule und des Sensornetzwerkes
HardwareBilder und Hinweise zum Aufbau des Sensormoduls 2/3
SoftwareBeschreibung der Software des Sensormoduls 2/3
InbetriebnahmeInbetriebnahme des Sensormoduls 2/3 und Installation der Software
BedienungBedienungsanleitung und komplette Beschreibung aller Funktionen
SonstigesEinige weitere Informationen zum Sensormodul 2/3

SymbolBeschreibung

Die Sensormodule 2 und 3 bilden einen wichtigen Teil des Temperaturmesssystems. Sie erfassen die Daten von bis zu 24 Temperatursensoren und bis zu 3 Luftfeuchtigkeitssensoren, konvertieren diese in eine lesbare Form und senden sie schließlich über eine RS-232-Schnittstelle an weitere Module. Für den Anschluss der Sensoren dient ein 1-Wire-Netzwerk, wobei insgesamt 8 solcher Netzwerke (Busse) zur Verfügung stehen. Das Sensormodul 3 bietet zusätzlich die Möglichkeit, die Daten eines Luftdrucksensors zu erfassen. Dieser Sensor wird direkt auf der Platine des Sensormoduls 3 installiert und ist nicht mit dem 1-Wire-Netzwerk verbunden. Beide Sensormodule besitzen ein Standard-LCD mit 4 Zeilen und 20 Zeichen, auf dem ständig die gemessenen Daten mitgelesen werden können. Mit einem Taster lassen sich weitere Daten auf dem Display anzeigen und es können auch einige Parameter konfiguriert werden.

Die Unterscheidung zwischen den Sensormodulen 1, 2 und 3 hat historische Gründe. Das ursprüngliche Messsystem bestand nur aus dem Sensormodul 1 und dem Anzeigemodul 1 und war für maximal 8 Temperatursensoren vorgesehen. Später wurde das System auf 16 Sensoren erweitert und neue Module kamen hinzu, u.a. auch das Sensormodul 2, bei dem die Hard- und Software komplett überarbeitet wurde. So lief das System einige Jahre weitgehend unverändert und im Jahr 2011 wurde beschlossen, das System nochmals zu erweitern. So entstand die Software v2.00 für das Sensormodul 2, welche den Anschluss von bis zu 24 Temperatur- und 3 Luftfeuchtigkeitssensoren an das 1-Wire-Netzwerk ermöglicht. Da auch der Luftdruck gemessen werden sollte, aber keine geeigneten 1-Wire-Sensoren zur Verfügung standen, wurde der Sensor direkt auf dem Sensormodul untergebracht. Dies erforderte allerdings eine kleine Modifikation der Hardware und somit entstand das Sensormodul 3, welches zusätzlich noch den Luftdruck erfassen kann. Die Sensormodule 2 und 3 sind ansonsten im Kern identisch und verwenden auch weitgehend die gleiche Software. Aus diesem Grund habe ich die komplette Beschreibung beider Module zusammengefasst.

SymbolSchaltung

SymbolSensormodul 2

Schaltung Sensormodul 2

Diese Stückliste enthält alle Bauelemente für das Sensormodul 2 mit Empfehlungen zur Bauteilbestellung.

Das zentrale Bauteil des Sensormoduls 2 ist ein ATmega8 (IC2), der mit einer Taktfrequenz von 4 MHz arbeitet. Die Portanschlüsse PC0-PC3 und PD4-PD7 sind mit Pull-up-Widerständen R1-R8 beschaltet und direkt an die D-Sub-Buchse K1 geführt. Sie bilden das 1-Wire-Netzwerk, das auf 8 Bus-Leitungen aufgeteilt ist. Hier können insgesamt 24 Temperatur- und 3 Luftfeuchtigkeitssensoren angeschlossen werden. Die Ports PB0, PB1, PD2 und PD3 werden als Alarmeingänge verwendet. Diese sind ebenfalls an K1 geführt, allerdings ist jeweils noch ein Widerstand (R9-R12) in Reihe geschaltet, um die Portanschlüsse zu schützen.

Die Ports PB2-PB5 sowie PC4 und PC5 steuern ein vierzeiliges Standard-LCD mit jeweils 20 Zeichen pro Zeile an (IC4). Dieses LCD auf der Basis eines HD44780 Controllers (oder kompatibel) wird im 4-Bit-Modus betrieben, um Port-Anschlüsse zu sparen. R14 und P1 erzeugen eine weitere Spannung für das LCD, wobei mit P1 der Kontrast des Displays eingestellt werden kann. Die Ports PB3-PB5 werden zusätzlich als Programmierschnittstelle (ISP) verwendet und gemeinsam mit Reset und Masse auf den 5-poligen Steckverbinder K2 geführt. Über den an Port PD0 angeschlossenen Taster lassen sich verschiedene Daten auf dem Display anzeigen sowie einige Parameter konfigurieren. Mehr Informationen sind im Abschnitt Bedienung zu finden.

Die vom Controller generierten seriellen Daten werden am Portschluss PD1 (TXD) ausgegeben, über IC3 (Standard-Bauteil MAX232) auf RS-232-Pegel gebracht und schließlich auf die Buchse K1 geführt. IC1 ist ebenfalls ein Standard-Bauteil und erzeugt aus der über K1 zugeführten Gleichspannung, die im Bereich 9-20V liegen kann, eine stabile Spannung von 5V für das Sensormodul. Die Diode D1 schützt hier vor Falschpolung und C1 soll die Spannung noch etwas glätten.

Die Stromaufnahme der gesamten Schaltung beträgt übrigens maximal 35mA, sofern man auf die Beleuchtung des Displays verzichtet. Beim Betrieb mit Beleuchtung muss man mit einer Stromaufnahme von bis zu 200mA rechnen. In diesem Fall muss der Spannungsregler IC1 unbedingt mit einem Kühlkörper versehen werden und die Eingangsspannung sollte nicht höher als 12V sein. Ich habe in meinem Sensormodul ein preiswertes Display ohne Beleuchtung verwendet, weil mein Sensormodul die meiste Zeit unbeobachtet läuft. Auch habe ich ein stärkeres Netzteil als in der Stückliste empfohlen verwendet, welches nicht nur zentral alle Komponenten des Messsystems speist, sondern außerdem noch den hier beschriebenen BigBen-Türgong.

SymbolSensormodul 3

Schaltung Sensormodul 3

Diese Stückliste enthält alle Bauelemente für das Sensormodul 3 mit Empfehlungen zur Bauteilbestellung.

Ursprünglich war vorgesehen, den Luftdruck ebenfalls über das 1-Wire-Netzwerk zu erfassen. Leider gibt es keine einfache Lösung für dieses Problem und so habe ich mich entschlossen, den Luftdrucksensor direkt auf dem Sensormodul zu installieren. Physikalisch betrachtet spricht nichts dagegen, da der Luftdruck überall im Haus gleich ist. Für den Sensoreinbau war es allerdings erforderlich, das Sensormodul 2 leicht zu modifizieren und so entstand das Sensormodul 3. Hier kommt ein Luftdrucksensor MPXA6115A6U von Freescale zum Einsatz, der eine zum Luftdruck proportionale Spannung ausgibt. Diese kann recht einfach über einen A/D-Konverter-Eingang des Mikrocontrollers gemessen werden.

Da bereits alle Controller-Anschlüsse belegt waren, musste hier ein wenig in die Trickkiste gegriffen werden, um einen freien A/D-Konverter-Anschluss zu gewinnen. So wurde der LCD-Anschlüsse RS gemeinsam mit dem Taster auf den Port PD0 gelegt, wobei der zusätzliche Widerstand R16 zur Entkopplung notwendig wurde. Im Normalbetrieb wird hier das LCD angesteuert, alle 50ms wird jedoch PD0 kurz als Eingang umgeschaltet und der Taster-Zustand eingelesen. An den nun freien Anschluss PC4 kommt der Ausgang des Luftdrucksensors IC5. Die Bauteile R15, C14 und C15 entsprechen der Standard-Beschaltung aus dem Datenblatt des MPXA6115A6U.

Soll ein neues Sensormodul aufgebaut werden, dann empfehle ich das Sensormodul 3, auch wenn man den Luftdrucksensor nicht benötigt. Dieser ist optional und kann weggelassen werden. In diesem Fall bestückt man einfach die Bauteile IC5, R15, C14 und C15 nicht und lässt den Anschluss 27 vom Mikrocontroller offen. Das Modul erkennt diesen Zustand bei der Sensorsuche und gibt dann keinen Luftdruckwert aus. Es ist jederzeit möglich, den Sensor mit den 3 passiven Bauteilen nachzurüsten und über eine Sensorsuche ins System einzubinden.

Der Umbau eines bereits vorhandenen Sensormoduls 2 zu einem Sensormodul 3 ist relativ leicht möglich. Dabei sind folgende Änderungen durchzuführen:

SymbolAufbau eines Sensornetzwerkes

Alle Verbindungen zur „Außenwelt“ werden über den Steckverbinder K1 hergestellt. An den Anschlüssen 1-8 liegen die Sensorbusse 1-8, denen jeweils eine Masseleitung (14-21) zugeordnet ist. Die Alarmeingänge befinden sich an den Anschlüssen 9-12, wobei sich diese Eingänge 2 Masseleitungen (22 und 23) teilen müssen. Über die Anschlüsse 24 und 25 wird die Betriebsspannung zugeführt (Plus an 25). Die vom Sensormodul generierten Daten können am Anschluss 13 abgegriffen werden, die dazugehörige Masseleitung kann man an 22, 23 oder 24 anschließen. Das folgende Bild zeigt eine von vielen Möglichkeiten, wie ein Sensornetzwerk aussehen kann:

Sensor-Beispielschaltung

Grundsätzlich besteht ein 1-Wire-Bus (wie der Name schon sagt) aus einem Draht (DQ) und einer Masse-Leitung (GND). Über diesen Draht erfolgt nicht nur die Datenkommunikation, sondern auch die Stromversorgung aller am Bus angeschlossenen Sensoren. Da während der Datenkommunikation kurzzeitig der Draht nach Masse geschaltet wird, besitzt jeder Sensor eine Diode und einen kleinen Speicherkondensator zur Sicherstellung der Stromversorgung während dieser Unterbrechungen. Ein 1-Wire-Bus kann ein Strang von mehreren 10 Metern Länge sein und nahezu beliebig viele Sensoren verbinden. Damit jeder Sensor eindeutig adressiert werden kann und keine Konflikte entstehen, hat der Hersteller (Maxim, ehemals Dallas) in jeden Sensoren einen ROM-Code eingebrannt, der nur einmal vergeben wird und auch nicht geändert werden kann.

In der Praxis werden sich die Sensoren in verschiedenen Räumen und Etagen befinden und da wird es schwierig, alle Sensoren an einen Strang anzukoppeln. Aus diesem Grund besitzen die Sensormodule 8 Busse, die beliebig mit Sensoren beschaltet werden können. Damit lassen sich kleinere Sensoren-Gruppen bilden und die Leitungslänge kann reduziert werden. Im Beispiel oben wurden 3 Sensoren an den Bus 1 angeschlossen, weitere 3 Sensoren an den Bus 2 und nochmals 2 Sensoren an den Bus 6. Das Sensormodul wird bei diesem Beispielnetzwerk die Sensorkennungen so vergeben, wie sie im Bild beschriftet sind. Die 3 Sensoren am Bus 1 bekommen immer die Kennungen 1-3. Allerdings: Welcher der 3 Sensoren die Kennung 1, 2 und 3 bekommt, hängt vom bereits erwähnten ROM-Code ab und ist ohne dessen Kenntnis nicht vorhersehbar. Das sollte man beim Aufbau des Sensornetzwerks berücksichtigen. Weitere Informationen hierzu sind im Abschnitt Inbetriebnahme zu finden.

In der Beispielschaltung sind außerdem noch 2 Alarmkontakte angeschlossen. Die Alarmeingänge sind grundsätzlich als Schalteingänge realisiert: ein einfacher Kontakt gegen Masse löst den Alarm aus. Es können sowohl Arbeitskontakte als auch Ruhekontakte verwendet werden, die entsprechende Bewertung findet dann später in den Anzeigemodulen statt. Die Reaktion auf das Öffnen und Schließen eines Alarmkontaktes erfolgt etwas verzögert, wobei Werte von 250 ms, 500 ms, 750 ms oder 1000 ms eingestellt werden können. Damit werden Kontaktprellungen unterdrückt und Fehlalarme verhindert. Anstatt eines mechanischen Kontaktes kann man auch einen Schaltausgang von einer beliebigen anderen Schaltung anschließen (Open-Collector, Open-Drain oder auch 5V-TTL bzw. 5V-CMOS). Dazu muss allerdings zwischen beiden Schaltungen eine Masseverbindung vorhanden sein.

SymbolSensoren

1-Wire-Sensoren Das nebenstehende Bild zeigt die Schaltungen der beiden Sensortypen, die am Sensormodul verwendet werden können. Es gibt einen einfachen Sensor für die Temperaturmessung (oben) und einen etwas aufwändigeren Sensor für die Messung der Luftfeuchtigkeit (unten).

Für die Temperaturmessung können insgesamt 5 verschiedene Sensoren verwendet werden: DS1820, DS18S20, DS18B20, DS1822 und DS1920. Letzterer wurde nur der Vollständigkeit wegen aufgelistet, da er relativ teuer und schwer erhältlich ist. Diese Sensoren können beliebig gemischt werden, das Sensormodul erkennt den Sensortyp und verwendet den jeweils nötigen Rechenalgorithmus zur Ermittlung des Temperaturwertes. Wichtig bei allen Temperatursensoren ist, dass die Anschlüsse GND und VDD, so wie in der Schaltung dargestellt, verbunden werden.

Für die Messung der Luftfeuchtigkeit ist etwas mehr Aufwand erforderlich. Zunächst ermittelt der Sensor IC2 (HIH-4000 von Honeywell) kontinuierlich die Luftfeuchtigkeit und gibt einen entsprechenden Spannungswert aus. Diese Spannung wird über R1 und C2 etwas gefiltert und an den A/D-Konverter-Eingang von IC1 geführt. IC1 (DS2438) ist eigentlich ein Batterie/Akku-Monitor, der normalerweise in Akku-Packs eingebaut wird, um den Ladezustand zu erfassen. In dieser Schaltung wird er genutzt, um die Ausgangs- und die Betriebsspannung von IC2 zu messen und aus dem Verhältnis dieser beiden Werte ergibt sich die Luftfeuchtigkeit. IC1 enthält außerdem einen Temperatursensor, der ebenfalls ausgelesen wird.

D2 und C1 werden hier verwendet, um die Betriebsspannung für IC1 und IC2 zu erzeugen und etwas zu glätten. D1 schützt die gesamte Sensorschaltung, die immerhin einen Wert von über 20€ hat, gegen Falschpolung der Busleitung.

Die Schaltung des Luftfeuchtigkeitssensors stammt übrigens aus dem Dokument humsensor.pdf, welches ich vor längerer Zeit von der damaligen Firmen-Homepage (Dallas Semiconductor) geladen hatte. Inzwischen ist die Firma in Maxim Integrated aufgegangen und dort konnte ich das Dokument leider nicht mehr finden. Aus diesem Grund liegt es jetzt auf meiner Seite. Der im Original verwendete Sensor HIH-3605 wurde in meiner Schaltung durch den gleichwertigen neueren Typ HIH-4000 ersetzt.

Diese Stückliste enthält alle Bauelemente für die Temperatur- und Luftfeuchtigkeitssensoren mit Empfehlungen zur Bauteilbestellung.

Die folgende Tabelle zeigt eine Übersicht über die Sensoren, die an das Sensormodul angeschlossen werden können:

SensortypBezeichnungMessbereichGenauigkeitAuflösungBemerkung
TemperaturDS1820-55°C bis 125°C±0,5°C im Bereich -10°C bis 85°C9 Bitwird nicht mehr produziert
TemperaturDS18S20-55°C bis 125°C±0,5°C im Bereich -10°C bis 85°C9 Bit
TemperaturDS18B20-55°C bis 125°C±0,5°C im Bereich -10°C bis 85°C9-12 Bitwird im 12 Bit-Modus betrieben
TemperaturDS1822-55°C bis 125°C±2°C im Bereich -10°C bis 85°C9-12 Bitwird im 12 Bit-Modus betrieben
TemperaturDS1920-55°C bis 100°C±0,5°C im Bereich 0°C bis 70°C9 BitiButton Bauform
LuftfeuchtigkeitDS2438, HIH-40000% bis 100% RH±5% im Bereich 0% bis 60%1%
LuftdruckMPXA6115A6U200hPa bis 1100hPa±15hPa im Bereich 0°C bis 85°C1hPadirekt auf dem Sensormodul 3 installiert

Hinweis zu den Temperatursensoren: Die geringere Auflösung von 9 Bit einiger Typen ist hier kein Nachteil. Das Sensormodul verwendet einen Algorithmus aus dem Datenblatt und berechnet daraus einen Wert mit einer Auflösung von 0,1°C. Somit werden unabhängig vom Sensortyp alle Temperaturdaten mit einer Auflösung von 0,1°C ausgegeben und das im gesamten Bereich von -55°C bis 125°C.

Hinweis zu den Luftfeuchtigkeitssensoren: Wie schon weiter oben erwähnt, liefern diese auch einen Temperaturwert. Dieser hat eine Genauigkeit von ±2°C und dient hauptsächlich zur Temperaturkompensation für den Luftfeuchtigkeitssensor. Er wird aber ebenso aufbereitet wie die reinen Temperatursensoren (Auflösung von 0,1°C), auf dem Display angezeigt und über RS-232 zu weiteren Modulen übertragen. Somit ergeben sich bei voller Sensorbeschaltung mit 24 Temperatur- und 3 Luftfeuchtigkeitssensoren insgesamt 27 Temperatur-Messpunkte.

Ganz wichtig: Die Luftfeuchtigkeitssensoren belasten den Sensorbus sehr stark. Das führt dazu, dass die erforderliche Betriebsspannung von 4V für den Feuchtigkeitssensor nur knapp erreicht oder sogar minimal unterschritten wird. Ein gemeinsamer Betrieb eines Luftfeuchtigkeitssensors mit mehreren Temperatursensoren ist problemlos möglich, aber es sollten niemals mehrere Luftfeuchtigkeitssensoren an einen Bus angeschlossen werden!

Hinweis zum Luftdrucksensor: Der von mir verwendete MPXA6115A6U gehört zu einer Gruppe Sensoren, die in unterschiedlichen Gehäusen und Größen verfügbar sind. Es können alle Sensoren mit der Stamm-Bezeichnung MPXA6115A, MPXAZ6115A, MPXH6115A und MPXHZ6115A verwendet werden.

Und noch einige Worte zur Auswahl der Sensoren: Mir war es sehr wichtig, dass keine Abgleicharbeiten erforderlich sind. Alle hier verwendeten Sensoren werden vom Hersteller abgeglichen und können sofort in der Schaltung oder im 1-Wire-Netzwerk verwendet werden. Ein weiteres Auswahlkriterium war: Alle Sensoren müssen ohne zusätzliche Stromversorgung auskommen und allein mit der Speisung vom 1-Wire-Bus auskommen. Aus diesem Grund wurde der Luftdrucksensor direkt auf dem Sensormodul 3 untergebracht, denn ein 1-Wire-Anschluss wäre nur mit zusätzlicher Stromversorgung möglich gewesen.

SymbolHardware

Platine Oberseite Mein Sensormodul wurde auf einer Lochrasterplatine aufgebaut. Es war zunächst lange Zeit als Sensormodul 2 im Einsatz und wurde dann zum Sensormodul 3 umgebaut. Auf dem nebenstehenden Bild ist der Mikrocontroller IC2 als zentrale Komponente zu sehen, darunter befinden sich der Quarz und die Bauteile der Stromversorgung (IC1). Rechts neben dem Controller sieht man den MAX232 (IC3) mit den dazugehörigen Kondensatoren. Die linke Seite wird komplett vom D-Sub-Steckverbinder K1 eingenommen. An der oberen Platinenseite sind die Steckverbinder für das LCD (IC4) und für den ISP-Anschluss (K2) untergebracht. Letzterer befindet sich am äußersten Platinenrand, damit er auch bei montiertem Display zugänglich ist.

Ganz rechts sind noch das Poti P1 und der Taster S1 zu sehen, beide sind so angebracht, dass sie bei aufgestecktem Display zugänglich sind. Beim Taster wurden die Anschlüsse auseinander gebogen und an einem kurzen Stück Draht angelötet. Damit ergab sich genau die richtige Einbauhöhe. Für die nötige Stabilität des Tasters sorgt etwas Zweikomponenten-Kleber. Ich habe diesen Taster verwendet, weil er gerade vorhanden war. Es gibt sicher bessere Taster, die man an dieser Stelle verwenden kann.

Im Rahmen des Umbaus zum Sensormodul 3 wurde unten rechts der Luftdrucksensor IC5 mit seiner Außenbeschaltung untergebracht. Da dieser nur in SMD-Bauform erhältlich ist, muss man sehr vorsichtig arbeiten.
Luftdrucksensor Dieses Bild zeigt den Luftdrucksensor noch einmal im Detail. Hier habe ich zunächst 3 kurze Drahtstücke auf die Platine gelötet, diese etwas gebogen und anschließend den Sensor dort angelötet. Der Anschluss auf der rechten Seite dient übrigens nur zur besseren Stabilität und ist nicht mit der Schaltung verbunden.

Platine Unterseite Die Unterseite besteht (wie zu erwarten) aus vielen Drähten. Für Masse und Stromversorgung habe ich Drahtmaterial mit einer Stärke von 0,5 mm verwendet. Für alle anderen Leitungen verwendete ich 0,3 mm Kupferlackdraht. Die gesamte Verdrahtung ist relativ unkritisch, allerdings sollten sich die Kondensatoren C2/C3 möglichst nah an IC1 befinden. Gleiches gilt für C4 an IC2, C12 an IC3 und C15 an IC5.

Der D-Sub-Steckverbinder K1 passt leider nicht in das Platinenraster von 2,54 mm. Deshalb habe ich mit einer Laubsäge Schlitze in die Platine gesägt und die Anschlüsse etwas gebogen. Das sieht nicht sehr schön aus, erfüllt aber seinen Zweck.

Platine im Gehäuse Auf diesem Bild wurde die Platine in die Unterschale des Gehäuses eingesetzt und angeschraubt. Für den Steckverbinder K1 muss vorher ein Ausschnitt ausgesägt werden.

Auf der rechten Gehäuseseite kann man eine LED erkennen. Ich habe das Gehäuse von einem früheren Projekt wieder verwendet und die eingeklebte LED hätte man wohl nicht zerstörungsfrei entfernen können. Deshalb habe ich sie einfach im Gehäuse gelassen, aber nicht verwendet.
Platine mit Display Hier wurde das Display aufgesteckt und angeschraubt.

Sensormodul 3 komplett Nun wird noch die Gehäuse-Oberschale aufgesetzt und damit ist das Modul fertig und einsatzbereit. Vorher müssen natürlich noch die Ausschnitte für Display, Taster und Steckverbinder in die Gehäuse-Oberschale gesägt bzw. gebohrt werden.

Für das Sensormodul 2 gibt es übrigens 2 verschiedene Platinenlayouts. Platinenlayout 1 wurde von Daniel Suhm entwickelt und bereitgestellt. Dieses Paket enthält das Layout und einen Bestückungsplan als PDF-Datei. Von Jens Krause stammt das Platinenlayout 2. In diesem Paket befinden sich neben dem Layout im Eagle-Format noch 3 PDF-Dateien mit dem Layout, dem Bestückungsplan und einem Brückenplan. Vielen Dank an die beiden Entwickler.

Luftfeuchtigkeitssensor 1 Luftfeuchtigkeitssensor 2 Nebenstehende Bilder zeigen die Vorstufe eines Luftfeuchtigkeitssensors. Auch hier wird eine kleine Lochrasterplatine verwendet. D1, D2, C1 sowie R1 sind bereits bestückt, weiterhin sind auf dem ersten Bild 4 kurze Drahtstücke zu erkennen, an die anschließend der DS2438 (IC1) angelötet wird. Das geht relativ gut, da nur die 4 äußeren Anschlüsse von IC1 beschaltet werden müssen. Anschluss 1 von IC1 muss sich dabei links unten befinden - erkennbar an der runden Markierung auf dem Gehäuse.
Luftfeuchtigkeitssensor 3 Luftfeuchtigkeitssensor 4 Auf diesen Bildern ist der fertige Sensor von oben und unten zu sehen. Beim Einbau von IC2 (HIH-4000) muss man beachten, dass die beschriftete Seite nach unten zeigen muss. Beim Verbinden der Bauteile kommt man ausnahmsweise mal ohne Draht aus, alle Verbindungen können mit Zinnbrücken realisiert werden. Die farbigen Striche symbolisieren die Anschlüsse: Blau ist die Masse-Leitung und Rot ist die Datenleitung.
Den fertigen Sensor habe ich in einem Stück Schrumpfschlauch untergebracht. Vorher habe ich noch einen kleinen Plastikstreifen diagonal über das Sensorfenster gelegt, damit der Sensor nicht vom Schrumpfschlauch verschlossen wird und die Luft zirkulieren kann.

Der freundliche Bastler-Kollege Lothar Jasper hat für die Luftfeuchtigkeitssensoren ein Platinenlayout entwickelt. Dieses Paket enthält eine Version für bedrahtete Bauteile und eine Version für SMD-Bauteile, jeweils im Sprint-Layout-Format.

SymbolSoftware

Dieser Abschnitt beschreibt die Funktionen der in Assembler geschriebenen Software des Sensormoduls 2 bzw. 3 und bezieht sich auf die aktuelle Version 2.10. Die Software besteht grundsätzlich aus 3 Teilen: der Initialisierung, der Hauptprogrammschleife und einem zyklischen Timer-Interrupt. Außerdem gibt es seit der Version 2.10 noch eine spezielle Update-Funktion, die für Erweiterungen des Sensornetzwerks bestimmt ist.

Initialisierung: Diese wird bei jedem Systemstart oder Reset ausgeführt und stellt zunächst alle I/O-Ports ein, aktiviert den Sender der RS-232-Schnittstelle (TX) und initialisiert den Timer 1. Beim Sensormodul 3 wird zusätzlich noch der A/D-Konverter zur Erfassung des Luftdrucks aktiviert. Der Timer 1 wird so eingestellt, dass alle 50ms ein Interrupt auslöst wird. Alle zeitgesteuerten Abläufe werden später von diesem Timer abgeleitet. Anschließend werden die gespeicherten Einstellungen aus dem EEPROM gelesen und das LCD initialisiert. Hier folgt eine Warteschleife, die 10s andauert. Während dieser Zeit sind alle 1-Wire-Busleitungen ausgeschaltet (auf Low-Pegel gesetzt). Damit wird verhindert, dass Sensoren bei kurzen Stromunterbrechungen in einem undefinierten Zustand bleiben und falsche Werte liefern. Während dieser Zeit läuft ein Fortschrittsbalken auf dem LCD. Nach Ablauf der Reset-Phase werden die 1-Wire-Busse aktiviert und der eingestellte Modus geprüft. Das Sensormodul unterscheidet hier zwischen dem Modus Direkt und Speicher. Im Modus Direkt wird an dieser Stelle eine neue Sensorsuche durchgeführt, während beim Speicher-Modus alle Sensordaten aus dem EEPROM geladen werden. Anschließend ist auf dem Display eine Status-Übersicht zu sehen, auf dem die Versionsnummer der Software, die ermittelte bzw. gespeicherte Sensorkonfiguration und der eingestellte Modus angezeigt werden. Diese Status-Anzeige kann ungefähr 5s lang abgelesen werden, danach wird die Sensorbelegung über RS-232 ausgegeben und die Hauptprogrammschleife gestartet.

Die Sensorsuche im 1-Wire-Netzwerk funktioniert nach einem speziellen Algorithmus, bei dem der bereits erwähnte ROM-Code jedes Sensors bitweise ermittelt wird. Die 64 Bit großen ROM-Codes aller gefundenen Sensoren werden in 2 Tabellen festgehalten. Eine davon hat 24 Plätze und nimmt alle Temperatursensoren auf, eine weitere mit 3 Plätzen die Luftfeuchtigkeitssensoren. Zusätzlich wird in einer Liste vermerkt, an welchem Bus jeder Sensor angeschlossen ist. Der ROM-Code eines Sensors kann z.B. so aussehen:

4C0000006C006E28

Das letzte Byte (ganz rechts) ist der so genannte Family-Code. Am Family-Code 28 erkennt das Modul den Temperatursensor DS18B20. Weitere Family-Codes sind 10 (DS1820 und DS18S20), 22 (DS1822) und 26 (DS2438). Letztere werden vom Modul als Luftfeuchtigkeitssensoren erkannt und in die entsprechende Tabelle gelegt. Andere Family-Codes werden vom Sensormodul ignoriert. Der längere Teil des ROM-Codes 0000006C006E ist die Seriennummer, welche nur einmal in jeder Sensor-Familie vergeben wird. Das erste Byte 4C ist ein CRC8-Wert, der aus der Seriennummer und dem Family-Code ermittelt wird. Die ROM-Codes der Sensoren können übrigens auf dem Display des Sensormoduls angezeigt werden, dazu später mehr im Abschnitt Bedienung.

Hauptprogrammschleife: Dieser Programmteil erledigt alle wichtigen Aufgaben des Sensormoduls und läuft in einer endlosen Schleife. Sie beginnt mit der Ermittlung und RS-232-Ausgabe des aktuellen Status der 4 Alarmeingänge. Anschließend wird an allen 1-Wire-Bussen, an denen mindestens ein Sensor angeschlossen ist, eine Temperaturmessung gestartet. Dies entspricht dem Zeitpunkt 0 und der folgenden Messzyklus-Tabelle:

ZeitpunktAktionRS-232 Beispiel
0Start einer Temperaturmessung an allen Sensoren, Senden des aktuellen Status der Alarmeingänge über RS-232 A:0
B:1
C:0
D:0
900 msBeenden der Temperaturmessung an allen Sensoren
1000 msAuslesen von Temperatursensor 1, Senden des Temperaturwertes über RS-2321: 22.8
2000 msAuslesen von Temperatursensor 2, Senden des Temperaturwertes über RS-2322: 21.9
3000 msAuslesen von Temperatursensor 3, Senden des Temperaturwertes über RS-2323:  4.2
...Auslesen von Temperatursensor 4-22, Senden der Temperaturwerte über RS-232
23000 msAuslesen von Temperatursensor 23, Senden des Temperaturwertes über RS-232o: 62.3
24000 msAuslesen von Temperatursensor 24, Senden des Temperaturwertes über RS-232p: 58.5
25000 msAuslesen des Luftdrucksensors, Senden des Luftdruckwertes über RS-232w: 1013
26000 msAuslesen der Temperatur und der Betriebsspannung von Luftfeuchtigkeitssensor 1, Senden des Temperaturwertes über RS-232 q: 22.6
27000 msAuslesen der Temperatur und der Betriebsspannung von Luftfeuchtigkeitssensor 2, Senden des Temperaturwertes über RS-232 r: 23.0
28000 msAuslesen der Temperatur und der Betriebsspannung von Luftfeuchtigkeitssensor 3, Senden des Temperaturwertes über RS-232 s: 22.2
29000 msAuslesen der Ausgangsspannung von Luftfeuchtigkeitssensor 1, Senden des Luftfeuchtigkeitswertes über RS-232 x:   47
30000 msAuslesen der Ausgangsspannung von Luftfeuchtigkeitssensor 2, Senden des Luftfeuchtigkeitswertes über RS-232 y:   45
31000 msAuslesen der Ausgangsspannung von Luftfeuchtigkeitssensor 3, Senden des Luftfeuchtigkeitswertes über RS-232 z:   53
32000 msSiehe Zeitpunkt 0, Beginn eines neuen Zyklus

Diese Tabelle zeigt den zeitlichen Ablauf eines voll ausgebauten Systems mit 24 Temperatur-, einem Luftdruck- und 3 Luftfeuchtigkeitssensoren in der Grundeinstellung des Sensormoduls. Die Spalte RS-232 Beispiel zeigt, wie die Werte über die RS-232 an andere Module übermittelt werden. Wichtig ist dabei ist die Sensorkennung, die jedem Messwert vorangestellt ist. Diese Kennung wird vom Sensormodul bei der Sensorsuche festgelegt und dabei wird folgendermaßen vorgegangen: Zuerst erhalten (beginnend mit 1) alle Temperatursensoren am Bus 1 eine Kennung, anschließend alle Sensoren am Bus 2 usw. Die Kennung innerhalb einer Busleitung ergibt sich durch den ROM-Code. Ab Sensor 9 werden Buchstaben verwendet, so ergibt sich hier die Kennung a für den Sensor 9, die Kennung b für den Sensor 10 usw. Bei den Luftfeuchtigkeitssensoren wird ebenso vorgegangen, hier werden allerdings 2 Kennungen vergeben: die Kennung q ist immer der Temperaturwert des Sensors 1 und x ist der Luftfeuchtigkeitswert des Sensors 1. Die Kennung w ist immer fest für den Luftdrucksensor reserviert.

Messung der Temperaturen: Zum Zeitpunkt 0 in der oben stehenden Tabelle wird zunächst ermittelt, welche Busse beschaltet sind. Auf diese Busse wird dann ein Kommando zum Start einer Temperaturmessung an alle Sensoren gesendet. Weil die Temperatursensoren während der Messung mehr Strom benötigen, wird die Busleitung direkt nach dem Kommando auf einen festen High-Pegel gesetzt. Dieses Verfahren wird in den Datenblättern empfohlen und als „Strong Pull-up“ bezeichnet. Nach spätestens 750ms haben alle Sensoren die Messung abgeschlossen und so schaltet das Sensormodul nach 900ms alle Busleitungen wieder in den normalen Zustand.

Beim Zeitpunkt 1000ms wird direkt mit dem Temperatursensor 1 kommuniziert und das so genannte Scratchpad ausgelesen. In diesem 8 Byte großen Datenblock und einem weiteren Byte mit einem CRC8-Wert befinden sind alle Informationen zum Ermitteln des Temperaturwertes mit einer Auflösung von 0,1°C. Es gibt 2 unterschiedliche Sensortypen und jeder erfordert einen bestimmten Rechenalgorithmus, der vom Sensormodul mithilfe des Family-Codes ausgewählt wird. Der aufbereitete Temperaturwert durchläuft anschließend ein 85°C-Filter. Dazu muss man wissen, dass alle hier verwendeten Temperatursensoren nach dem Einschalten einen Wert von 85°C im Temperaturregister enthalten. Es kann gelegentlich z.B. durch Störungen auf dem Bus passieren, dass ein Sensor einmalig diesen Wert liefert. Das 85°C-Filter erkennt das und überspringt die RS-232-Datenausgabe (auf dem Display wird der Wert aber angezeigt). Wenn allerdings dauerhaft 85°C vom Sensor empfangen werden, dann wird das als Messwert akzeptiert und auch über RS-232 gesendet. Eine Datenanzeige und -Ausgabe erfolgt übrigens nicht, wenn ein CRC-Fehler erkannt wurde oder unplausible Daten vorliegen.

Beim Zeitpunkt 2000ms wiederholt sich der Vorgang, jetzt wird allerdings mit dem Temperatursensor 2 kommuniziert. Alle weiteren Temperatursensoren werden nach der gleichen Prozedur bearbeitet.

Messung des Luftdrucks (nur beim Sensormodul 3): 1000ms nach dem letzten Temperatursensor schließt sich die Bearbeitung des Luftdrucksensors an. Dieser ist direkt am A/D-Konverter-Eingang PC4 des Mikrocontrollers angeschlossen und der hier gemessene Wert entspricht dem aktuellen Luftdruck. Das ist allerdings nur die halbe Wahrheit, denn zur Berechnung des Luftdrucks ist das Verhältnis der Ausgangsspannung zur Betriebsspannung des Sensors entscheidend. Da hier die Sensorbetriebsspannung (5V) auch als Referenz für den A/D-Konverter verwendet wird, gleicht sich das perfekt aus und man kann ohne Berücksichtigung der Betriebsspannung direkt mit dem Wert des A/D-Konverters arbeiten. In der Praxis schwankt der Wert des Konverters leicht, deshalb werden die letzten 8 Werte in einer Liste gespeichert und daraus ein Mittelwert gebildet. Leider ist die 10-Bit-Auflösung des A/D-Konverters etwas knapp und so lässt sich der Luftdruck nur in Schritten von 1 hPa ermitteln. Genau genommen ist die Auflösung noch etwas schlechter, denn es entstehen teilweise Schritte von 2 hPa. Ein kommendes Tiefdruckgebiet lässt sich aber trotzdem recht gut erkennen.

Messung der Luftfeuchtigkeit: Wiederum 1000ms nach dem Luftdruck werden die Luftfeuchtigkeitssensoren bearbeitet und das passiert in 2 Schritten. Das hat mehrere Gründe: zum einen fallen hier 2 Messwerte an, die mit zeitlichem Abstand gesendet werden müssen und zum anderen ist recht viel Kommunikation auf dem 1-Wire-Bus notwendig, die man so besser verteilen kann. Wie schon erwähnt, liefert jeder Luftfeuchtigkeitssensor auch einen Temperaturwert. Dieser wurde bereits gemeinsam mit den reinen Temperatursensoren im Zeitbereich von 0 - 900ms ermittelt und liegt zum Auslesen bereit. Nun werden noch die Werte vom Luftfeuchtigkeitssensor benötigt und dazu muss man die beiden Sensor-Komponenten DS2438 (IC1) und HIH-4000 (IC2) getrennt betrachten: Der HIH-4000 ermittelt die Luftfeuchtigkeit und liefert einen entsprechenden Spannungswert an seinem Ausgang. Dieser Wert ist allerdings von der Betriebsspannung abhängig und steht in einem bestimmten Verhältnis zu dieser. Der DS2438 muss also sowohl die Sensorausgangsspannung als auch die Betriebsspannung des Sensors messen. Der DS2438 enthält allerdings nur einen A/D-Konverter, der entsprechend umgeschaltet werden muss. Zunächst wird er auf die Betriebsspannung eingestellt und ein Kommando zum Starten der A/D-Konvertierung an den Luftfeuchtigkeitssensor 1 geschickt. Nach einer kurzen Wartezeit von 10ms wird dann (ähnlich wie bei den Temperatursensoren) ein Scratchpad ausgelesen. Hier befindet sich neben dem Temperaturwert auch der soeben ermittelte Wert der Sensorbetriebsspannung. Diese beiden Werte zeigen leichte Schwankungen, deshalb kommen die letzten 8 Werte in jeweils einen Zwischenspeicher zur Mittelwertbildung. Anschließend wird die gemittelte Temperatur ins richtige Format gebracht und über RS-232 ausgegeben.

Auf die gleiche Weise werden weitere Luftfeuchtigkeitssensoren gelesen. Anschließend kommt wieder der erste Sensor an die Reihe und der zweite Schritt wird bearbeitet. Jetzt muss die Sensorausgangsspannung gemessen werden und dazu ist es erforderlich, den A/D-Konverter des DS2438 auf den Anschluss umzuschalten, wo der Sensorausgang angeschlossen ist. Also wird jetzt ein entsprechendes Kommando an den Sensor gesendet. Anschließend folgt wieder ein Kommando zum Start der A/D-Konvertierung und 10ms später wird erneut das Scratchpad gelesen. Hier kann jetzt der Spannungswert vom Sensorausgang entnommen werden, der auch wieder gemeinsam mit den 7 vorangegangenen Werten in einen Zwischenspeicher zur Mittelwertberechnung gelegt wird. Nun sind alle Daten für die Berechnung komplett: Aus der gemittelten Sensorausgangsspannung und Sensorbetriebsspannung wird die Luftfeuchtigkeit berechnet. Diese gilt laut Datenblatt des HIH-4000 für 25°C und muss bei abweichender Temperatur kompensiert werden. Dafür wird der vorher ermittelte Temperaturwert verwendet und nach einer weiteren Berechnung steht der endgültige Luftfeuchtigkeitswert mit einer Auflösung von 1% fest und wird über RS-232 gesendet. Auch bei der Kommunikation mit den Luftfeuchtigkeitssensoren werden alle CRC-Bytes geprüft und die Daten müssen sich in einem bestimmten Bereich befinden, anderenfalls wird der Luftfeuchtigkeitswert verworfen und nicht gesendet.

Nach der Bearbeitung des letzten Luftfeuchtigkeitssensors wird noch 1000ms gewartet und ein neuer Zyklus beginnt. Übrigens: Sind weniger Sensoren vorhanden, dann werden die Lücken einfach übersprungen und der Zyklus entsprechend verkürzt. Auch ist es möglich, kürzere Intervalle als 1000ms einzustellen, dazu folgen im Abschnitt Bedienung weitere Informationen.

Die Hauptprogrammschleife hat noch weitere Aufgaben. So werden ständig die ermittelten Werte in Gruppen auf dem Display angezeigt: die Temperatursensoren 1-8, A-H (9-16), I-P (17-24) sowie alle Daten der Luftdruck- und Luftfeuchtigkeitssensoren. Auch wird mithilfe des Timer-Interrupts ständig der Status der 4 Alarme und des Tasters geprüft. Eine Alarm-Änderung wird nach Ablauf einer einstellbaren Zeit in einer Lücke zwischen den Sensorausgaben über RS-232 gesendet und auch für 3 Sekunden auf dem Display angezeigt. Über den Taster können die Sensoranzeigen auch manuell gewechselt werden, außerdem werden weitere Seiten mit zusätzlichen Informationen ausgegeben. Über einen langen Tastendruck (>2 Sekunden) können einige Konfigurationen durchgeführt werden, dies wird im Abschnitt Bedienung noch genauer beschrieben.

Timer-Interrupt: Dieser wird zyklisch alle 50ms ausgelöst und hier werden zunächst alle Alarm-Eingänge gelesen und mit dem bisherigen Zustand verglichen. Bei einer Zustandsänderung wird ein Zähler gestartet bzw. ausgewertet. Bei Ablauf eines solchen Zählers wird ein Bit (Flag) gesetzt, auf das später die Hauptprogrammschleife reagieren wird. Weiterhin wird der Taster gelesen und bei Erkennung eines kurzen oder langen Tastendrucks ebenfalls ein Flag für die Hauptprogrammschleife gesetzt. Schließlich wird noch ein 16-Bit-Zähler für die Steuerung des Messzyklus bearbeitet.

Update-Funktion: Über diese Funktion können weitere Sensoren zu einem bestehenden Netzwerk hinzugefügt werden. Wird diese Funktion aktiviert, dann erfolgt zunächst ein normaler Systemstart. Anschließend wird wie beim bereits erwähnten Speicher-Modus die Sensordatenliste aus dem EEPROM geladen und zusätzlich noch eine Sensorsuche gestartet. Durch einen Vergleich der beiden Sensorlisten erkennt das Modul alle neu installierten Sensoren und zeigt deren Anzahl an. Bestätigt man diese Anzeige durch einen Tastendruck, dann werden die neuen Sensoren an die bestehende Liste angehängt und anschließend im EEPROM gespeichert.

Sonstiges: Hinter den Code-Blöcken des Programms befinden sich noch einige Datenblöcke:

Noch etwas zur Datenübertragung: Diese läuft über eine einzelne Datenleitung (TXD) mit 9600 Baud, 8 Datenbits, ohne Parität und einem Stoppbit. Alle Datenpakete bestehen aus ASCII-Zeichen und werden mit <cr> (Carriage Return, ASCII 13) abgeschlossen. So bleiben die Daten überschaubar und man kann sie z.B. auf einem angeschlossenen Terminalprogramm mitlesen. Weitere Einzelheiten zur Datenübertragung und der Aufbau der verschiedenen Datenpakete sind im Kapitel Datenkommunikation zu finden.

Das war jetzt sehr viel Theorie, trotzdem noch eine Information: Die Software für das Sensormodul 2 und Sensormodul 3 ist weitgehend identisch. Ich pflege beide Version in einer einzigen ASM-Datei und benutze #IF-Anweisungen, um spezielle Programmteile für das jeweilige Modul zu trennen. Damit kann ich relativ einfach die Software für beide Sensormodule bearbeiten und weiterentwickeln.

SymbolInbetriebnahme

Für die Inbetriebnahme des Sensormoduls wird eine der folgenden Software-Versionen benötigt:

SoftwareSensormodulBemerkung
sm2-atmega8-v100.zipSensormodul 2alte Version für 16 Temperatursensoren
sm2-atmega8-v210.zipSensormodul 2aktuelle Version für 24 Temperatur- und 3 Luftfeuchtigkeitssensoren
sm3-atmega8-v210.zipSensormodul 3aktuelle Version für 24 Temperatur-, einen Luftdruck- und 3 Luftfeuchtigkeitssensoren

Unabhängig davon, ob man ein bereits vorhandenes Sensormodul 2 auf die Software-Version 2.00 umstellt, ein Sensormodul 2 auf ein Sensormodul 3 umbaut oder ein komplett neues Modul in Betrieb nimmt - der Ablauf ist in allen Fällen identisch: Man wählt die entsprechende Software aus der oben stehenden Tabelle aus und schreibt die darin enthaltene HEX-Datei mit einem AVR-Programmiergerät über den ISP-Anschluss K2 in den ATmega8 hinein. Wer nicht weiß, wie das funktioniert, findet auf der Seite AVR-Programmierung eine umfangreiche Anleitung. Wichtig ist auch die richtige Einstellung der Fuse-Bits, welche für alle Software-Versionen und Modul-Varianten gleich ist:

Fusebits 1 So sieht die Einstellung im AVR-Studio für den ATmega8 des Sensormoduls 2 oder 3 aus. Wird eine Programmiersoftware verwendet, die die Angabe der Fuse-Bits in hexadezimaler Form benötigt, dann gilt:
High = 0xD1
Low = 0x3F

Fuse-Bits 2So sieht die Einstellung in PonyProg für den ATmega8 des Sensormoduls 2 oder 3 aus.

Damit sind alle Programmierarbeiten abgeschlossen und das Programmiergerät kann vom Sensormodul wieder entfernt werden.

Wichtig: Bei einem Software-Update von der Version 1.00 auf die Version 2.xx muss einmalig in den Modus Direkt umgeschaltet und das Modul neu gestartet werden, um eine neue Sensorsuche auszulösen. Anschließend kann wieder der Speicher-Modus verwendet werden. Siehe dazu auch den Abschnitt Bedienung.
Display 1 Wenn alles geklappt hat, dann sollte beim Einschalten des Moduls das nebenstehende Bild angezeigt werden. Die Zeile mit den Minuszeichen ist ein Fortschrittsbalken und nach genau 10s erreicht dieser den rechten Bildrand.

Display 2 Anschließend muss für 5s dieses Bild erscheinen, wenn noch keine Sensoren am 1-Wire-Netzwerk angeschlossen sind. Hier ist nur der Luftdrucksensor (Anzeige P1) erkannt worden, der fest eingebaut ist. Bei der Inbetriebnahme eines Sensormoduls 2 steht natürlich Sensormodul2 v2.10 im Display, außerdem noch P0 in der zweiten Zeile, da hier kein Luftdrucksensor installiert werden kann.

Display 3 Nach dem Anschluss einiger Sensoren an das 1-Wire-Netzwerk kann die Anzeige so aussehen wie in diesem Bild. Die Angaben in Zeile 2 und 3 haben folgende Bedeutung:

T17Es wurden 17 Temperatursensoren im 1-Wire-Netzwerk gefunden, möglich sind Werte zwischen 0 und 24.
P1Es wurde 1 Luftdrucksensor erkannt, möglich sind Werte zwischen 0 und 1 (P stammt vom englischen „Pressure“).
H2Es wurden 2 Luftfeuchtigkeitssensoren im 1-Wire-Netzwerk gefunden, möglich sind Werte zwischen 0 und 3 (H stammt vom englischen „Humidity“).
32532112 Belegung der Sensorbusse: Jedes dieser 8 Zeichen repräsentiert einen Sensorbus. Daraus ergibt sich, dass 3 Sensoren am Bus 1 angeschlossen sind, 2 Sensoren am Bus 2, 5 Sensoren am Bus 3 usw. Sind mehr als 9 Sensoren an einem Bus angeschlossen, dann kommen Buchstaben ins Spiel: A bedeutet 10 Sensoren, B bedeutet 11 usw.

Die Anzeige Direkt in der letzten Zeile bedeutet, dass die Sensoren bei jedem Start neu gesucht werden und das Sensormodul direkt mit dieser Konfiguration arbeitet. Es gibt noch die Alternative Speicher, diese greift beim Systemstart auf eine gespeicherte Sensorkonfiguration zurück. Weitere Erklärungen folgen im Abschnitt Bedienung.

SymbolEinige Informationen zum Aufbau des Sensornetzwerks

Als geeigneter Platz für das Sensormodul bietet sich die Hausverteilung an, weil hier die Wege zu den Sensoren und Alarmkontakten am kürzesten sind. Um möglichst flexibel zu sein, habe ich 4 Cat5-Kabel an einen 25-poligen D-Sub-Stecker angelötet (hier kommt das Sensormodul dran) und das andere Ende der Kabel auf den Verteiler aufgelegt, an dem auch alle Kabelverbindungen zu den Zimmern enden. Hier lassen sich dann später die gewünschten Verbindungen zwischen der Hausverkabelung und den Eingängen des Sensormoduls herstellen.

Nun sollte man sich gut überlegen, wie man die Sensoren optimal auf die Busse aufteilt. Entsprechend der Topologie eines Busses sollte immer ein Strang gebildet werden, d.h. ein Kabel führt vom Sensormodul zu einem Sensor und von dort gegebenenfalls zu einem weiteren Sensor. Eine sternförmige Anschaltung ist meist problematisch und sollte, zumindest bei weit entfernten Sensoren, vermieden werden. Falls man insgesamt nicht mehr als 8 Sensoren braucht, dann empfiehlt es sich, diese einzeln anzuschließen. Das hat außerdem den Vorteil, dass man später die Sensoren eindeutig zuordnen kann, d.h. der an Bus 1 angeschlossene Sensor bekommt die Kennung 1 zugewiesen usw.

Bei Verwendung von mehr als 8 Sensoren sollte man versuchen, sinnvolle Gruppen zu bilden. So kann man z.B. alle Sensoren auf einer Etage an einem Bus zusammenschalten. Hier muss man vielleicht etwas experimentieren, um die beste Konfiguration zu ermitteln. Es gibt hier keine festgelegten Grenzen für das 1-Wire-Bussystem, ein 50m langer Bus kann funktionieren, muss aber nicht. Ein Testbetrieb mit 40m Cat5-Kabel lief ohne Probleme, während die sternförmige Zusammenschaltung zweier Sensoren (einer mit 25m und einer mit 15m Kabel) nicht funktionierte. An getrennten Bussen angeschlossen funktionieren beide Sensoren jedoch einwandfrei. Auch hat es sich bei mir bewährt, alle Kabelschirme zu erden und mit der Schaltungsmasse zu verbinden.

Wichtig: Bei der Inbetriebnahme eines neuen Sensornetzwerks sollte das Sensormodul im Direkt-Modus arbeiten. Außerdem ist bei jeder Änderung im Netzwerk ein Neustart erforderlich, damit die Sensor-Konfiguration neu eingelesen wird.

Falls trotz aller Bemühungen nicht alle Sensoren arbeiten, dann liegt das Problem mit hoher Wahrscheinlichkeit an der Kabelverbindung. Mögliche Fehlerquellen sind:

  1. Vertauschte Kabeladern - In diesem Fall liegt die Betriebsspannung verkehrt herum am Sensor. Am besten schaltet man den Sensor zunächst noch nicht an die Leitung und überprüft erst die richtige Polung. Es müssen +5V an der Datenleitung gegen Masse gemessen werden.
  2. Unterbrochene Kabeladern - Dies kann man daran erkennen, dass gar keine Spannung am Sensor messbar ist.
  3. Kurzschluss - Kann man mittels Ohmmeter oder Durchgangsprüfer erkennen. Dazu sollte aber vorher sowohl das Sensormodul als auch der Sensor vom Kabel abgetrennt werden.
  4. Sensoren falsch angeschlossen - Richtig ist folgende Anschaltung bei DS1820, DS18S20, DS18B20 und DS1822: Anschlüsse 1 und 3 an Masse, der mittlere Anschluss 2 an die Datenleitung; beim DS1920 kommen Rand und Oberseite an Masse und die Unterseite an die Datenleitung. Ein falsch angeschlossener Luftfeuchtigkeitssensor führt zu einem (Fast-)Kurzschluss am Bus. In einem solchen Fall liegt die Spannung am Bus bei ungefähr +0,3V.
  5. Sensor defekt - Vermutet man einen defekten Sensor, dann sollte man diesen zum Test direkt ans Sensormodul anschließen (am besten einzeln an einen Bus). Da muss er auf jeden Fall funktionieren.

Hat man die optimale Sensor-Konfiguration gefunden, d.h. alle angeschlossenen Sensoren haben sich gemeldet und die Sensorbelegung entspricht der Realität, dann müssen die Sensoren noch richtig zugeordnet werden. Wie bereits beschrieben, sucht das Sensormodul jeden Bus mit einem bestimmten Algorithmus ab, wobei die Reihenfolge der an einem Bus gefundenen Sensoren durch ihren ROM-Code festgelegt wird. Bei der Sensorbelegung 33000200 vom Beschaltungsbeispiel weiter oben bekommen die Sensoren am Bus 1 die Kennungen 1, 2 und 3 zugewiesen, aber welcher ist nun Nummer 1? Man kann das zwar mit der Kenntnis des ROM-Codes und des Suchalgorithmus feststellen, aber es geht auch ohne weitere Hilfsmittel: Man erwärmt einfach einen Sensor mit den Fingern und beobachtet das Display. Dort wird sich ein Wert erkennbar erhöhen und das ist der gesuchte Sensor. Es kann etwas dauern, bis man die Änderung sieht, denn man muss unter Umständen einen kompletten Messzyklus abwarten. Zur Erinnerung: Gemessen wird nur in den ersten 900ms des Messzyklus, anschließend wird nur noch ausgelesen.

Bei den Luftfeuchtigkeitssensoren und deren Temperaturwerten ist diese Prozedur nicht notwendig. Hier darf nur ein Sensor an eine Busleitung angeschlossen werden und somit ist der Sensor an der niedrigsten Busnummer immer der Sensor 1 mit den Kennungen q (Temperaturwert) und x (Luftfeuchtigkeitswert). Hier müsste man außerdem wegen der Mittelwertbildung über die letzten 8 Werte recht lange auf eine Änderung warten.

Wichtig: Man sollte sich eine Liste mit allen Temperatur- und Luftfeuchtigkeitssensoren anfertigen und genau notieren, wo sie installiert sind, an welchem Bus sie angeschlossen sind und welche Kennung vom Sensormodul zugewiesen wurde. Diese Liste wird später für die Konfiguration der Anzeigemodule gebraucht und dürfte bei Problemen sehr hilfreich sein. Gleiches gilt übrigens auch für die Alarm-Eingänge.

SymbolBedienung

Ich habe das Messsystem so entworfen, dass alle Einstellungen an den Anzeigemodulen (bzw. einer PC-Software) erfolgen und im laufenden Betrieb praktisch nichts am Sensormodul 2 bedient werden muss, da dieses unter Umständen an einem schlecht zugänglichen Ort installiert sein kann. Es ist aber möglich, über den Taster eine bestimmte Anzeige auszuwählen und es können auch einige Einstellungen vorgenommen werden. Grundsätzlich gibt es 3 verschiedene Anzeige-Ebenen:

Automatische AnzeigeDie Anzeige wechselt automatisch zwischen den Temperatursensorgruppen 1-8, A-H (9-16), I-P (17-24) sowie der Luftdruck- und Luftfeuchtigkeitsgruppe Q-Z, wobei ein Pfeilsymbol immer auf den aktuell bearbeiteten Sensor zeigt. Bei Auslösung eines Alarms wird kurzzeitig zur Alarmanzeige gewechselt.
Manuelle AnzeigeDie Anzeige kann dauerhaft auf eine Sensorgruppe, die Alarm-, die Statusanzeige oder eine der ROM-Code-Seiten eingestellt werden.
EinstellungenIn dieser Ebene können nacheinander über 4 Menü-Bildschirme einige Einstellungen vorgenommen werden.
Display 1 Beim Einschalten des Sensormoduls erscheint für 10s das nebenstehende Bild. Während dieser Zeit werden zwecks Reset aller Sensoren die Busleitungen abgeschaltet und ein Fortschrittsbalken aus Minus-Zeichen ist zu sehen. Während dieser Zeit sind keine Eingaben möglich. Anschließend wird zu Statusanzeige gewechselt.

Display 3 Diese Statusanzeige gibt einen Überblick über die installierte Software und die angeschlossenen Sensoren. Hier sind 17 Temperatursensoren, 1 Luftdrucksensor und 2 Luftfeuchtigkeitssensoren angeschlossen. Die Zeile 3 zeigt die bereits beschriebene Belegung der Sensorbusse an. Der aktuelle Betriebs-Modus erscheint in Zeile 4, hier steht entweder Direkt, Speicher oder Update, eine genaue Erklärung folgt im Abschnitt Einstellungen weiter unten. Auch während dieser Anzeige sind noch keine Eingaben möglich. Nach einer Wartezeit von 5s wird in die automatische Anzeige gewechselt.

SymbolAutomatische Anzeige

Display 4 Bei der automatischen Anzeige kann man ohne weitere Bedienung den gesamten Messzyklus verfolgen und alle aktuellen Daten ablesen. Zunächst wird die Temperatursensorgruppe 1-8 angezeigt. Dabei wandert ein Pfeilsymbol über das Display und zeigt an, welcher Sensor gerade gelesen wird. Auf dem Bild ist gerade Temperatursensor 2 an der Reihe.

Display 5 Wenn die Sensoren 1-8 fertig bearbeitet worden sind, schaltet die Anzeige auf die Temperatursensorgruppe A-H (9-16) um. Auch hier zeigt das Pfeilsymbol auf den gerade bearbeiteten Sensor, hier der Sensor G bzw. 15.

Hinweis: Diese Anzeige ist nur dann zu sehen, wenn mehr als 8 Temperatursensoren im System installiert sind.

Display 6 Anschließend wird die Anzeige auf die Temperatursensorgruppe I-P (17-24) umgeschaltet. Auch hier zeigt wieder das Pfeilsymbol auf den gerade bearbeiteten Sensor. Auf diesem Bild wird der einzige Sensor I bzw. 17 bearbeitet.

Hinweis: Diese Anzeige ist nur dann zu sehen, wenn mehr als 16 Temperatursensoren im System installiert sind.

Display 7 Nach den Temperatursensorgruppen kommen Luftdruck- und Luftfeuchtigkeitssensoren an die Reihe. Hier ist ebenfalls das wandernde Pfeilsymbol zu sehen, welches auf den gerade bearbeiteten Sensor zeigt. Auf diesem Bild ist gerade der Temperaturwert des Luftfeuchtigkeitssensors 1 in Bearbeitung (Kennung Q).

Hinweis: Diese Anzeige ist nur dann zu sehen, wenn mindestens 1 Luftdruck- oder Luftfeuchtigkeitssensor im System installiert ist.

Beim letzten Sensor bleibt das Pfeilsymbol etwas länger stehen. Das ist beabsichtigt und verschafft etwas mehr Zeit zum Ablesen. Hier wird beim anschließenden Beginn eines neuen Messzyklus die Messphase (Zeitpunkt 0 - 1000ms) noch zur Anzeige genutzt. Bei Bearbeitung des ersten Sensors wird dann wieder auf die Seite mit den Temperatursensoren 1-8 gewechselt und der Zyklus fortgesetzt. Die automatische Anzeige läuft ohne Benutzereingriff endlos und kann nur durch eine Alarmmeldung kurzzeitig unterbrochen werden.

Display 8 Wird an einem der 4 Alarm-Eingänge ein Alarm erkannt oder verschwindet ein Alarm, dann erscheint für 3 Sekunden die Alarmanzeige. Ein Pfeilsymbol zeigt dabei auf den Alarm, dessen Status sich geändert hat. Treten während dieser Anzeige weitere Alarme auf, dann wird der Anzeige-Timer wieder auf 3 Sekunden gesetzt und das Pfeilsymbol auf das neue Ereignis gerückt. Nach Ablauf der 3 Sekunden erscheint wieder die Sensorgruppe, die gerade bearbeitet wird.

Die Symbole haben folgende Bedeutung:

Display 9Der Alarmkontakt ist geöffnet.
Display 10Der Alarmkontakt ist geschlossen.

Im Bild weiter oben kann man erkennen, dass zurzeit der Alarmkontakt 3 geschlossen ist. Die Alarmanzeige wurde aber hier durch das Öffnen von Alarmkontakt 1 ausgelöst.

SymbolManuelle Anzeige

Die bereits beschriebenen Anzeigen für die verschiedenen Sensorgruppen und die Alarme wechseln im Automatik-Betrieb immer so, dass man die aktuellen Ereignisse verfolgen kann. Manchmal möchte man aber eine dieser Anzeigen für Diagnose-Zwecke festsetzen, z.B. um einen bestimmten Sensorwert oder einen bestimmten Alarm beobachten zu können und hier kommt der Taster zum Einsatz. Das Sensormodul unterscheidet zwischen einem kurzen Tastendruck (kleiner als 2 Sekunden) und einem langen Tastendruck (mindestens 2 Sekunden). An dieser Stelle soll es zunächst um den kurzen Tastendruck gehen, der lange wird weiter unten für die Einstellungen benötigt.

Display 11 Der erste kurze Tastendruck während der Automatik-Anzeige schaltet die Automatik ab und führt immer zur Anzeige der Temperatursensorgruppe 1-8. Die manuelle Anzeige erkennt man an einem kleinen Dreiecksymbol in der rechten unteren Ecke. Dieses soll auf den manuellen Modus hinweisen und symbolisieren, dass noch weitere Seiten folgen. Weiterhin wird bei der manuellen Anzeige das wandernde Pfeilsymbol ausgeblendet. Die Anzeige bleibt nun solange in diesem Zustand, bis der Taster erneut gedrückt wird. Auch ein auftretender Alarm wird nicht auf dem Display angezeigt, aber selbstverständlich über RS-232 gesendet.
Display 12 Ein weiterer kurzer Tastendruck führt zur Anzeige der Sensorgruppe A-H (9-16), sofern mehr als 8 Temperatursensoren installiert sind. Anderenfalls wird zu den Luftdruck- und Luftfeuchtigkeitssensoren oder zur Alarmanzeige gesprungen (abhängig von der Sensorbeschaltung).

Display 13 Ein weiterer kurzer Tastendruck führt zur Anzeige der Sensorgruppe I-P (17-24), sofern mehr als 16 Temperatursensoren installiert sind. Anderenfalls wird zu den Luftdruck- und Luftfeuchtigkeitssensoren oder zur Alarmanzeige gesprungen (abhängig von der Sensorbeschaltung).

Display 14 Ein weiterer kurzer Tastendruck führt zur Anzeige des Luftdrucksensors und der Luftfeuchtigkeitssensorgruppe Q-S bzw. X-Z, sofern mindestens einer dieser Sensoren installiert ist. Anderenfalls wird zu Alarmanzeige gesprungen.

Display 15 Der nächste kurze Tastendruck ruft die Alarmanzeige auf und auch hier wird (wie bei den Anzeigen zuvor) ein Dreiecksymbol rechts unten eingeblendet.

Display 16 Der nächste kurze Tastendruck aktiviert die Statusanzeige. Hier werden die gleichen Daten wie beim Start des Sensormoduls angezeigt: die Hardwareversion (Sensormodul 2 oder 3), die Softwareversion, die Anzahl der installierten Sensoren, die Sensorbelegung und der eingestellte Modus (Direkt oder Speicher).

Display 17 Ein weiterer Tastendruck führt zur ROM-Code-Liste. Hier werden alle am 1-Wire-Netzwerk angeschlossenen Sensoren aufgelistet, wobei immer 4 Sensoren auf einer Seite angezeigt werden. Auf der ersten Seite sind (so wie auf diesem Bild) die ROM-Codes der Sensoren mit der Kennung 1-4 zu sehen. Auf das Dreiecksymbol musste hier aus Platzgründen verzichtet werden.

Die Daten sind am Beispiel der Zeile 4 folgendermaßen zu lesen:

4-2   A400080040630910
4Sensorkennung
-Trennzeichen
2Bus, an dem der Sensor angeschlossen ist
A400080040630910  ROM-Code des Sensors (A4 - CRC8, 000800406309 - Seriennummer, 10 - Family-Code)
Display 18 Ein weiterer Tastendruck führt zur nächsten Seite der ROM-Code-Liste. Hier sind die Sensoren mit der Kennung 5-8 zu sehen.

Display 19 Ein weiterer Tastendruck führt zur nächsten Seite der ROM-Code-Liste. Hier sind die Sensoren mit der Kennung A-D zu sehen.

Display 20 Ein weiterer Tastendruck führt zur nächsten Seite der ROM-Code-Liste. Hier sind die Sensoren mit der Kennung E-H zu sehen.

Display 21 Ein weiterer Tastendruck führt zur letzten Seite der ROM-Code-Liste in dieser Konfiguration. Hier ist der letzte Temperatursensor mit der Kennung I und die beiden Luftfeuchtigkeitssensoren mit den Kennungen Q und R zu sehen.

Bei der ROM-Code-Anzeige hängt die Anzahl der Seiten von der Anzahl der installierten Sensoren ab. Sind noch keine Sensoren angeschlossen, dann wird die ROM-Code-Anzeige komplett übersprungen. Der Luftdrucksensor wird hier übrigens nicht aufgelistet, da er nicht am 1-Wire-Netzwerk angeschlossen ist.

Ein weiterer kurzer Tastendruck verlässt die manuelle Anzeige und schaltet wieder in die automatische Anzeige um. Es erscheint dann die Sensorgruppe, die gerade bearbeitet wird. Während der manuellen Anzeige arbeitet das Sensormodul selbstverständlich im Hintergrund weiter, aktualisiert die interne Messwert-Tabelle und sendet die ermittelten Daten über die RS-232-Schnittstelle. Auch die Alarmeingänge werden weiterhin abgefragt und auftretende Ereignisse gesendet.

SymbolEinstellungen

Mit einem langen Tastendruck (länger als 2 Sekunden) gelangt man in die Einstellungen. Es spielt dabei keine Rolle, ob die automatische oder die manuelle Anzeige aktiv ist - nach Ablauf der 2 Sekunden erscheint immer das erste Einstellungs-Menü.

Die Bedienung läuft in allen Einstellungs-Menüs grundsätzlich gleich ab:

Langer TastendruckÄndern der aktuellen Einstellung.
Kurzer TastendruckWeiter zum nächsten Menü bzw. Verlassen der Einstellungen nach dem letzten Menü.

In den unteren beiden Zeilen des Displays wird ein entsprechender Bedienungshinweis ausgegeben. Technisch bedingt wird die Aktion für den kurzen Tastendruck (Weiter zum nächsten Menü bzw. Ende) erst ausgeführt, wenn der Taster wieder losgelassen wurde.

Display 22 Das erste Menü ermöglicht die Einstellung des Betriebs-Modus. Zur Auswahl stehen hier die Modi Direkt und Speicher und ein langer Tastendruck schaltet immer in den jeweils anderen Modus um.

Wenn ein neues Sensormodul 2 oder 3 in Betrieb genommen wird, dann befindet es sich zunächst im Direkt-Modus. In diesem Modus werden bei jedem Start des Moduls alle 1-Wire-Busse nach Sensoren abgesucht (beim Sensormodul 3 wird zusätzlich geprüft, ob ein Luftdrucksensor angeschlossen ist) und das Modul arbeitet direkt mit der vorgefundenen Sensorkonfiguration. Dieser Modus sollte beim Aufbau des Sensornetzes verwendet werden und erst wenn alle Sensoren im Netz wie gewünscht funktionieren, ist ein Wechsel in den Speicher-Modus sinnvoll. Beim Umschalten in den Speicher-Modus wird die aktuelle Sensorkonfiguration ins EEPROM kopiert und bei allen folgenden Neustarts des Moduls wird die Sensorsuche übersprungen und stattdessen die im EEPROM hinterlegte Sensorkonfiguration verwendet.

Der Sinn des Speicher-Modus ist folgender: Es kann passieren, dass sich im laufenden Betrieb ein Sensor nicht mehr meldet, weil vielleicht irgendwo ein Draht abgerissen ist. Dieser Zustand wird sowohl vom Sensormodul als auch von den angeschlossenen Anzeigemodulen erkannt und ist zunächst nicht problematisch. Wenn allerdings in dieser Situation die Stromversorgung ausfällt, dann wird beim Anlaufen des Systems eine neue Sensorsuche gestartet. Hier wird natürlich der ausgefallene Sensor nicht gefunden und das Sensormodul arbeitet so, als hätte es den Sensor nie gegeben. Das bedeutet: Die Sensor-Kennungen werden neu vergeben und das hat zur Folge, dass Werte mit falscher Sensorkennung übertragen werden und die angeschlossenen Geräte falsche Daten empfangen. Um das zu verhindern, habe ich den Speicher-Modus implementiert. In diesem Modus wird, wie schon erwähnt, die Sensorkonfiguration beim Systemstart aus dem EEPROM geladen und keine Sensorsuche durchgeführt. Somit ist gewährleistet, dass auch bei einem Fehler im Sensornetz die Zuordnung immer korrekt ist und keine falschen Werte zu den Datenempfängern gesendet werden.
Display 23 Ein kurzer Tastendruck wechselt in das nächste Einstellungs-Menü. Hier kann das Sende-Intervall eingestellt werden, also die Zeit zwischen zwei Datenpaketen mit Sensorwerten. In der weiter oben stehenden Messzyklus-Tabelle beträgt diese Zeit (ebenso wie im nebenstehenden Bild) 1000 Millisekunden. Dieser Wert ist als Grundeinstellung vorgegeben, lässt sich aber über dieses Menü ändern. Mögliche Werte sind: 100 ms, 250 ms, 500 ms, 750 ms und 1000 ms. Ein langer Tastendruck schaltet dabei immer auf den nächsten Wert weiter.

Bei kleinen Systemen mit wenigen Sensoren kann die Voreinstellung übernommen werden. Bei einer größeren Sensoranzahl empfiehlt es sich, das Sende-Intervall zu verkürzen. Die Änderung wirkt sich übrigens nur auf die Zeitpunkte ab 1000ms der Messzyklus-Tabelle aus, das erste Intervall von 0 bis 1000ms bleibt immer gleich. Ein sehr kurzes Sende-Intervall führt dazu, dass die automatische Anzeige am Sensormodul nicht mehr vernünftig abgelesen werden kann. Hier muss man bei Bedarf auf die manuelle Anzeige zurückgreifen.

Display 24 Mit einem kurzen Tastendruck gelangt man in das nächste Menü. Hier lässt sich die Verzögerungszeit der Alarm-Eingänge einstellen. Bei Status-Änderung eines Alarm-Eingangs wird zunächst die hier eingestellte Zeit abgewartet und nur wenn der neue Alarmzustand während dieser Zeit stabil bleibt, wird dieser angezeigt und weitergemeldet. Die Grundeinstellung ist hier 500 Millisekunden und mögliche Werte sind: 250 ms, 500 ms, 750 ms und 1000 ms. Auch in diesem Menü schaltet ein langer Tastendruck auf den nächsten Wert weiter.
Display 25 Ein weiterer kurzer Tastendruck führt ins letzte Menü. Mit einem langen Tastendruck lässt sich hier die Menüführung auf Englisch und auch wieder zurück auf Deutsch schalten, die Grundeinstellung ist Deutsch. Die Einstellung der Sprache beeinflusst nicht nur die Einstellungs-Menüs, sondern auch die Statusanzeige, die Alarmanzeige und einige Sensornamen.

Der nächste kurze Tastendruck verlässt die Einstellungen und führt immer zurück zur automatischen Anzeige. Gleiches passiert auch, wenn in den Einstellungs-Menüs eine Minute lang keine Eingabe erfolgt. Alle in diesen Menü-Dialogen eingestellten Werte werden dauerhaft im EEPROM gespeichert. Damit bleiben sie nach einem Stromausfall erhalten und bei richtiger Einstellung der Fuse-Bits auch bei einem Software-Update.

Hinweis: Es gibt hier keine Repeat-Funktion, d.h. es wird immer nur ein einzelner Tastendruck erkannt. Beim Ändern des Sende-Intervalls oder der Alarm-Zeit muss man also gegebenenfalls mehrmals lang drücken, um den gewünschten Wert einzustellen. Weiterhin wird sehr kurzes Antippen des Tasters unter Umständen nicht erkannt. Das liegt daran, dass der Taster nur alle 50 ms abgefragt wird und immer 2 Abfragen zur Erkennung des Tastendrucks notwendig sind. Also einfach den Taster ein wenig länger drücken und dann sollte alles normal funktionieren. Aber bitte nicht länger als 10 Sekunden drücken, sonst wird die Update-Funktion aktiviert.

Während der Anzeige der Einstellungs-Menüs arbeitet das Sensormodul im Hintergrund normal weiter, aktualisiert die interne Messwert-Tabelle und sendet die ermittelten Daten über die RS-232-Schnittstelle. Auch die Alarmeingänge werden weiterhin abgefragt und auftretende Ereignisse gesendet.

SymbolUpdate-Funktion

Diese Funktion wurde in die Software-Version 2.10 implementiert und soll einen Schwachpunkt des Temperaturmesssystems beseitigen. Bei Erweiterungen eines bestehenden Sensornetzwerks war es bisher erforderlich, den Modus des Sensormoduls vorübergehend auf Direkt umzustellen. So wird beim nächsten Neustart eine Sensorsuche begonnen und die geänderte Sensorkonfiguration erfasst. Dabei werden allerdings alle Sensoren (abhängig von Busnummer, Family-Code und Seriennummer) neu geordnet und es kann zu Verschiebungen bei den Sensorkennungen kommen. Als Folge davon zeigen die Anzeigemodule falsche Daten an und Log-Dateien werden verfälscht. Um diese Verschiebungen zu korrigieren, musste bisher an allen angeschlossenen Anzeigemodulen eine spezielle Zuordnungstabelle bearbeitet werden und das kann je nach Anzahl der angeschlossenen Module sehr aufwändig sein.

Die Update-Funktion geht anders vor: Diese lädt zunächst die gespeicherte Konfiguration aus dem EEPROM und startet zusätzlich eine neue Sensorsuche. Durch einen Vergleich der beiden Listen werden alle neuen Sensoren identifiziert und die Anzahl auf dem Display angezeigt. Nach Bestätigung fügt die Update-Funktion alle neuen Sensoren an die bisherige Liste an und speichert anschließend die aktualisierte Liste im EEPROM. Alle bereits installierten Sensoren behalten somit ihre Kennungen. Natürlich ist es trotzdem erforderlich, die Anzeigemodule zu konfigurieren, sofern sie die Werte der neuen Sensoren darstellen sollen. Aber man muss sich keine Sorgen mehr über falsche Anzeigen bzw. Log-Files machen.

Wenn die Installation neuer Sensoren geplant ist, dann sollte zunächst sichergestellt sein, dass sich das Sensormodul im Speicher-Modus befindet. Danach können die neuen Sensoren installiert und am gewünschten Bus angeschlossen werden. Das kann man durchaus im laufenden Betrieb tun - dann sieht man auch gleich, on man ordentlich gearbeitet hat. Normalerweise wird die Funktion der Sensorbusse nicht gestört, wenn man weitere Sensoren hinzufügt. Sollten jedoch einzelne Sensoren oder ganze Busleitungen dauerhaft ausfallen, dann hat man offensichtlich einen Fehler gemacht (Masse und Datenleitung vertauscht oder ein Kabel ist zu lang). Für diese Arbeiten sollte man sich etwas Zeit nehmen und erst dann mit dem nächsten Schritt fortfahren, wenn das Netzwerk durch die zusätzlichen Sensoren nicht gestört wird und weiterhin stabil läuft.

Jetzt muss am Sensormodul die Update-Funktion gestartet werden, damit die neuen Sensoren ins System eingebunden werden. Dazu ist es erforderlich, den Taster am Modul für mindestens 10 Sekunden zu drücken. Nach 2 Sekunden erscheint zunächst das erste Einstellungs-Menü - das ist normal und nach Ablauf der 10 Sekunden wird das Sensormodul neu gestartet.

Display 1 Jetzt erscheint wie bei einem normalen Start das nebenstehende Bild mit dem Fortschrittsbalken und der Taster kann wieder losgelassen werden. Anschließend wird zur Statusanzeige gewechselt.

Display 26 Die Statusanzeige informiert über die bisher gespeicherte Einstellung. Am Modus Update kann man erkennen, dass die Update-Funktion aktiv ist. Nach 5 Sekunden verschwindet die Statusanzeige und das folgende Bild erscheint.

Display 27 Dieses Bild zeigt eine kurze Übersicht über die gefundenen neuen Sensoren. In diesem Beispiel sind 2 neue Temperatursensoren hinzugekommen, die Anzahl der Luftdruck- und Luftfeuchtigkeitssensoren hat sich nicht geändert. An dieser Stelle wartet das Sensormodul auf eine Reaktion des Bedieners und es gibt hier 2 Möglichkeiten:

Stimmt die Anzeige nicht mit der Realität überein, dann sollte man an dieser Stelle abbrechen, indem man das Sensormodul aus- und wieder einschaltet. In diesem Fall startet das Modul mit der bisher gespeicherten Konfiguration neu und das System bleibt auf dem alten Stand. Stimmt die Anzahl, dann kann man mit einem langen Tastendruck (>2 Sekunden) die neuen Sensoren hinzufügen.

Display 28 Als Bestätigung wird wie im nebenstehenden Bild ein ok angezeigt. Jetzt befindet sich die neue Konfiguration im EEPROM und das Sensormodul muss neu gestartet werden. Der nächste Start erfolgt dann wieder im Speicher-Modus und die Anzahl der Sensoren sowie die Sensorbelegung zeigt nun die neue Konfiguration.

Die Update-Funktion kann jederzeit aufgerufen werden, um neue Sensoren ins System einzubinden. Das funktioniert mit Temperatursensoren, Luftfeuchtigkeitssensoren und auch mit dem Luftdrucksensor, wobei die Anzahl der hinzugefügten Sensoren keine Rolle spielt. Die technischen Grenzen können allerdings nicht überschritten werden: mehr als 24 Temperatur-, 1 Luftdruck- und 3 Luftfeuchtigkeitssensoren werden nicht akzeptiert. Nach einem Update sollte der Direkt-Modus nie wieder verwendet werden - anderenfalls würden die Sensoren wieder nach Busnummer, Family-Code und Seriennummer geordnet.

Das Entfernen oder Verändern von Sensoren wird von der Update-Funktion nicht unterstützt. Ich hätte das gern noch eingebaut, aber der Flash-Speicher des ATmega8 reicht leider nicht aus und ich wollte keinen anderen Mikrocontroller verwenden und auch keine andere Funktion dafür opfern. Aus dem gleichen Grund mussten die Anzeigen auf dem LCD auf das Nötigste reduziert werden.

Hinweis: Solange die Update-Funktion aktiv ist, werden außer der Sensorbelegung keine Daten über die RS-232 gesendet.

SymbolSonstiges

Selbstverständlich kann der gesamte Quellcode geändert und an die eigenen Bedürfnisse angepasst werden. Auch ohne Programmierkenntnisse bieten sich hier einige Möglichkeiten. Etwas Erfahrungen im Umgang mit dem AVR-Studio bzw. Atmel Studio vorausgesetzt, kann man die Texte am Ende des Quellcodes ändern und anpassen. Damit lässt sich z.B. die Menüführung in einer anderen Sprache als Deutsch und Englisch realisieren. Hier muss man aber immer auf die Textlängen achten und selbst dafür sorgen, dass sich ein gutes Bild auf dem Display ergibt. Auch die Namen der Sensoren können geändert werden, hier ist jedoch nur wenig Spielraum und die Längen sind auf 4 bzw. 2 Zeichen festgelegt. Grundsätzlich muss man Zeichen, die nicht im ASCII enthalten sind, durch einen Code ersetzen, den das Display versteht. Die Codes für die kleinen deutschen Umlaute sind in einer Kommentarzeile enthalten, bei anderen Zeichen hilft ein Blick ins Datenblatt des Displays.

Zum Schluss noch ein Hinweis für Nutzer des Sensormoduls 1: Obwohl die Schaltpläne von Sensormodul 2 und 3 anders gezeichnet sind, so sind sie dennoch in großen Teilen identisch zum Sensormodul 1. Es ist also mit relativ wenig Aufwand möglich, ein Sensormodul 1 zum Sensormodul 2 oder 3 umzurüsten. Ich empfehle in diesem Fall ein Upgrade auf das Sensormodul 3, auch wenn man zunächst keinen Luftdrucksensor installieren möchte. Folgende Schritte sind nötig:

  1. Entfernen des alten I²C Displays und K2 (falls vorhanden) sowie der zum Display gehörenden Bauteile P1 und C13 (siehe Schaltplan vom Sensormodul 1)
  2. Entfernen der beiden Jumper J1 und J2
  3. Anschluss des neuen Displays IC4 und der neuen Bauteile R14, P1 und C13
  4. Anschluss des Taster S1 und des neuen Widerstandes R16
  5. Die Widerstände R9-R12 haben beim Sensormodul 3 andere Werte, diese müssen aber nicht geändert werden
  6. Optional: Anschluss der neuen Luftdrucksensor-Bauteile IC5, R15, C14 und C15
  7. Der ISP-Steckverbinder K3 heißt im neuen Sensormodul K2, die Beschaltung bleibt aber unverändert
  8. Programmieren des Controllers mit der Software für das Sensormodul 3

Nach Abschluss dieser Arbeiten ist eine Neu-Konfiguration des Moduls notwendig. Diese wird in den Abschnitten Inbetriebnahme und Bedienung beschrieben und ist schnell erledigt. Die Reihenfolge der Sensoren bleibt auf jeden Fall gleich, da der Suchalgorithmus aller Sensormodule identisch ist.


Startseite - Seitenanfang

Allgemeines - Projekt-Überblick - Links, Software - Neuigkeiten - „Klassiker“ - Galerie - Impressum

AVR-Programmierung - Multifunktionsuhr - Matrixuhr - Tischuhr - Wohnraumuhr - Wohnraumuhr 2 - Wecker - LCD-Wecker - Zahnputzuhr - BigBen-Türgong - Fahrtregler - EPROM-Programmiergerät - Temperaturmesssystem - USB-RS232 Interface - Weihnachtsstern - Kleine Projekte