Mikrocontroller

Für die Steuerungsgruppe war eine der ersten Fragen, welcher Mikrocontroller sich gut eignete. Die Entscheidung fiel dabei auf Empfehlung der Projektlabor-Tutoren auf den ATmega32-16PU. Hierfür sprach unter Anderem der interne ADC, der genutzt wurde, um die analogen Signale der Sensoren der anderen Kleingruppen auszuwerten und entsprechend zu verarbeiten. Wichtig bei der Erstellung der Schaltung war, die analogen Signale der anderen Gruppen an Port A des Mikrocontroller zu legen, da nur dieser über einen Analog-Digital Umsetzer verfügte, mit dem die anliegenden Spannungen ausgelesen werden können. Daher wurden diese Signale, die auf dem Bus auf jeder zweiten Leitung zwischen 7 und 17 lagen, mit den Pins PA0-PA5 verbunden. Alle anderen Signale auf dem Bus lagen in digitaler Form vor und konnten daher beliebig an die Pins des Mikrocontrollers gelegt werden. Des weiteren über die digitalen Eingänge verbunden wurde der Verbindungsstecker zu der Platine des Displays. Als Verbindungsstecker dient ein Wannenstecker der Art con-ml ML 16L. Außerdem wurde in die Schaltung ein Quarz verbaut um den Mikrocontroller mit 16 MHz zu takten. Um für den Fall eines Kurzschlusses (beispielsweise beim Löten) vorzusorgen, wurde in Reihe vor die digitalen Ausgänge kleine Widerstände als Schutz verbaut. Dimensioniert wurden diese nach dem Ohm’sche Gesetz. Da die Eingangsspannung bei 5V liegt und der maximal verträgliche Strom der Pins laut dem Datenblatt 40mA beträgt müssen die Widerstände mindestens einen Wert von 125Ω haben.

busverteilung

Platinenlayout

Das Hauptaugenmerk der Mikrocontroller Gruppe lag auf der Programmierung eines lauffähigen Programmes welches Messdaten der Sensoren auswertet und entsprechende auf diese reagiert.
Um den Mikrocontroller Messdaten zuzuführen und mit den Platinen der anderen Grup- pen verbinden zu können wurde ein entsprechendes Board erstellt. Die auf dem Board befindliche elektrische Schaltung sollte den Mikrocontroller mit Strom versorgen, die Pins des Mikrocontrollers mit dem Bus-Stecker verbinden und über einen Anschluss für den Displays verfügen. Zudem sollte ein Reset-Knopf integriert werden durch den der Mikrocontroller neu gestartet werden kann. Die analogen Signale wurden so gelegt, dass sie am ADC anliegen, die Belegung der anderen Pins richtete sich nach der Position der Bauteile auf der Platine wodurch Kreuzungen von Leiterbahnen vermieden werden konnten. Als Vorlage für die Stromversorgungsschaltung mit integriertem Reset-Button diente eine Platine aus dem Projekt-Labor die ebenfalls mit dem ATmega32-16PU arbeitete. Die zu dieser Schaltung zugehörigen Bauteile wurden möglichst nah an die entsprechenden Pins des Mikrocontrollers gesetzt, um diesen präzise zu takten und versorgen zu können. Besonders wichtig ist die Nähe des 100nF-Kondensators zur Stromversorgung, da dieser durch seinen Auf- und Entladevorgang dazu dient die hochfrequenten Störschwingungen zu glätten. Als zweiter Abblockkondensator wirkt der Elektrolytkondensator, der auf dem gleichen Prinzip aufbauend dazu dient größere Spannungseinbrüche der Versorgungsspannung abzufangen. Ohne diese bestände die Gefahr von Spannungsschwankungen, die sich negativ auf die gesamte Schaltung auswirken würden. Die Widerstände an den digitalen Ausgängen schützen den Mikrocontroller im Falle eines Kurzschlusses, da die Kurzschlusssicherung gegen Lötfehler erst nach den Widerständen greift. Der 16-polige Anschluss für den Display wurde an Port B und Port D des Mikrocontrollers angeschlossen wobei Pin 1-11 des Steckers für digitale Signale, Pin 13 für die Versorgungsspannung und Pin 15 als Masse festgelegt wurde. Da von dem Busstecker nur 32 Pins benötigt wurden und nicht die 64 wurden die einander gegenüberliegenden Pins jeweils kurzgeschlossen.

Beschaltung des Mikrocontrollers

Programmierung

Um auf die Programmierung des μC einzugehen, muss zunächst betrachtet werden, was der Anspruch an das Endprojekt war. Wirft man einen Blick auf die Busbelegung, so bekommt man einen groben Eindruck der Schnittstellen, die es galt in die Steuerung einzubinden. Die Grundidee war, über den Mikrocontroller die analogen Eingangssignale auszuwerten und den momentanen Wert auf dem Display auszugeben. Dort würde neben dem Momentanwert ein manuell eingestellter Sollwert angezeigt. Je nachdem ob dieser kleiner oder größer ist würde folglich über die digitalen Pins des Mikrocontrollers das entsprechende digitale Signal angesteuert. Beispielsweise wird der Feuchtigkeitssensor ausgelesen und der Wert auf dem Display angezeigt. Ebenfalls auf dem Display sichtbar wäre der vom Bediener eingestellte Sollwert. Angenommen dieser übersteigt den Momentanwert, so würde anschließend der Tank angesteuert werden und das eine Bewässerung zur Folge haben. Der erste Schritt in der Programmierung bestand folglich darin, die an Pin A angeschlossenen analogen Signale in Digitale zu konvertieren. Da der ADC nicht mehrere Eingänge gleichzeitig konvertieren kann, diente eine Funktion mit einer switch-case-Anweisung dazu, dass die insgesamt 6 Werte nacheinander angesteuert, und konvertiert werden. In der main-Funktion wurden die Eingänge alle einmal ausgelesen und in einem Array abgespeichert. Anschließend werden Umrechnungsfaktoren für Temperatur (◦C) , Feuchtigkeit ( g ), Füllstand (l) und Helligkeit ( lm ) auf die jeweiligen Daten angewandt. Mit Hilfe eines Pointers wurden diese Werte an die Display-Teilgruppe weitergegeben. Ein weiterer Pointer diente dazu, den auf dem Display eingestellten Sollwert an unsere Teilgruppe weiterzugeben, um diesen mit dem Momentanwert vergleichen zu können. Je nachdem ob der Momentanwert den Sollwert über- oder unterschreitet, werden entsprechende digitale Ausgänge gesetzt bzw. gecleart. Eine Problematik bietet dabei noch der Fall, dass der Momentanwert genau um den Sollwert schwankt und ihn in kurzen Zeiträumen wiederholt über- und unterschreitet. Daher wurde in einer if-Bedingung noch eine Art Schmitt-Trigger realisiert, der zur Folge hat, dass nicht sofort das Erreichen des Sollwertes den Schaltvorgang hervorruft. Stattdessen gibt es eine Grenzzone in der der momentane Zustand aufrecht erhalten wird und erst unter- bzw. überschreiten dieser Grenzen hat ein Umschalten zur Folge.