Ein- und Ausgabe

Diese Untergruppe beschäftigt sich mit der Ausgabe der Messdaten auf einem LC-Display und der Eingabe von Parametern, die der Regelung zugrunde liegen, durch vier Knöpfe, welche sich unter dem Display befinden.

Beschaltung Display

Bedienung

Grundsätzlich existieren zur Bedienung zwei verschiedene Modi: Der Anzeigemodus und der Einstellungsmodus. Der Wechsel zwischen diesen Modi erfolgt durch das Gleichzeitige drücken der Tasten hoch und runter. Zusätzlich zu diesem manuellen Wechsel erfolgt ein Wechsel in den Anzeigemodus auch automatisch nach einer gewissen Zeit der Inaktivität. Im inaktiven Zustand werden nun zusätzlich die angezeigten Daten automatisch durchgewechselt.

Anzeigemodus

Im Anzeigemodus werden diverse durch die Sensoren aufgenommene Daten wie z. B. Temperatur, Tankfüllstand, Luft- & Bodenfeuchtigkeit angezeigt. Zwischen den Seiten, auf denen jeweils ein Wert angezeigt wird, kann mit den Tasten rechts und links gewechselt werden.

Einstellungsmodus

Im Einstellungsmodus können Parameter wie z.B. die gewünschte Temperatur, Be- leuchtungsdauer etc. eingestellt werden. Die Einstellung dieser Werte erfolgt mittels der hoch und runter Tasten, wobei diese den jeweiligen Wert in definierbaren Inkrementen inkrementieren bzw. dekrementieren. Auch in diesem Modus kann mit den Tasten rechts und links durch die verschiedenen Seiten mit jeweils einem Parameter navigiert werden.

LC-Display

Funktionsweise

Um das Vornehmen von Einstellungen am Gewächshaus zu ermöglichen, wird eine Flüs- sigkristallanzeige(engl.: LCD) genutzt. Das Verwendete Display-Modul ist EA W162B- N3LW vom Hersteller Electronic Assembly. Über diese Anzeige ist es möglich, mit Tastern durch ein Menü zu navigieren und Parameter wie die Temperatur oder die Beleuchtungsdauer zu überwachen und anzupassen. Eine solche Anzeige besteht aus einem Array von Flüssigkristallelementen. Die Funktionsweise eines solchen Elements basiert darauf, dass dessen Lichtdurchlässigkeit durch das Anlegen einer Spannung manipuliert werden kann. Die Moleküle des verbauten Flüssig- kristalls ändern durch die angelegte Spannung ihre Anordnung wodurch das einfallende Licht abgelenkt wird. Das Licht wird in diesem Fall durch eine Hintergrundbeleuchtung erzeugt. Ein solches Element bildet dann einen Pixel der einfarbigen Flüssigkristallanzeige. Dieses Array aus Flüssigkristallelementen wird beim verbauten Display durch eine Passiv-Matrix angesteuert. Da die direkte Ansteuerung dieser Matrix nicht effizient mit einem Mikrocontroller zu bewerkstelligen ist, wird auf den meisten LCDs ein Controller wie der HD44780 verbaut, der diese Ansteuerung übernimmt. Mithilfe dieses Controllers ist es möglich das Display über den verbauten ATMega32 zu steuern.

Ansteuerung

Um das Display bzw. den Controller anzusteuern, muss der Mikrocontroller mit den 16 Pins des Displays verbunden werden. Die Pinbelegung ist der Tabelle zu entnehmen.

Bildschirmfoto 2018-07-15 um 16.40.52

Das Display kann im 4- oder im 8-bit Modus betrieben werden. Im 8-bit-Modus werden alle acht Datenleitungen des Displays an jeweils einen IO-Pin des Mikrocontrollers angeschlossen. Pro Zugriff können so acht Bit, bzw. ein Byte, an das Display übertragen werden. Im 4-bit-Modus werden nur die oberen vier Datenleitungen des Displays mit dem Mikrocontroller verbunden, weshalb nun zwei Zugriffe mit jeweils 4 Bit benötigt werden um ein Byte zu übertragen. Da dieses Projekt aufgrund der vielen Sensoren und zu steuernden Gerätschaften eine große Menge an In- und Outputs benötigt, haben wir uns für den 4-bit-Modus entschieden. So können vier IO-Pins des Mikrocontrollers für andere Aufgaben verwendet werden. Über den Pin RS kann dem Display mitgeteilt werden, ob ein gesendetes Byte als Befehl interpretiert, oder ob das Byte angezeigt werden soll. Über RW wird bestimmt ob gelesen oder geschrieben werden soll. Lesen ist zum Beispiel sinnvoll um festzustellen, ob der letzte Befehl schon abgearbeitet wurde. Mit E wird dem Display mitgeteilt, dass alle anderen Datenleitungen die gewollten Werte angenommen haben und nun ausgelesen werden können. Mithilfe dieser Verschaltung kann das Display nun über den ATMega32 angesteuert werden.

Eingabe

Die Eingabe erfolgt über vier Tasten, welche jeweils einen digitalen I/O-Pin des Mikro- controllers belegen. Diese Tasten werden verwendet um durch das Menü, welches auf dem LC-Display angezeigt wird, zu navigieren und die Parameter, auf deren Basis die Systeme der anderen Gruppen geregelt werden, einzustellen.

Bildschirmfoto 2018-07-15 um 21.06.09

Entprellung mit Kondensator

Entprellung

Ein idealer Taster schaltet beim Drücken durch und ist nach dem Loslassen wieder offen. Jedoch ist dies beim realen Taster nicht so. Dieser schaltet zwar schnell genug, aber verharrt nicht in diesem Zustand. Er Prallt zurück und erreicht den Endzustand erst nach einer gewissen Zeitspanne. In dieser Zeit kann es passieren das der Mikrocontroller den Taster mehrfach ausließt und das Prellen als mehrere Tastendrücke erkennt. Um dies zu vermeiden, kann entweder eine softwareseitige oder eine hardwareseitige Entprellung vorgenommen werden. Der einfachste Weg ist es hierbei den pull-down Widerstand um einen parallelen Kondensator zu ergänzen.

tasterohne

Taster ohne Entprellung

Dieser wird, aufgrund der geringen Kapazität, sehr schnell geladen und hält beim Prellen den Spannungswert oberhalb der Thresholdspannung der digitalen Pins. Die Messung eines solchen Prellvorgangs ist in den beiden Abbildungen dargestellt. Bei Verwendung des Kondensators sinkt die Spannung, wie in Abbildung 53 zu erkennen, nicht unter 4V.

tastermit

Taster mit Entprellung

In der Schaltung wurde auf einen zusätzlichen Widerstand zur Strombegrenzung verzichtet, um den Kondensator möglichst schnell zu laden. Die einzige Strombegrenzung stellen hierbei die Leitungsbeläge dar, was sich in einem leichten Überschwingen äußert. Da der gewählte Kondensator sehr klein gewählt ist, wird die Versorgungsspannung dadurch jedoch nicht zu stark belastet.

Taster

Neben der Entprellung ist die Wahl der Taster ebenfalls wichtig. Sie dient nicht nur der Nutzerfreundlichkeit, sondern auch der Lebensdauer und Zuverlässigkeit des Systems. Durch die Wahl von Tastern die bereits eine sehr geringe Prellzeit aufweisen kann der Kondensator im RC-Glied geringer gewählt werden und der Taster schneller ausgelesen werden. Das aber wohl wichtigste Merkmal ist die Lebensdauer. Übliche Kurzhubtaster verfügen über eine Lebensdauer von 100000 Zyklen. Aus diesen Gründen haben wir uns für Cherry MX Keyswitches entschieden. Die Lebensdauer wird bei diesen mit 50 Millionen Zyklen angegeben und die Prellzeit mit unter 5ms.

Software

Die Software zur Ein- & Ausgabe ist in der Programmiersprache C geschrieben und wird von der Microkontroller-Teilgruppe eingebunden und auf dem selben Microkontroller ausgeführt. Das Programm ist in drei Teile unterteilt: Die Ansteuerung des LCDs, das Auslesen der Taster und der so genannte Controller, welcher die Menülogik abbildet und hierzu die beiden anderen Module verwendet.

LCD-Ansteuerung

Bevor das LCD beschrieben werden kann, muss dieses zunächst initialisiert werden. Hierzu müssen zunächst 3 Resets, bestehend aus dem Kommando 0x30, welches über die Datenleitungen gesendet wird, und einem Nullsetzten des Reset-Pins, durchgeführt werden. Anschließend werden dem Display die Einstellungen übermittelt. In unserem Fall sind das die Folgenden: Mit dem Befehl 0x20 wird der 4-Bit Modus gewählt. Es wird mit dem Befehl 0x28 dem Displaycontroller mitgeteilt, dass es sich um ein 16×2 LCD handelt. Anschließend wird das Display ausgeschaltet (0x01), der Inhalt gelöscht (0x06) und es wieder angeschaltet (0x0C). Nun ist das LCD initialisiert und kann beschrieben werden. Hierzu werden die Funktionen void print(char *c, uint8_t x, uint8_t y), void set_cursor(uint8_t x, uint8_t y) und void clear() durch lcd.c bereitgestellt. Mit der Funktion print wird eine Zeichenkette an die Stelle (x,y) geschrieben, set_cursor bewegt den Cursor an die Stelle (x,y) und clear Löscht den Inhalt des LCD.

Auslesen der Taster

Das Auslesen der Taster wird von der Datei btn.c übernommen. Diese verfügt über zwei Funktionen void init_btn() und void update_btn(). Die Funktion init_btn muss einmalig am Anfang der Ausführung des Programmes aufgerufen werden. Sie versetzt lediglich die Pins, an denen die Taster angeschlossen sind, in den Lesemodus. In der Funktion update_btn() wird der Zustand der Taster ausgelesen und die Variablen up, down, left & right je nach Zustand aktualisiert. Um das Mehrfache registrieren von Tastendrücken bei längerem Gedrückthalten der Taster zu verhindern, werden Tastendrücke erst beim Loslassen der Tasten registriert.

Controller

In diesem Modul wird die Menüstruktur abgebildet. Hierzu verwendet es die in den vorherigen Abschnitten beschriebenen Funktionen.
Außerdem stellt es die Schnittstelle zu der Software der anderen Teilgruppe dar. Auch die- sesModulenthältdieFunktionenvoid init(struct Parameter* _parameters, int _parameter_len)und void update(). Die update-Funktion muss regelmässig aufgerufen werden, während

die init-Funktion nur einmal zu beginn aufgerufen werden muss. Der init-Funktion muss außerdem ein Array bestehend aus der Struktur Parameter übergeben werden. Der Aufbau dieser Struktur ist wie folgt:

Bildschirmfoto 2018-07-15 um 21.07.30

Dieses Array gibt dem Controller Informationen darüber, welche Informationen wie dargestellt werden sollen. Es besteht aus dem Namen des Parameters in der darzustellenden Form, einen Formatierungsstring und Pointer auf den Messwert den Sollwert und den Wert, um den der Sollwert pro Tastendruck inkrementiert bzw. dekrementiert wird. Der Formatierungsstring gibt das Format in dem der Wert dargestellt werden soll an, hierzu wird dieselbe Formatierung wie beim C-Befehl printf verwendet.