AVR Thermometer

Beschreibung

Bei dieser Schaltung handelt es sich um eine meiner ersten halbwegs sinnvollen Anwendungen für einen Microcontroller. Es ist ein Thermometer mit 2×16-Zeichen-LC-Display, welches die aktuelle Temperatur und die Extremwerte (Minimal- und Maximaltemperatur) anzeigt. Die Schaltung ist so konstruiert, dass sie genau unter die Platine des Displays passt. Somit ergibt sich ein schön kleines und kompaktes Gerät.

Zusammengebautes Thermometer
Zusammengebautes Thermometer

Die Schaltung ist nicht als fertig einsatzbereites Gerät zu verstehen, sondern als eine Plattform zum experimentieren - auch, weil es einige Schwierigkeiten im Betrieb gibt. Durch die Platzierung des Temperatursensors und die Erwärmung der Schaltung im Betrieb werden die Messwerte verfälscht. Das lässt sich durch die Verwendung eines externen Temperatursensors jedoch vermeiden. Durch den relativ hohen Stromverbrauch des verwendeten Controllers und des Displays ist außerdem der Betrieb mit Batterien nur eingeschränkt möglich.

von der Seite
von der Seite

Die Hardware

Als Microcontroller wird ein AT90S2313 von Atmel verwendet. Daran sind über einen 2-Wire-Bus (kompatibel zum I2C-Bus von Philips) ein kleines EEProm zur Speicherung der Extremwerte und der Temperatursensor, ein DS1621 von Dallas Semiconductors (inzwischen von Maxim übernommen) angeschlossen.

Display und Controller getrennt
Display und Controller getrennt

Daneben gibt es noch einige Anschlüsse zur Programmierung des Controllers, zum Anschluss weiterer Bausteine an den2-Wire-Bus, zum Anschluss eines Tasters und der Versorgungsspannung und zur Kopplung mit dem PC über die serielle Schnittstelle. Versorgt werden kann das Thermometer über ein kleines Netzteil oder mit Batterien ab 6 Volt, da ein 5V-Spannungsregler eingebaut ist. Das Display besitzt eine Hintergrundbeleuchtung, die ich zur Zeit aber nicht verwende, da sich die gesamte Schaltung sonst etwas erwärmt und somit die Messwerte etwas abweichen. Es lässt sich aber ein externer Sensor anschliessen, womit dieses Problem behoben wäre.

Die Schaltung ...
Die Schaltung ...
... und das Layout
... und das Layout

Es gibt zwei Jumper in der Schaltung. Der eine is mit dem Reset-Anschluss des Controllers verbunden. Er sollte normalerweise offen sein und nur geschlossen werden, wenn sich der Controller aufhängt. Der andere dient dazu, den Temperatursensor, das EEProm und das Display von der Versorgungsspannung zu trennen, während der Controller in der Schaltung programmiert wird. Danach sollte er wieder geschlossen werden, da das Thermometer sonst nicht funktionieren kann.

Die Software

Es gibt zwei Versionen der Software, genauer der Firmware des Microcontrollers. Die eine ist in Assembler für den avra Assembler geschrieben. Sie besteht aus mehreren Dateien, die jeweils eigenständige Funktionseinheiten (I2C-Bus, UART, Delays, Display, etc.) darstellen und sich somit auch leicht in anderen Projekten verwenden lassen sollten.

Zum Vergleich gibt es nun eine in C geschriebene Version für den avr-gcc (genauer WinAVR) mit gleicher Funktionalität (Anzeige der Temperatur, Minimum und Maximum). Obwohl ich mir bei der Programmierung der Assembler-Version Mühe gegeben habe, möglichst kompakten Code zu schreiben, ist die C-Version im Speicherverbrauch (Programmspeicher) nicht wesentlich schlechter (978 Bytes für die Assembler-Version gegenüber 1024 Bytes für die C-Version).

Die C-Version ist entsprechend den Fähigkeiten von C noch stärker modularisiert, so dass sich einzelne Funktionseinheiten leicht in anderen Projekten verwenden lassen sollten. Alle Funktionen sind mittels Doxygen dokumentiert, so dass der EInsatz in anderen Projekten keine Probleme bereiten sollte.

Download

LinkedIn logo mail logo