LCD

Zur Anzeige der uns übergebenen Daten verwenden wir eine LCD, die wir über den Mikrocontroller Atmega32 ansteuern. Dieser gehört zu den sogenannten AVR-Mikrocontrollern des Herstellers Atmel. Faktoren wie einer leichten Zugänglichkeit für Anfänger, einer möglichen In-System-Programmierung und kostenlos verfügbarer Programme sprechen für dessen Wahl.

bsb_lcd

Blockschaltbild LCD Steuerung

LCD, Mikrocontroller und die anderen Bauteile benöigen alle eine Spannungsversorgung von 5V und insgesamt rund 150 mA. Besonderheiten sind u.a. die Verschaltung eines Potentiometers an die LCD zur Einstellung der gewollten Helligkeit des Displays und der Quarzkristall als externer Taktgeber für die UART-Kommunikation mit dem Microcontroller der Speichergruppe. Der Mikrocontroller wird zusätzlich mit einem Reset-Button verschaltet.

Der eingesetzte Display ist ein LCD 16×2. Das ursprüngliche geplante GLCD 128×64 wurde verworfen, da wir es auf dem Steckbrett nicht zum funktionieren bringen konnten. Das Display besteht aus 2 Zeilen mit je 16 Zeichen und somit ausreichend Platz um das Menü und die Werte für das Projekt anzuzeigen.

Im Rahmen unseres Projektes programmieren wir in der Atmel-Umgebung mit C-Code. Zunächst müssen die Ports initialisiert werden. Anschließend geht es im Wesentlichen darum, Daten auf die Pins zu legen und die Visualisierung durch Shiften von Daten auf bestimmte, designierte Ports und das Setzen von Highs und Lows an den Ports, umzusetzen.

Am Ende möchten wir einen Bildschirm erschaffen, durch welches wir anhand eines Steuerungskreuzes durch Haupt- sowie Untermenüs (ähnlich wie eine Baumstruktur) navigieren können, die uns Sensordaten ausgeben.

Die Programmierung des Microcontrollers erfolgt mit C. Zuerst werden die entrsprechenden Ports und Pins für die LCD und die Buttons initialisiert. Anschließend wird die Menüstruktur erstellt und mit Werten gefüllt. Der restliche Code befindet sich in einer endlosen while(1)-Schleife. Darin wird zuerst überprüft ob ein Button betätigt, wurde und entsprechend reagiert (siehe Steuerung). Je nach Eingabe muss dann anschließend die LCD aktualisiert werden.

Die Menüstruktur wurde als Array aus C-Structs realisiert. Jeder Menüeintrag ist in einem solchen Struct gespeichert, welches den Namen (z.B. Ec-Wert), Ist-Wert, Soll-Wert, Minimal- und Maximalwerte und die Schrittweite (relevant für die Veränderung des Soll-Wertes) beinhaltet. Weiterhin ist das Menü in 3 Ebenen gegliedert. In der ersten Ebene werden die Bezeichnungen der Paramter angezeigt. Diese lauten:

  • EC-Wert
  •  pH-Wert
  •  Pumptaktung
  •  Luftfeuchte
  •  Temperatur
  •  Lichtstärke
  •  Lichtfarbe
  •  Füllstand

In der zweiten Ebene werden dann Ist- und Soll-Werte des jeweiligen Parameters angezeigt und in der dritten und letzen Ebene kann der Soll-Wert angepasst werden.

Die Menüsteuerung funktioniert über 4 Buttons die wie ein Steuerkreuz angeordnet sind. Links: Eine Ebene hoch bzw. Abbrechen, Rechts: Eine Ebene runter, bzw. Bestätigen, Hoch: Geh zu vorherigen Menüeintrag, Runter: Geh zu nächsten Menüeintrag. Der Reset-Button, started den Microcontroller neu und der letze Button dient zur Aktualisierung der Werte. Wird der Button betätigt, sendet der Micro-Controller durch den DVI-Stecker ein Signal an die Speichergruppe und die UART-Kommunikation beginnt. Dabei, sendet die LCD-Gruppe die eingestellten Soll-Werte an die Speichergruppe und empfängt im Gegenzug die aktuellen Ist-Werte.

Hier die Schaltung und verwendete Bauteile:

Schaltung LCD

Schaltung LCD

Bauteile:

  • Microprozessor: Atmega32
  • LCD 16×2 mit 10 kOhm Poti zum Kontrast einstellen
  • 6-Pol-Anschluss für Programmer
  • VGA-Anschluss für UART-Kommunikation
  • 6 Buttons mit je einem 10 kOhm Widerstand
  • 16MHz Quarzkristall mit 2 22pF Kondesatoren zwischen Kristall und GND
  • 2 100 nF Kondensatoren zwischen VCC und GND des uC
  • LED mit 220 Ohm Widerstand als Strombegrenzung

Nachdem die Schaltung erfolgreich auf dem Steckbrett funktionierte, erfoglte das layouten mit EAGLE, ätzen und löten der Platine.

Platinenlayout LCD

Platinenlayout LCD

Fertige Platine

Fertige Platine

Quellen:

  • https://www.mikrocontroller.net/articles/AVR
  • http://www.electronicwings.com/avr-atmega/graphical-lcd-128×64-interfacing-with-atmega1632
  • https://electrosome.com/interfacing-lcd-atmega32-microcontroller-atmel-studio/