Projekt: Temperatur-Messsystem - Anzeigemodul 1


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: 21.03.2013

SymbolDownloads

Schaltplan Anzeigemodul 1am1-sch.zip
Stückliste mit Empfehlungen zur Bauteilbestellungam1-stkl.htm
Software v1.06 für AT90S2313 oder ATtiny2313 vom 24.10.2006 (Assembler) - alte Version, unterstützt nur 16 Temperatursensorenam1-v106.zip
Software v2.00 für ATtiny4313 vom 21.03.2013 (Assembler) mit einigen Beispielkonfigurationenam1-v200.zip

SymbolInhaltsverzeichnis

BeschreibungAllgemeine Informationen über das Anzeigemodul 1
SchaltungBeschreibung der Schaltung des Anzeigemoduls 1
HardwareBilder und Hinweise zum Aufbau des Anzeigemoduls 1
SoftwareBeschreibung der Software des Anzeigemoduls 1
InbetriebnahmeInbetriebnahme und erster Funktionstest des Anzeigemoduls 1
KonfigurationErstellen einer Konfigurations-Datei für das EEPROM des Anzeigemoduls 1
BedienungBedienungsanleitung und Beschreibung aller Funktionen

SymbolBeschreibung

Dieses kleine Anzeigemodul ermöglicht die ständige Anzeige von bis zu 8 Sensorwerten auf einem Standard-LCD mit 4 x 20 Zeichen. Die gesamte Steuerung übernimmt hier ein ATtiny4313. Es können alle vom Sensormodul 2 oder 3 gesendeten Sensorwerte angezeigt werden, bei der Konfiguration kann man die gewünschten Sensoren festlegen. Neben der Anzeige von 8 Sensoren mit kurzen Namen (4 Zeichen) besteht auch die Möglichkeit, 4 Sensoren mit einem langen Namen (14 Zeichen) darzustellen. Bei Temperatursensoren kann zusätzlich ein oberer und ein unterer Grenzwert festgelegt werden. Bei dessen Über- oder Unterschreitung ertönt ein kurzes Tonsignal und ein Symbol hinter dem betroffenen Temperaturwert beginnt zu blinken. Wird ein Alarm an den 4 Eingängen des Sensormoduls erkannt, dann erfolgt die Signalisierung über eine rote LED und einen Signalton. Zusätzlich werden die aktiven Alarme im Wechsel mit den Sensorwerten auf der untersten Zeile im Klartext angezeigt. Mit einem Taster kann die Alarmanzeige vorübergehend abgeschaltet werden. Falls die Datenverbindung zwischen Sensor- und Anzeigemodul ausfällt, dann wird dies entsprechend signalisiert. Auch der Ausfall eines einzelnen Sensors wird angezeigt.

Alle Eigenschaften in Stichpunkten:

SymbolSchaltung

Schaltung

Dieses Modul entstand als erstes Anzeigemodul des Messsystems und ist recht einfach aufgebaut. Der ursprünglich als zentrales Bauteil verwendete Mikrocontroller AT90S2313 musste durch einen ATtiny4313 ersetzt werden, damit genügend Platz für die aktuelle Software zur Verfügung steht. Der Controller arbeitet hier mit einer Taktfrequenz von 4MHz. Die vom Sensormodul empfangenen Daten gelangen zunächst zu einem einfachen Pegelwandler (R1, D2 und Tr1). Dieser sorgt sowohl für eine Pegelanpassung von RS-232 auf 5V-CMOS als auch für die nötige Invertierung des Datensignals. Der Controller liest die gewandelten Daten am Port PD0 ein, prüft und speichert die empfangenen Informationen und gibt sie schließlich in geeigneter Form über die Anschlüsse PB0-PB7 sowie PD2 und PD3 auf den Steckverbinder K1 aus. An diesem ist ein alphanumerisches 4-zeiliges Standard-LCD (HD44780) mit 20 Zeichen pro Zeile angeschlossen. Eine Hintergrundbeleuchtung ist hier nicht vorgesehen (ich verwende ein Display ohne Beleuchtung), kann aber problemlos nachgerüstet werden. Dafür ist lediglich ein längerer Steckverbinder und ein passender Widerstand erforderlich.

Weitere Ports des Controllers dienen zum Anschluss des Tasters (PD1), zum Ansteuern einer LED für die optische Signalisierung (PD4) und zur Freigabe des Tongenerators für die akustische Signalisierung (PD5). Der Tongenerator besteht aus einem CMOS-IC mit 4 NAND-Gattern und Schmitt-Trigger-Eingängen (IC3). Das Gatter 1 wird als Oszillator betrieben und erzeugt die Tonfrequenz (ca. 3-4kHz), die Gatter 2 und 4 bilden einen Gegentakt-Treiber für den Piezo-Schallwandler. Über einen High-Pegel am Portanschluss PD5 wird der Oszillator und die Treiberstufe freigegeben, wenn ein Ton erzeugt werden soll. Der in der Schaltung angegebene Schallwandler stammt aus einer defekten Waschmaschinensteuerung und kann durch einen anderen Typ mit 4 kHz Resonanzfrequenz ersetzt werden. Es ist auch möglich, einen Gleichstrom-Piezosummer (mit internem Oszillator) zu verwenden, in diesem Fall lässt man einfach IC3, R5, R6, P2 und C8 weg und schließt den Summer direkt zwischen PD5 und Masse an. Eine Lautstärkeeinstellung ist dann z.B. über einen regelbaren Vorwiderstand möglich.

3 Portanschlüsse des Controllers werden doppelt verwendet: PB5-PB7. Über diese 3 Leitungen und den Reset-Anschluss des Controllers kann dieser programmiert werden (ISP-Steckverbinder K2). Durch die Mehrfachnutzung für ISP und LCD zeigt das Display während des Programmiervorgangs möglicherweise wirre Zeichen an - diese verschwinden aber am Ende des Programmiervorganges wieder. Ansonsten sind keine weiteren Nebenwirkungen zu befürchten.

Die übrigen Bauteile dienen zur Erzeugung einer stabilisierten Spannung von 5V für das Anzeigemodul. Die Stromaufnahme der Schaltung beträgt im normalen Betrieb (LED und Ton aus) weniger als 20mA. Hier kann ein einfaches Steckernetzteil mit einer Ausgangsspannung zwischen 10 und 20V verwendet werden. Wird ein Display mit Hintergrundbeleuchtung verwendet, dann sollte der Spannungsregler IC5 gut gekühlt werden. Ohne Beleuchtung ist keine Kühlung erforderlich. Falls für die Verbindung zwischen Sensor- und Anzeigemodul ein 4-adriges Kabel zur Verfügung steht, dann sollte man beide Geräte aus einem gemeinsamen Netzteil versorgen. Wie schon beim Sensormodul beschrieben, sind alle Module meines Messsystems an einem gemeinsamen 12V-Netzteil angeschlossen, welches sich in der Nähe des Sensormoduls befindet.

Alle für das Anzeigemodul 1 benötigten Bauelemente sind in dieser Stückliste zu finden.

Hinweis: Das in meinem Anzeigemodul verwendete LCD ist leider nicht mehr erhältlich. Man kann aber jedes andere 4x20-Display mit HD44780-Controller nehmen, allerdings sollte auf die Anschlussbelegung geachtet werden, die durchaus von der Schaltung (K1) abweichen kann.

SymbolHardware

Platine Oberseite

Das Anzeigemodul 1 wurde komplett auf einer Lochrasterplatine aufgebaut. Links unten befindet sich der Mikrocontroller IC2, der Quarz und der RS-232 Pegelwandler, rechts daneben IC3 und der Piezo-Schallwandler. Der Spannungsregler und die Anschlüsse für Spannung und RS-232 sind rechts oben angeordnet. Die Aussparung neben den Anschlüssen bietet später Platz für das Anschlusskabel.

Ganz rechts ist etwas erhöht der Taster und die LED montiert. Unterhalb des Tasters befinden sich die Potentiometer für den LCD-Kontrast (links) und die Alarmlautstärke (rechts).

Den Steckverbinder K1 gibt es bei meinem Aufbau nur virtuell - ich habe das LCD mit einem kurzen Stück Flachbandkabel direkt an die Platine angelötet. Wegen des unterschiedlichen Rastermaßes von LCD und Kabel wurde nur jeder 2. Draht benutzt.

Dieses Bild zeigt übrigens noch die ursprüngliche Version des Anzeigemoduls 1 mit einem AT90S2313 Mikrocontroller, die aktuelle Version sieht aber (abgesehen vom Controller) noch genau so aus.

Platine fertig Das LCD habe ich mit 4 Schrauben in einem Abstand von etwa 14,5mm parallel zur Platine montiert. Es können deshalb auf der Platine nur Bauelemente verwendet werden, die maximal 10mm hoch sind, damit sie nicht mit den Bauteilen auf der LCD-Rückseite kollidieren.

Den ISP-Anschluss (Mitte unten) habe ich schräg eingelötet, damit man beim Anstecken des Programmierkabels nicht das LCD entfernen muss.

Platine Unterseite Auf der Rückseite befindet sich die Verdrahtung. Die Leitungen für Masse und Stromversorgung habe ich mit 0,5mm Draht verlegt. Alle anderen Verbindungen bestehen aus 0,3mm Kupferlackdraht.

Modul fertig Das komplette Anzeigemodul 1 passt genau in ein preiswertes Kunststoff-Gehäuse mit den Maßen 123mm x 30mm x 70mm. Wenn man genau arbeitet, dann kann auf eine Verschraubung mit dem Gehäuse verzichtet werden und die Platine sitzt nach dem Zusammensetzen der beiden Gehäuse-Halbschalen fest. Das Anschlusskabel habe ich (unter Putz) von hinten herangeführt, so dass es normalerweise nicht sichtbar ist.

SymbolSoftware

Die Software des Anzeigemoduls 1 wurde in AVR-Assembler geschrieben und besteht aus mehreren Teilen: der Initialisierung, der Hauptprogrammschleife und 2 Interrupt-Routinen.

Initialisierung: Diese wird bei jedem Systemstart oder Reset ausgeführt und stellt zunächst alle I/O-Ports ein, initialisiert einige Variablen, aktiviert den Empfänger der RS-232-Schnittstelle (RX) und konfiguriert den Timer1 für einen zyklischen Interrupt alle 20ms. Anschließend erfolgt die Initialisierung des LCD, die Übertragung einiger Sonderzeichen in den LCD-Speicher und für 10s die Anzeige eines Begrüßungstextes. Danach wird ein Teil der Konfiguration aus dem EEPROM ins RAM übertragen und die gesamte Konfiguration auf Plausibilität geprüft. Ist hier alles in Ordnung, dann wird zur Hauptprogrammschleife gesprungen, anderenfalls erscheint ein Fehlertext und die EEPROM-Adresse der Fehlerstelle auf dem Display.

Hauptprogrammschleife: Dieser Programmteil erledigt alle wichtigen Aufgaben des Anzeigemoduls und läuft in einer endlosen Schleife. Die Schleife beginnt mit der Steuerung der Alarm-LED, falls ein Alarm anliegt. Anschließend erfolgt die Abfrage des Tasters und abhängig davon das Setzen oder Löschen einiger Bits (Flags). Im nächsten Abschnitt werden die Sensordaten auf dem LCD ausgegeben oder alternativ ein Fehlertext, wenn die Datenverbindung länger als 20s unterbrochen ist. Danach werden verschiedene Timeout-Zähler geprüft und gegebenenfalls neu gesetzt (Erkennung von Sensorausfällen sowie Ausfall der Datenverbindung und Steuerung der Anzeigedauer von Alarmen). Falls Temperaturalarme erkannt werden, dann erfolgt anschließend die akustische Signalisierung. Nun wird der RS-232-Empfangspuffer gelesen und falls ein neuer Sensorwert vorliegt, wird zunächst der Sensortyp ermittelt und anschließend ein Plausibilitätstest durchgeführt. Wurde der Wert von einem der 8 konfigurierten Sensoren empfangen, dann wird dieser gespeichert und im Falle eines Temperatursensors folgt noch ein Vergleich mit den konfigurierten Limits und gegebenenfalls die Auslösung eines Temperaturalarms. Bei Empfang eines Luftdruckwertes wird dieser zusätzlich stündlich in einem Puffer mit 16 Plätzen gespeichert und aus diesen Daten die Tendenz ermittelt.

Der weitere Quelltext enthält einige Unterprogramme, die von der Hauptprogrammschleife verwendet werden: eine Multiplikationsroutine, ein Programm zur Abfrage des RS-232-Puffers, Programme zur Datenausgabe an das LCD, verschiedene Warteschleifen, ein Programm zum Lesen des EEPROMs und einige Konvertierungsprogramme.

Interrupt-Routinen: Insgesamt laufen 2 Interrupt-Routinen im Anzeigemodul 1, die folgende Funktionen ausführen:

USART Rx Complete: Dieser Interrupt wird immer dann ausgelöst, wenn ein Zeichen an der RS-232-Schnittstelle empfangen wurde. Die Routine legt dieses Zeichen in einem 64 Byte großen Ringpuffer ab und setzt einen Zeiger auf die neue Pufferposition.
Timer 1 Compare Match A: Dieser wird zyklisch alle 20ms ausgelöst und steuert die Tasterabfrage und die Soundausgabe. Einmal in jeder Sekunde werden zusätzlich verschiedene Timeout-Zähler bearbeitet und die Alarm-Wechselanzeige bedient. Weiterhin wird durch zwei Teilungszähler (256 und 14) dem Hauptprogramm alle 3584s mitgeteilt, dass der nächste Luftdruckwert in den Puffer geschrieben werden muss und eine neue Tendenzberechnung fällig ist.

SymbolInbetriebnahme

Die Inbetriebnahme des Anzeigemoduls 1 ist leider etwas aufwändiger. Da es ist nicht möglich ist, irgendwelche Einstellungen direkt am Modul durchzuführen, müssen alle Einstellungen (die anzuzeigenden Sensoren, Temperatur-Grenzwerte und die Konfiguration der Alarme) über eine Entwicklungsumgebung bearbeitet und assembliert werden. Ich habe für diesen Zweck das Atmel Studio 6 verwendet, auch das Programm selbst wurde damit erstellt. Das grundsätzliche Vorgehen zur Erstellung einer Konfiguration wird weiter unten beschrieben. Für einen ersten Funktionstest empfiehlt es sich, eine Beispielkonfiguration zu verwenden. Diese ist bereits fertig assembliert und kann direkt in den Mikrocontroller programmiert werden.

Das Paket am1-v200.zip enthält neben der Software v2.00 vom 21.03.2013 für den ATtiny4313 mehrere Beispielkonfigurationen. Die einzelnen Dateien haben folgende Funktion:

Anzeigemodul1.asmMikrocontroller-Programm, Assembler-Quelltext
Anzeigemodul1.hexMikrocontroller-Programm, fertiges Programm für den Flash-Speicher des ATtiny4313
Beispiel-01-08.incBeispielkonfiguration zur Anzeige der Sensoren 1-8, Assembler-Quelltext
Beispiel-01-08.eepBeispielkonfiguration zur Anzeige der Sensoren 1-8, fertige Konfiguration für das EEPROM
Beispiel-09-16.incBeispielkonfiguration zur Anzeige der Sensoren 9-16, Assembler-Quelltext
Beispiel-09-16.eepBeispielkonfiguration zur Anzeige der Sensoren 9-16, fertige Konfiguration für das EEPROM
Beispiel-17-24.incBeispielkonfiguration zur Anzeige der Sensoren 17-24, Assembler-Quelltext
Beispiel-17-24.eepBeispielkonfiguration zur Anzeige der Sensoren 17-24, fertige Konfiguration für das EEPROM
Beispiel-25-31.incBeispielkonfiguration zur Anzeige der Sensoren 25-31, Assembler-Quelltext
Beispiel-25-31.eepBeispielkonfiguration zur Anzeige der Sensoren 25-31, fertige Konfiguration für das EEPROM
Praxis-Beispiel 4 Sensoren.incBeispielkonfiguration aus der Praxis zur Anzeige von 4 Sensoren, Assembler-Quelltext
Praxis-Beispiel 4 Sensoren.eepBeispielkonfiguration aus der Praxis zur Anzeige von 4 Sensoren, fertige Konfiguration für das EEPROM
Praxis-Beispiel 8 Sensoren.incBeispielkonfiguration aus der Praxis zur Anzeige von 8 Sensoren, Assembler-Quelltext
Praxis-Beispiel 8 Sensoren.eepBeispielkonfiguration aus der Praxis zur Anzeige von 8 Sensoren, fertige Konfiguration für das EEPROM
AVR ProgTool Einstellung.pngDieses Bild zeigt die richtigen Einstellungen im myAVR ProgTool
Version.txtVersions-Historie

Unbedingt erforderlich ist die Datei Anzeigemodul1.hex, welche in den Flash-Speicher programmiert werden muss. Weiterhin erforderlich ist die Konfiguration, welche sich in einer eep-Datei befindet und in das EEPROM programmiert werden muss. Für den ersten Test empfehle ich die Datei Praxis-Beispiel 8 Sensoren.eep aus dem Software-Paket. Diese Konfiguration zeigt einige Temperaturen, den Luftdruck und einen Luftfeuchtigkeitswert an. Schließt man das so konfigurierte Anzeigemodul an ein bereits laufendes Sensormodul an, dann sollten auf jeden Fall einige Daten empfangen und angezeigt werden. Die folgende Beschreibung bezieht sich übrigens auf dieses Konfigurationsbeispiel und zeigt, wie man daraus eine eigene Konfiguration erstellen kann.

Programmierung Bei Verwendung des myAVR ProgTools sollte das Bild vor dem Start der Programmierung ungefähr so aussehen wie im nebenstehenden Bild. Wichtig: Zuerst auf der Seite Hardware die richtige Einstellung des Programmiergerätes kontrollieren und den richtigen Controller auswählen: ATtiny4313.

Ebenfalls wichtig sind die Fuse-Bits, die im Bild schon richtig eingestellt worden sind:

Low =0xFF
High =0x9B
Extended =0xFF

Wenn alle Einstellungen korrekt sind, dann wird auf den im Bild nicht sichtbaren Button Brennen geklickt.

Die Einstellung auf dem Bild gilt übrigens nur für eine Neuinbetriebnahme. Soll bei einem bestehenden System nur die Konfiguration geändert werden (z.B. Austausch der Beispielkonfiguration durch eine eigene), dann wählt man bei EEPROM brennen die gewünschte eep-Konfigurationsdatei aus und entfernt die Haken bei Flash brennen und Fuses brennen. Beim anschließenden Klick auf Brennen wird dann nur das EEPROM neu beschrieben.

Ein weiterer Sonderfall ist das Update der Anzeigemodul-Software. Hier wählt man bei Flash brennen die neue hex-Datei aus und entfernt bei EEPROM brennen sowie Fuses brennen den Haken. Beim anschließenden Klick auf den Brennen-Button wird dann nur die Software im Flash-Speicher neu geschrieben, EEPROM-Konfiguration und Fuse-Bits bleiben erhalten.

Wichtiger Hinweis für ein Upgrade der Software von v1.xx auf v2.xx:

In diesem Fall muss wie bei einer Neuinbetriebnahme vorgegangen werden. Zunächst wird der bisher verwendete Controller (AT90S2313 oder ATtiny2313) durch einen ATtiny4313 ersetzt. Der Flash-Speicher des alten Controllers war bereits in der letzten Version 1.06 komplett belegt und für die neue Funktionalität ist mehr Speicherplatz erforderlich. Anschließend muss die Konfiguration neu erstellt werden, da sich einige Parameter geändert haben. Nach der Assemblierung der neuen Konfiguration wird (wie im Bild oben dargestellt) der Mikrocontroller mit allen Informationen neu programmiert: hex-Datei, eep-Datei und Fuse-Bits.

Nach der kompletten Programmierung des Mikrocontrollers ist das Anzeigemodul 1 einsatzbereit. Es zeigt zunächst für 10s ein Begrüßungsbild an, in dem u.a. die Versionsnummer und das Datum der Software abgelesen werden kann. Anschließend wird, wenn die Konfiguration im EEPROM in Ordnung ist, der normale Betrieb aufgenommen.

SymbolKonfiguration

Wenn das Anzeigemodul mit der Beispielkonfiguration korrekt funktioniert, dann ist es an der Zeit, eine eigene Konfiguration zu erstellen. Hier ist es von großem Vorteil, wenn das Sensormodul und alle Sensoren bereits installiert und funktionsfähig sind. Außerdem sollten die Module über RS-232 miteinander verbunden sein. Dazu dient eine zweidrähtige Leitung: ein Draht führt das Datensignal mit RS-232-Pegel und der andere dient als Masseverbindung. An diese Leitung werden keine hohen Anforderungen gestellt - wegen der hohen Spannungspegel und der relativ niedrigen Geschwindigkeit sollten problemlos 50m und mehr überbrückt werden können. Falls man noch Kabeladern frei hat, dann ist es sinnvoll, diese für die Stromversorgung zu verwenden. Ich habe ein 12V-Steckernetzgerät in der Nähe des Sensormoduls installiert und versorge von hier aus über die Kabelverbindungen die Anzeigemodule. So benötigt man nur ein Netzteil für das gesamte Messsystem.

Display 1 Die Anzeige der Sensorwerte erfolgt auf 8 festen Positionen, welche im nebenstehenden Bild dargestellt sind. Die Positionen 1-4 befinden sich auf der linken Display-Hälfte, die Positionen 5-8 auf der rechten.

Display 2 Es gibt auch die Möglichkeit, 4 Sensorwerte darzustellen. In diesem Fall werden nur die Positionen 1-4 verwendet, diese belegen dann aber die gesamte Displayzeile. Für die Konfiguration ist es wichtig, diese Positionen zu kennen, damit sich später die gewünschte Anzeige ergibt.

Die folgende Übersicht ist ebenfalls wichtig. Sie zeigt eine Liste der möglichen Sensornummern:

SensornummerSensortypBemerkung
1TemperaturTemperatursensor 1
2 - 23TemperaturTemperatursensor 2 - 23
24TemperaturTemperatursensor 24
25TemperaturTemperatur des Luftfeuchtigkeitssensors 1
26TemperaturTemperatur des Luftfeuchtigkeitssensors 2
27TemperaturTemperatur des Luftfeuchtigkeitssensors 3
28Luftdruck
29LuftfeuchtigkeitLuftfeuchtigkeitssensor 1 (verknüpft mit Sensornummer 25)
30LuftfeuchtigkeitLuftfeuchtigkeitssensor 2 (verknüpft mit Sensornummer 26)
31LuftfeuchtigkeitLuftfeuchtigkeitssensor 3 (verknüpft mit Sensornummer 27)

Die Konfiguration ist leider etwas aufwändig. Bei der Entwicklung des Anzeigemoduls 1 vor vielen Jahren war es mir einfach noch zu kompliziert, einen Konfigurations-Dialog und entsprechende Bedienelemente vorzusehen. So gibt es nur einen Taster zur Bedienung und ein AT90S2313 mit 2kB Flash-Speicher reichte für alle Funktionen aus. Ich habe auch bei der aktuellen Software nichts daran geändert, da mir der Aufwand zu groß war und die Hardware erweitert werden müsste.

Die Konfiguration muss man mithilfe des Atmel Studios (oder einer anderen Entwicklungsumgebung für AVR-Mikrocontroller) am PC erledigen. Ich habe das Atmel Studio 6 verwendet, man kann aber auch das alte AVR Studio 4 benutzen. Bei Verwendung des Atmel Studio 6 hilft hoffentlich die folgende Kurzanleitung weiter: Man legt im Atmel Studio ein neues Projekt (AVR Assembler Project) mit dem Namen Anzeigemodul1 an und wählt im nächsten Fenster den Controller ATtiny4313 aus. Anschließend erscheint ein Editor-Fenster mit einigen Kommentarzeilen, welches zunächst nicht weiter beachtet wird. Mit einem Dateimanager (z.B. Explorer) kopiert man nun alle asm- und inc-Dateien aus dem Software-Paket in den Ordner Anzeigemodul1\Anzeigemodul1, der vom Atmel Studio angelegt wurde (bereits vorhandene Dateien müssen überschrieben werden). Holt man danach das Atmel Studio wieder in den Vordergrund, dann erscheint ein Fenster, welches mit Yes bestätigt wird. Hier erkennt das Atmel Studio, dass die Datei Anzeigemodul1.asm ersetzt wurde und lädt sie neu in den Editor. Jetzt sollte das Editor-Fenster gut gefüllt sein und man kann mit einem Druck auf die Taste F7 (oder die Menü-Option Build - Build Solution) das Projekt assemblieren. Wenn das funktioniert und fehlerfrei durchläuft, dann sind wir schon nah am Ziel.

Jetzt ist es noch erforderlich, die Konfigurationsdatei in den Editor zu laden und dafür eignet sich am besten die Datei Praxis-Beispiel 8 Sensoren.inc aus dem Softwarepaket. Die folgende Beschreibung bezieht sich auf diese Datei und es bietet sich an, diese gleich als Basis für die eigene Konfiguration zu verwenden. Über die Option File - Open - File... wird die Datei Praxis-Beispiel 8 Sensoren.inc ausgewählt und anschließend im Editor geöffnet. Vermutlich wird die Datei etwas „unsauber“ dargestellt, das liegt daran, dass sie mit einem Tabulatorwert von 8 erstellt wurde, das Atmel Studio jedoch mit der Voreinstellung 4 arbeitet. Das spielt für die Funktion keine Rolle, aber zur Korrektur kann man über die Option Tools - Options - Text Editor - Assembler - Tabs bei Tab Size: den Wert 8 eingeben.

Im folgenden Text werden alle relevanten Zeilen der Beispieldatei beschrieben. Dabei habe ich absichtlich alle Kommentare mit übertragen.

SymbolSensor-Tabelle

Im ersten Abschnitt befindet sich die Sensor-Tabelle: Diese legt fest, welche Sensorwerte ausgewertet werden sollen und an welchen Anzeigepositionen die Darstellung erfolgen soll. In unserem Beispiel soll der Temperaturwert vom Sensor 1 auf dem Display links oben angezeigt werden und direkt darunter der Wert vom Sensor 29, also der Wert vom ersten Luftfeuchtigkeitssensor. Darunter wiederum soll der Temperaturwert vom Sensor 2 erscheinen und unter diesem der Luftdruckwert. Auf der rechten Seite ist oben der Temperaturwert vom Sensor 5 festgelegt usw.

;  --------------------------
; | Position 1    Position 5 |  Die Sensor-Tabelle enthält die 8 Sensornummern (im Bereich 1-31) in der Reihenfolge, wie sie auf dem Display angezeigt werden sollen. Anzeigepositionen, die nicht
; | Position 2    Position 6 |  genutzt werden, müssen eine 0 enthalten. Sind die letzten 4 Sensornummern auf 0 gesetzt, dann arbeitet das Anzeigemodul im 4-Sensor-Modus mit verlängerten Sensornamen.
; | Position 3    Position 7 |
; | Position 4    Position 8 |  Das nebenstehende Bild zeigt die 8 Anzeigepositionen.
;  --------------------------
;
esentb: .db     1                       ;Anzeigeposition 1: Sensornummer 1 (Temperatur)
        .db     29                      ;Anzeigeposition 2: Sensornummer 29 (Luftfeuchtigkeit)
        .db     2                       ;Anzeigeposition 3: Sensornummer 2 (Temperatur)
        .db     28                      ;Anzeigeposition 4: Sensornummer 28 (Luftdruck)
        .db     5                       ;Anzeigeposition 5: Sensornummer 5 (Temperatur)
        .db     7                       ;Anzeigeposition 6: Sensornummer 7 (Temperatur)
        .db     4                       ;Anzeigeposition 7: Sensornummer 4 (Temperatur)
        .db     3                       ;Anzeigeposition 8: Sensornummer 3 (Temperatur)

Sollen weniger als 8 Sensorwerte angezeigt werden, dann setzt man den Wert für nicht benötigte Anzeigepositionen auf 0. Das folgende Beispiel verzichtet auf die letzte Zeile und würde nur 6 Sensorwerte auf den oberen 3 Zeilen anzeigen:

esentb: .db     1                       ;Anzeigeposition 1: Sensornummer 1 (Temperatur)
        .db     29                      ;Anzeigeposition 2: Sensornummer 29 (Luftfeuchtigkeit)
        .db     28                      ;Anzeigeposition 3: Sensornummer 28 (Luftdruck)
        .db     0                       ;Anzeigeposition 4: bleibt leer
        .db     5                       ;Anzeigeposition 5: Sensornummer 5 (Temperatur)
        .db     7                       ;Anzeigeposition 6: Sensornummer 7 (Temperatur)
        .db     4                       ;Anzeigeposition 7: Sensornummer 4 (Temperatur)
        .db     0                       ;Anzeigeposition 8: bleibt leer

Das Anzeigemodul 1 bietet noch eine spezielle Option: Möchte man nur 4 Sensorwerte anzeigen, dann lässt sich das Modul so konfigurieren, dass jeder Sensor eine komplette Zeile ausfüllt. Das ermöglicht im weiteren Verlauf der Konfiguration eine Verlängerung der Sensornamen von 4 auf 14 Zeichen. Um in diesen 4-Sensor-Modus zu gelangen, setzte man einfach die Anzeigepositionen 5 - 8 auf 0. Das folgende Beispiel stammt aus der Datei Praxis-Beispiel 4 Sensoren.inc und bewirkt, dass die 4 Werte von Sensor 1, 29, 2 und 28 untereinander am rechten Rand der Anzeige erscheinen und davor jeweils 14 Zeichen für den Sensornamen reserviert werden:

esentb: .db     1                       ;Anzeigeposition 1: Sensornummer 1 (Temperatur)
        .db     29                      ;Anzeigeposition 2: Sensornummer 29 (Luftfeuchtigkeit)
        .db     2                       ;Anzeigeposition 3: Sensornummer 2 (Temperatur)
        .db     28                      ;Anzeigeposition 4: Sensornummer 28 (Luftdruck)
        .db     0                       ;Anzeigeposition 5: nicht genutzt \
        .db     0                       ;Anzeigeposition 6: nicht genutzt  \ Diese Einstellung bewirkt die Umschaltung
        .db     0                       ;Anzeigeposition 7: nicht genutzt  / des Anzeigemoduls in den 4-Sensor-Modus
        .db     0                       ;Anzeigeposition 8: nicht genutzt /

SymbolUnteres Temperaturlimit

In den nächsten beiden Abschnitten lässt sich eine Temperaturüberwachung konfigurieren. Zwar können hier auch Werte beim Luftdruck oder bei Luftfeuchtigkeitssensoren eingetragen werden, die Auswertung erfolgt jedoch nur bei Temperatursensoren (Sensornummer 1-27). Es kann für jeden Sensor unabhängig voneinander ein oberer und ein unterer Grenzwert festgelegt werden, d.h. man kann auch nur den unteren oder den oberen Grenzwert überwachen. Der folgende Abschnitt ist für die unteren Grenzwerte zuständig. Hier kann in ganzzahligen Werten die Grenztemperatur in °C angegeben werden, auch negative Werte sind möglich, z.B. -10. Wird die Überwachung nicht benötigt, dann wird der Wert 128 eingetragen:

; Über die folgende Liste kann für Temperatursensoren ein unteres Temperaturlimit eingestellt werden, bei Unterschreitung des Limits blinkt ein Symbol hinter dem Wert und ein Alarm wird ausgelöst.
; Alle Werte müssen in Grad Celsius angegeben werden, auch negative Werte sind möglich. Ein Wert von 128 schaltet die Alarmüberwachung aus. Die Reihenfolge entspricht der Anzeigeposition 1-8:
;
elim_l: .db     15                      ;Unteres Temperaturlimit für Anzeigeposition 1 (Alarm, wenn Temperatur < 15°C)
        .db     128                     ;Unteres Temperaturlimit für Anzeigeposition 2 (kein Alarm bei Luftfeuchtigkeit möglich)
        .db     128                     ;Unteres Temperaturlimit für Anzeigeposition 3 (Alarm ausgeschaltet)
        .db     128                     ;Unteres Temperaturlimit für Anzeigeposition 4 (kein Alarm bei Luftdruck möglich)
        .db     10                      ;Unteres Temperaturlimit für Anzeigeposition 5 (Alarm, wenn Temperatur < 10°C)
        .db     10                      ;Unteres Temperaturlimit für Anzeigeposition 6 (Alarm, wenn Temperatur < 10°C)
        .db     10                      ;Unteres Temperaturlimit für Anzeigeposition 7 (Alarm, wenn Temperatur < 10°C)
        .db     10                      ;Unteres Temperaturlimit für Anzeigeposition 8 (Alarm, wenn Temperatur < 10°C)

In diesem Beispiel gibt es einen Alarm, wenn die Temperatur von Sensor 1 einen Wert von 15°C unterschreitet, außerdem bei Unterschreitung von 10°C der Sensorwerte 5-8. Der nächste Abschnitt funktioniert nach dem gleichen Prinzip, nur wird hier der obere Grenzwert festgelegt:

SymbolOberes Temperaturlimit

; Über die folgende Liste kann für Temperatursensoren ein oberes Temperaturlimit eingestellt werden, bei Überschreitung des Limits blinkt ein Symbol hinter dem Wert und ein Alarm wird ausgelöst.
; Alle Werte müssen in Grad Celsius angegeben werden, auch negative Werte sind möglich. Ein Wert von 128 schaltet die Alarmüberwachung aus. Die Reihenfolge entspricht der Anzeigeposition 1-8:
;
elim_h: .db     35                      ;Oberes Temperaturlimit für Anzeigeposition 1 (Alarm, wenn Temperatur > 35°C)
        .db     128                     ;Oberes Temperaturlimit für Anzeigeposition 2 (kein Alarm bei Luftfeuchtigkeit möglich)
        .db     128                     ;Oberes Temperaturlimit für Anzeigeposition 3 (Alarm ausgeschaltet)
        .db     128                     ;Oberes Temperaturlimit für Anzeigeposition 4 (kein Alarm bei Luftdruck möglich)
        .db     35                      ;Oberes Temperaturlimit für Anzeigeposition 5 (Alarm, wenn Temperatur > 35°C)
        .db     35                      ;Oberes Temperaturlimit für Anzeigeposition 6 (Alarm, wenn Temperatur > 35°C)
        .db     35                      ;Oberes Temperaturlimit für Anzeigeposition 7 (Alarm, wenn Temperatur > 35°C)
        .db     35                      ;Oberes Temperaturlimit für Anzeigeposition 8 (Alarm, wenn Temperatur > 35°C)

In diesem Beispiel wird ein Alarm ausgelöst, wenn Sensor 1, 5, 6, 7 oder 8 einen Temperaturwert über 35°C hat. Bei den anderen Sensoren ist die Überwachung ausgeschaltet.

SymbolSensornamen

Im nächsten Abschnitt kann man allen Sensoren einen Namen geben. Das folgende Beispiel sieht etwas kryptisch aus und das liegt daran, dass Umlaute einen Zeichencode über 127 haben und deshalb als Hexadezimalwert eingegeben werden müssen. Eine weitere Besonderheit gibt es ebenfalls zu beachten: Für jeden Namen werden 14 Zeichen reserviert, auch wenn im normalen Anzeigemodus mit 8 Sensorwerten nur die ersten 4 Zeichen verwendet werden. Der Grund dafür liegt im optionalen 4-Sensor-Modus, bei dem Namen mit 14 Zeichen Länge möglich sind. Ob der 8- oder 4-Sensor-Modus verwendet wird, legt man weiter oben in der Sensor-Tabelle fest.

; Hier können die Sensornamen festgelegt werden. Wird das Anzeigemodul im 8-Sensor-Modus verwendet, dann gelangen nur die ersten 4 Zeichen auf die Anzeige. Im 4-Sensor-Modus werden alle 14 Zeichen
; genutzt, allerdings nur bei den Zeilen 1-4. Diese Struktur verschwendet zwar Speicherplatz, vereinfacht aber die Programmierung. Umlaute müssen entsprechend des LCD-Zeichensatzes kodiert werden:
; ä= 0xe1, ö= 0xef, ü= 0xf5, ß= 0xe2 (gilt für die meisten LCD mit HD44780, im Zweifelsfall bitte im Datenblatt nachschauen)
;
esentx: .db     "Wohn          "                ;"Wohn" Display-Text für Anzeigeposition 1 (4 Zeichen im 8-Sensor-Modus, 14 Zeichen im 4-Sensor-Modus)
        .db     "Wohn          "                ;"Wohn" Display-Text für Anzeigeposition 2 (4 Zeichen im 8-Sensor-Modus, 14 Zeichen im 4-Sensor-Modus)
        .db     "Au", 0xe2, ".          "       ;"Auß." Display-Text für Anzeigeposition 3 (4 Zeichen im 8-Sensor-Modus, 14 Zeichen im 4-Sensor-Modus)
        .db     "Luft          "                ;"Luft" Display-Text für Anzeigeposition 4 (4 Zeichen im 8-Sensor-Modus, 14 Zeichen im 4-Sensor-Modus)
        .db     "Kind          "                ;"Kind" Display-Text für Anzeigeposition 5 (4 Zeichen im 8-Sensor-Modus, ungenutzt im 4-Sensor-Modus)
        .db     "B", 0xf5, "ro          "       ;"Büro" Display-Text für Anzeigeposition 6 (4 Zeichen im 8-Sensor-Modus, ungenutzt im 4-Sensor-Modus)
        .db     "Bad           "                ;"Bad"  Display-Text für Anzeigeposition 7 (4 Zeichen im 8-Sensor-Modus, ungenutzt im 4-Sensor-Modus)
        .db     "Schl          "                ;"Schl" Display-Text für Anzeigeposition 8 (4 Zeichen im 8-Sensor-Modus, ungenutzt im 4-Sensor-Modus)

Bei der Eingabe der Namen ist darauf zu achten, dass die Länge des Namens nicht verändert wird - es müssen immer 14 Zeichen zwischen den Anführungszeichen stehen. Werden Umlaute verwendet, dann muss man besonders aufpassen und nach der Eingabe lieber noch mal durchzählen. Der Name "Auß." in unserem Beispiel besteht zunächst aus den beiden regulären ASCII-Zeichen "Au". Hier schließt sich (durch Komma getrennt) der Umlaut "ß" an, der für das LCD als Wert 0xe2 eingegeben werden muss. Übrig bleiben noch der Punkt und 10 Leerzeichen zum Auffüllen auf 14 Zeichen. Das folgende Beispiel wurde der Datei Praxis-Beispiel 4 Sensoren.inc entnommen und demonstriert die Nameneingabe im 4-Sensor-Modus:

esentx: .db     "Wohnzimmer    "                ;"Wohnzimmer"     Display-Text für Anzeigeposition 1 (4 Zeichen im 8-Sensor-Modus, 14 Zeichen im 4-Sensor-Modus)
        .db     "Wohnzimmer    "                ;"Wohnzimmer"     Display-Text für Anzeigeposition 2 (4 Zeichen im 8-Sensor-Modus, 14 Zeichen im 4-Sensor-Modus)
        .db     "Au", 0xe2, "entemperat."       ;"Außentemperat." Display-Text für Anzeigeposition 3 (4 Zeichen im 8-Sensor-Modus, 14 Zeichen im 4-Sensor-Modus)
        .db     "Luftdruck     "                ;"Luftdruck"      Display-Text für Anzeigeposition 4 (4 Zeichen im 8-Sensor-Modus, 14 Zeichen im 4-Sensor-Modus)
        .db     "              "                ;Display-Text für Anzeigeposition 5 (ungenutzt, muss aber 14 Zeichen enthalten)
        .db     "              "                ;Display-Text für Anzeigeposition 6 (ungenutzt, muss aber 14 Zeichen enthalten)
        .db     "              "                ;Display-Text für Anzeigeposition 7 (ungenutzt, muss aber 14 Zeichen enthalten)
        .db     "              "                ;Display-Text für Anzeigeposition 8 (ungenutzt, muss aber 14 Zeichen enthalten)

Auch im 4-Sensor-Modus gelten die gleichen Regeln: Es müssen immer 14 Zeichen zwischen den Anführungszeichen stehen. Das gilt auch für die Namen der Anzeigepositionen 5-8, die zwar nicht verwendet werden, aber als Platzhalter vorhanden sein müssen.

SymbolAlarm-Invertierung

In den nächsten beiden Abschnitten werden die Alarme konfiguriert. Zunächst wird in der folgenden Alarm-Invertierungs-Tabelle festgelegt, wie die Alarmeingänge des Sensormoduls zu bewerten sind. Ist ein Alarmeingang im Normalzustand offen und wird dieser bei Alarmauslösung durch einen Kontakt geschlossen, dann muss in die Tabelle eine 0 eingetragen werden. Wird ein normalerweise geschlossener Alarmkontakt bei der Auslösung geöffnet, dann ist eine Invertierung erforderlich und es muss eine 1 eingetragen werden. Das Beispiel entspricht meiner Konfiguration, hier sind geschlossene Kontakte an den Alarmeingängen 1, 3 und 4, die im Alarmfall geöffnet werden und diese müssen durch das Anzeigemodul invertiert ausgewertet werden:

; In der Alarm-Invertierungs-Tabelle wird festgelegt, wie die Alarmmeldungen auszuwerten sind: 0 = normal, 1 = invertiert. Bei einem Arbeitskontakt am Sensormodul ist hier 0 und bei einem Ruhekontakt
; 1 einzutragen:
;
ealmin: .db     1                       ;Invertierung für Alarm 1 (Alarm-Kontakt geschlossen)
        .db     0                       ;Invertierung für Alarm 2 (Alarm-Kontakt geöffnet)
        .db     1                       ;Invertierung für Alarm 3 (Alarm-Kontakt geschlossen)
        .db     1                       ;Invertierung für Alarm 4 (Alarm-Kontakt geschlossen)

Werden die Alarmeingänge des Sensormoduls nicht benutzt, denn sollte in alle 4 Zeilen der Wert 0 eingetragen werden.

SymbolAlarmnamen

Bei den Alarmen muss ebenfalls beachtet werden, dass die Länge der Namen nicht verändert wird - jeder Alarmname muss 12 Zeichen lang sein. Auch hier dürfen Umlaute verwendet werden, die dann ebenso wie bei den Sensornamen durch einen Hexadezimalwert repräsentiert werden.

; Hier können die Alarmnamen festgelegt werden (4 Texte mit je 12 Zeichen). Werden weniger als 12 Zeichen verwendet, dann ist der Name mit Leerzeichen aufzufüllen:
;
ealmtx: .db     "Garagentor  "          ;Display-Text bei Alarm 1 (12 Zeichen)
        .db     "ungenutzt   "          ;Display-Text bei Alarm 2 (12 Zeichen)
        .db     "Briefkasten "          ;Display-Text bei Alarm 3 (12 Zeichen)
        .db     "Dachfenster "          ;Display-Text bei Alarm 4 (12 Zeichen)

SymbolLuftdruck-Tendenz

Wird das Anzeigemodul 1 zur Anzeige des Luftdrucks genutzt, dann erscheint gelegentlich rechts neben dem Luftdruckwert ein kleiner Richtungspfeil. Dieser zeigt die ermittelte Tendenz an und weist abhängig davon nach oben oder unten. Die Tendenzberechnung kann mit dem folgenden Wert beeinflusst werden. Ein niedriger Wert wird relativ häufig eine Tendenz anzeigen, die aber ungenau sein kann. Ein höherer Wert wird die Tendenz genauer erkennen, allerdings nur bei starken Luftdruckänderungen. Möglich sind hier Werte zwischen 2 und 9, die Voreinstellung ist 4.

eprsth: .db     4                       ;Schwellwert für Luftdruck-Tendenz-Anzeige, ab dem hier eingestellten Differenzwert wird eine fallende oder steigende Tendenz angezeigt (Wertebereich 2-9)

SymbolKomma-Zeichen

Mit dem folgenden Wert lässt sich bei Temperaturen das Trennzeichen zwischen Einer und Zehntel anpassen. Die Einstellung 7 im folgenden Beispiel entspricht dem LCD-Code eines selbst definierten Komma-Symbols (ein etwas tiefer gestelltes Komma-Zeichen).

epoint: .db     7                       ;selbst definiertes Zeichen (Komma) zwischen Einer und Zehntel bei Temperaturwerten (alternativ jedes ASCII-Zeichen ab 0x20 möglich, z.B. '.' oder ',')

Möchte man ein anderes Zeichen, z.B. den Punkt wie in früheren Software-Versionen, dann würde das so aussehen:

epoint: .db     '.'                     ;selbst definiertes Zeichen (Komma) zwischen Einer und Zehntel bei Temperaturwerten (alternativ jedes ASCII-Zeichen ab 0x20 möglich, z.B. '.' oder ',')

Es gibt auch noch die Möglichkeit, das Sonderzeichen 7 (ganz am Ende der Datei Anzeigemodul1.asm) zu bearbeiten, um ein eigenes Zeichen zu kreieren.

Damit ist die komplette Konfiguration abgeschlossen. Jetzt wechselt man im Editor des Atmel Studios auf die Datei Anzeigemodul1.asm und kontrolliert die folgenden Zeilen am Anfang der Datei:

;.include "Praxis-Beispiel 4 Sensoren.inc"
.include "Praxis-Beispiel 8 Sensoren.inc"
;.include "Beispiel-01-08.inc"
;.include "Beispiel-09-16.inc"
;.include "Beispiel-17-24.inc"
;.include "Beispiel-25-31.inc"

Hier sind alle Beispielkonfigurationen des Software-Pakets aufgelistet und nur eine davon darf aktiviert werden. Der Rest wird durch das vorangestellte Semikolon als Kommentar deklariert und vom Assembler nicht ausgewertet. Ich denke, man erkennt das Prinzip, wie Konfigurationen eingebunden werden und man hat hier die Möglichkeit, eigene Konfigurationsdateien zu erstellen und deren Namen hier einzutragen. Im oben stehenden Beispiel ist die richtige Datei aktiv und wenn man nun auf F7 drückt oder die Menü-Option Build - Build Solution wählt, dann wird der Assembler gestartet und aus dem Hauptprogramm und der Konfiguration werden die Dateien Anzeigemodul1.hex und Anzeigemodul1.eep erstellt.

Die genannten Dateien werden dann im Ordner Anzeigemodul1\Anzeigemodul1\Debug abgelegt. Sollte die Assemblierung fehlerfrei durchgelaufen sein und es ist trotzdem keine eep-Datei zu finden, dann kann das an der Projekt-Einstellung liegen. Um das Problem zu beheben, muss man im Atmel Studio die Menü-Option Project - Anzeigemodul1 Properties... aufrufen und im Editor erscheint daraufhin ein neues Fenster mit vielen Einstellmöglichkeiten. Wichtig ist hier der Bereich Toolchain - AVR Assembler - General, hier muss die Option Generate EEP File aktiviert werden. Nach dem erneuten Druck auf F7 sollte nun auch die Datei Anzeigemodul1.eep erstellt worden sein und die kann jetzt in den EEPROM-Bereich des ATtiny4313 geschrieben werden (wie im Abschnitt Inbetriebnahme beschrieben, vorher die Datei Anzeigemodul1.eep auswählen).

Display 3 So meldet sich das Anzeigemodul 1 beim Start und dieses Bild wird 10s lang angezeigt. Während dieser Zeit leuchtet die LED dauerhaft. Anschließend verlischt die LED wieder und das Modul wechselt zur normalen Sensoranzeige - wenn alles in Ordnung ist.

Display 4 Sollte nach dem Startbild die LED weiterhin leuchten und eine Anzeige wie im nebenstehenden Bild erscheinen, dann wurden unplausible Daten im EEPROM gefunden. Um die Fehlersuche zu erleichtern, wird die EEPROM-Adresse der ersten Fehlerstelle angezeigt, in diesem Beispiel ist es die Adresse 0x5E. Schauen wir nochmals in den Ordner Anzeigemodul1\Anzeigemodul1\Debug - hier finden wir die Datei Anzeigemodul1.lss. Diese Datei wird bei der Assemblierung erstellt und kann mit einem beliebigen Texteditor geöffnet werden, z.B. auch mit dem Atmel Studio. Ab ungefähr Zeile 700 (die Zeilennummer kann variieren) beginnt der eigentliche Quelltext und ab ungefähr Zeile 720 befindet sich der EEPROM-Bereich. Hier wird nun am linken Rand nach der Adresse 0x5E gesucht, welche im Text in der Form 00005e gelistet ist. Die gewünschte Adresse steht bei ungefähr Zeile 830 und enthält das erste Zeichen des Display-Textes für die Anzeigeposition 6, also das B vom Text Büro (Hexadezimalwert 42).

Dieser Wert ist übrigens völlig in Ordnung und würde normalerweise nicht als Fehler beanstandet werden. Dieses Beispiel soll nur demonstrieren, wie man einen EEPROM-Fehler lokalisieren kann. Zur Behebung des Fehlers ist es erforderlich, im Atmel Studio nochmals die Konfigurationsdatei zu bearbeiten (in unserem Fall ist das die Datei Praxis-Beispiel 8 Sensoren.inc). Anschließend wird mit der Taste F7 neu assembliert und die erzeugte Datei Anzeigemodul1.eep wiederum in das EEPROM geschrieben. Der anschließende Neustart des Anzeigemoduls verläuft dann hoffentlich fehlerfrei - damit ist die Konfiguration abgeschlossen.

SymbolBedienung

Dieser Abschnitt ist relativ kurz, da es am Anzeigemodul 1 nicht viel zu bedienen gibt. Dennoch können im laufenden Betrieb verschiedene Anzeigen erscheinen, die ich noch näher beschreiben möchte. Im normalen Betrieb zeigt das Modul je nach Konfiguration bis zu 8 Sensorwerte an:

Display 5 Wird die Anzeige auf 8 Sensoren konfiguriert, dann ergibt sich das nebenstehende Bild. Hier wurde die Konfiguration des Praxis-Beispiels mit 8 Sensoren verwendet.

Display 6 Wird die Anzeige auf 4 Sensoren konfiguriert, dann ergibt sich dieses Bild. Hier wurde die Konfiguration des Praxis-Beispiels mit 4 Sensoren verwendet.

Die angezeigten Symbole haben folgende Bedeutung:
SymbolGrad Celsius, wird hinter jedem Temperaturwert angezeigt.
SymbolGrad Celsius, der untere Grenzwert wurde unterschritten, dieses Symbol blinkt.
SymbolGrad Celsius, der obere Grenzwert wurde überschritten, dieses Symbol blinkt.
SymbolProzent, wird hinter jedem Luftfeuchtigkeitswert angezeigt. Dieses Symbol wurde gegenüber dem Standard-Zeichen des LCD verkleinert, um die Lesbarkeit zu verbessern.
SymbolDie Luftdruck-Tendenz ist fallend.
SymbolDie Luftdruck-Tendenz ist steigend.

Wird eine Unter- oder Überschreitung eines Temperatur-Grenzwertes erkannt, dann zeigt ein blinkender Richtungspfeil hinter dem Temperaturwert diesen Alarmzustand an. Weiterhin erfolgt eine akustische Signalisierung durch 6 kurze Ton-Signale im Abstand von 0,5s und die LED blitzt jede Sekunde kurz auf. Bei der Rückkehr des Temperaturwertes in den grünen Bereich erscheint wieder das normale Grad-Zeichen und die LED verlischt. Bei erneuter Grenzwert-Unter- oder Überschreitung wiederholt sich der gesamte Vorgang.

Die Anzeige der Luftdruck-Tendenz erfolgt nur, wenn ein eindeutiger Trend erkannt wird. Anderenfalls wird der Luftdruckwert ohne nachfolgendes Einheiten-Zeichen angezeigt (hPa lässt sich sehr schlecht abkürzen). Die Ermittlung der Tendenz wurde relativ simpel realisiert: Ungefähr jede Stunde wird der jeweils aktuelle Luftdruckwert in einem FIFO-Puffer mit 16 Plätzen gespeichert. Anschließend wird ausgehend vom letzten Wert der gesamte Puffer durchsucht und findet sich ein Wert, der mindestens +4hPa oder -4hPa abweicht, dann wird das als Tendenz erkannt und der entsprechende Pfeil gesetzt. Die Schwelle lässt sich übrigens bei der Konfiguration im Bereich von 2 bis 9 einstellen.

Display 7 Wird am Sensormodul einer der 4 Alarme ausgelöst, dann wird dieser im Wechsel mit den Sensorwerten an der Anzeigeposition 4 und 8 angezeigt. Gleichzeitig macht die LED durch schnelles Blinken alle 0,5s auf den Alarm aufmerksam und es ertönt für 3s ein akustisches Signal. Verschwindet der Alarm wieder, dann verlischt die LED, auf dem LCD wird der Alarm jedoch noch eine Minute lang weiter angezeigt. Treten mehrere Alarme gleichzeitig auf, dann erfolgt die Anzeige nacheinander so wie im Bild.

Die akustische Signalisierung erfolgt durch eine 3s lange Tonfolge. Das Tonsignal ist abhängig von der Alarmnummer und es gilt folgende Zuordnung:

Alarm-Grafik

Mit dem Taster ist es möglich, die wechselnde Alarm-Anzeige abzuschalten und zur normalen Sensoranzeige zu wechseln. Ein erneutes Drücken des Tasters schaltet die Wechselanzeige wieder ein, sofern noch Alarme aktiv sind oder die um eine Minute verlängerte Signalisierung noch wirksam ist. Erfolgt eine weitere oder erneute Alarm-Auslösung, dann wird die Wechselanzeige automatisch wieder aktiviert. Übrigens, dies ist die einzige Funktion des Tasters. Wenn man diese nicht benötigt, dann kann man das Anzeigemodul 1 auch ohne Taster aufbauen.

Display 8 Ungefähr 15s nach dem Start des Temperaturmesssystems wird vom Sensormodul die Sensorbelegung übermittelt. Diese besteht aus 8 Ziffern oder Buchstaben, die die Anzahl der 1-Wire-Sensoren an jedem Bus des Sensormoduls repräsentieren. Empfängt das Anzeigemodul 1 eine solche Meldung, dann wird die laufende Anzeige unterbrochen und 10s lang die Sensorbelegung und die daraus ermittelte Gesamtanzahl der Sensoren angezeigt. Anschließend kehrt das Modul in die normale Sensoranzeige zurück.

Display 9 Dieses Bild erscheint, wenn keine Daten vom Sensormodul empfangen werden. Das passiert im laufenden Betrieb 20s nach dem Empfang des letzten Datenpakets oder 60s nach dem Einschalten des Anzeigemoduls. Zusätzlich beginnt die LED einmal pro Sekunde aufzublitzen, um auf diesen abnormalen Zustand hinzuweisen. Eine akustische Signalisierung erfolgt jedoch nicht. Diese Meldung verschwindet erst, wenn die Datenverbindung wieder hergestellt wird.

Das Anzeigemodul 1 erkennt auch den Ausfall einzelner Sensoren. Wird auf einer der 8 Anzeigepositionen über 60s lang kein Sensorwert mehr empfangen, dann löscht das Modul den Wert auf dieser Anzeigeposition. Eine Signalisierung erfolgt dabei nicht.


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