Inhalt
- Die Grundlagen
- Die Schaltung
- Datenblätter und Software
- Layout
- Gehäuse
- Programmieren
- Programmieren mit der AVR-Suite
- Programmieren unter Linux
- Assembler AVRA
- SP12 Grundlagen
- Die Software
- Wie gehts unter Linux
- Nutzungsvorschläge
- Links
- Entwickler
- Kommerzielle Nutzung
Was man als Erstes braucht ist ein Display welches es in allen erdenklichen
Variationen gibt. Ich habe mich für ein 16x4 mit Beleuchtung entschieden
(ca. 40DM bei Reichelt-Elektronik 10/2001).
Es ist natürlich möglich auch kleinere Displays zu benutzen, da liegen die
Kosten bei der Hälfte und man kann sich etwas Programmierarbeit ersparen
(Zeilen sind nicht versetzt, siehe Controller Anleitung).
Wichtig an dieser Stelle ist der verwendete Controller auf dem Display, es muß
ein HD44780 oder Kompatible sein (z.B. LSI KS007xB).
Diese Display's werden parallel angesteuert, also muß ein Prozessor her, welcher die Daten
seriell entgegennimmt, evt. Steuercodes ausführt und natürlich meinen Text an die entsprechende
Position setzt. Nun gibt es vielerlei solcher kleinen Alleskönner jeder mit seinen
Vor- und Nachteilen. Entschieden haben wir uns dann für einen
ATMEL 2333, dieses Wunderwerk hat 20 I/O's, AD-Wandler,
2kByte Programmspeicher, 128Byte SRAM und EEPROM und vielerlei weiterer Nützlichkeiten.
Der Große Vorteil allerdings ist seine Programmierbarkeit, ein kleines Käbelchen gebaut,
Software geladen und schon kann es losgehen, und was das spätere probieren erleichert
- man kann ihn in eingebautem Zustand programmieren. Kurz und gut, genau richtig der Kleine
(ca. 9DM bei Reichelt-Elektronik 10/2001).
Auch hier kann man kleinere Typen einsetzen, z.B. 2313, dies macht die Schaltung kleiner, aber
man kann später weniger Zusätze anbringen.
Nun brauchen wir noch eine Pegelanpassung an die serielle Schnittstelle, wozu uns der
MAXIM 232 dient und natürlich die
übliche Stromversorgung die bei Verwendung der Hintergrundbeleuchtung 300mA
bei 5V liefern muß (ansonsten ca. 100mA).
Damit hätten wir im Prinzip alles nötige, ein paar LED's noch und evt. einen
Fotowiderstand damit die vielen I/O's einem sinnvollen Zweck bekommen.
Die Schaltung ist schnell erklärt..
Zuerst die Stromversorgung, nicht weiter kompliziert. Wer sich mit weniger Komfort zufrieden
gibt und ein Display ohne Beleuchtung verwendet, kann den Strom evt. auch aus der Schnittstelle
beziehen.
Dann gehts weiter zur schon erwähnten Pegelanpassung mittels des MAXIM Chips.
Es ist ebenfalls eine Standartschaltung die nicht viel Aufwand verlangt.
Wir haben hier auch RxD mit angeschlossen um dem Computer evt. auch mal Daten
schicken zu können, bzw. um XON/XOFF zu simulieren.
Ihr könnt später zwischen der CTS bzw. XON/XOFF - Programmversion
wählen bzw. benutze ich gleich beides.
An dieser Stelle wird auch die Drehung von Sende- und Empfangsleitung vorgenohmen, sodaß
später ein 1:1 Kabel von der seriellen Schnittstelle verwendet werden kann.
(Es geht also TXD von der COM-Schnittstelle auf PIN2-RXD des ATMEL).
Nach der Pegalanpassung geht es zum Prozessor.
Dieser besitzt einen internen Taktoscillator welchen wir extern mit einem 8MHz-Quarz nebst
Kondensatoren beschalten. Weiterhin sind an ihm 5 LED's angeschlossen,
die später wahlweise programmiert werden können.
Und natürlich macht er seine Hauptaufgabe, - er steuert unser Display an.
Ich habe noch die Beleuchtung des Displays per Software schaltbar gemacht und
ein kleines Poti integriert, welches den Kontrast steuert.
An einigen Ausgängen sind die Programmierleitungen über einen Widerstand parallel
geschaltet. Dieses Verfahren funkioniert wunderbar und man hält sich I/O's frei und
braucht den Chip zum programmieren nicht aus der Schaltung zu nehmen.
Genaueres zu den einzelnen Bauteilen könnt ihr in den jeweiligen Datenblättern lesen.
Ich stelle Euch die Datenblätter die ich benötigte zum Download auf meine Homepage.
Die AVR-Suite von Atmel solltet Ihr allerdings von dort laden, da gibt es immer das Neueste.
Als Programmiertool verwende ich WinAVR. Da es noch in Entwicklung ist, solltet ihr auch dies
von der Original-Homepage laden.
Keine Angst, ATMEL stellt alles Kostenfrei zur Verfügung. Eine Nette Geste,
finde ich..
Mein Layout habe ich an ein fertiges Gehäuse angepaßt, in dem die Höhe begrenzt war und ich
somit nichts unter das Display plazieren konnte. Wer da ein anderes Gehäuse hat, muß selbst
'Hand anlegen' ;)..
Layout-Beschreibung |
Download als GIF |
Download als PDF |
Download als PS |
Lötseite - Blick von Unten |
 |
.. |
.. |
Bauteilseite - Blick von Unten |
 |
.. |
.. |
Bauteilseite - gespiegelt |
 |
.. |
.. |
Bauteile - Blick von Unten |
 |
.. |
.. |
Bauteilse - gespiegelt |
 |
.. |
.. |
Gesamt - Blick von Unten |
 |
.. |
.. |
Und hier ein Beispiel wie es fertig aufgebaut aussehen könnte:..
Die Frage ist schnell geklärt..
-
Erstens In den Rechner - gut für Server,da könnte
man dann auch die Stromversorgung einsparen
-
Zweitens Externes Gehäuse - für allt. Gebrauch,
da habe ich genohmen was da war und da kann jeder nach indiv.
Bastelleidenschaft werkeln.
Nun da die Schaltung fertig aufgebaut, geprüft und OK ist, können wir ans
Programmieren gehen. Die Bauanleitung zum Programmierkabel findet Ihr auf der
WinAVR-Seite von Roland Walter.
Anm.: Ihr solltet generell mal dort vorbeischaun und Euch die Texte zu den
ATMEL-Chips durchnehmen.
Wir haben die Widerstände fest in die Schaltung integriert und so reichte es aus
ein einfaches Kabel zu bauen in dem die fünf Anschlüsse,
zur Druckerschnittstelle führen.
Ich habe die jeweiligen Pins zur Druckerschnittstelle genau im Schaltplan vermerkt.
Nachdem das Kabel fertig ist, müssen wir uns noch für eine der vielen Programmiersprachen
entscheiden. Wir haben uns für Assembler in Verbindung mit der AVR-Suite(Windows) von ATMEL
entschieden, da sie einen Simulator enthält und somit für den Einstieg ideal ist.
Später kann man dann unter Linux einen reinen Assembler einsetzen, ich benutze da zur Zeit
AVRA.
Es gibt allerdings auch noch einige Basic- und Pascalähnliche Sprachen und sogar C
(auch für Linux, aber von mir noch nicht getestet).
Und da wir dann mit der Suite schonmal in Windofs arbeiten, nehmen wir zum Programmieren des
Chips WinAVR (auch dies gibt es für Linux ohne grafisches Allerlei, und sogar als Grundlage
des WinAVR - SP12 genannt).
So, nun können wir einen kleinen Blick in die AVR-Suite wagen. Man ein legt dort
Neues Projekt an und probiert ersteinmal ein wenig.
..später kommt eine kurze Einführung.. in die AVR-Suite...
Wer schon Erfahrung mit Assembler hat und sich zutraut gleich ohne Simulator anzufangen, gebe
ich hier eine kurze Einleitung für
SP12
und
AVRA.
Nachdem wir die beiden Programme entpackt und neu übersetzt (make, make install) haben,
kann es loßgehen.
AVRA ist der Assembler. Er ist zu dem ATMEL-Assembler kompatibel und somit kann
man den unter Windows geschriebenen Programmcode auch mit diesem übersetzen.
Es reicht ein einfacher Aufruf von:
avra main.asm
Wenn das Programm Fehlerfrei ist, wird eine Datei mit der Endung .hex erzeugt.
Dies ist unser Code den wir in den Atmel 'brennen' müssen, wobei es sich um
das Atmel-generic Format handelt.
Da wir allerdings auch Daten für unser EEROM haben, wird noch eine zweite Datei
angelegt 'xxx.eep.hex' . Diese enthählt logische Weise die Daten die im EEPROM
stehen sollen.
SP12 dient dann dazu den Programmcode (.hex) und die EEPROM-Daten (.eep) in den Chip zu schreiben.
Allgemein sollte sich jeder einmal die Datei sp12.doc anschauen. Sie enthählt eine
Umfangreiche Anleitung wie ich sie hier nicht geben kann und will. Die
folgenden Zeilen sind somit nur für den kleinen Einstieg gedacht.
Zuerst gilt must be root ;) ..
Dann müssen wir SP12 beim Ersten starten mit der Option -i aufrufen womit das
Programm initalisiert wird (LPT festgestellt usw.).
sp12 -i
Nun sollten wir unser Programm in den Atmel brennen können:
sp12 -wpfC main.hex
w : write
p : programm data
f : filename folgt
C : Checksumme
Und jetzt folgen die EEPROM-Daten:
sp12 -wefC eeprom.eep.hex
e : eeprom daten
Das ganze lässt sich auch in eine Zeile packen..
sp12 -wpfC main.hex -wefC eeprom.eep
Das sollte als sehr kleiner Einstieg ausreichend sein, wobei SP12 wirklich
weitaus mächtiger ist.
In meinen Programm wird hautpsächlich nur Nachgeschaut ob ein Zeichen im Puffer ist.
Dieser Puffer wird durch die Interruptroutine beschrieben, welche durch ein empfangenes Zeichen
auslöst wird. Ist der Puffer voll wird CTS gesetzt bzw. XOFF gesendet (je nach Version).
Ist nun ein Zeichen im Puffer wird dies geprüft ob es evt. einen Befehl einleitet, ansonsten
wird es ausgegeben und es wird bei Bedarf CTS wieder gelöscht bzw XON gesendet.
Das ist das Prinzip, schaut Euch das Programm an, es ist ausführlich Kommentiert.
In die Sofware hab ich einen kleinen 'Interpreter' eingebaut, so kann man ihm sagen
welche LED angehen, wo der Cursor hin soll, ob die Beleuchtung an ist und noch paar
kleinerer Nützlichkeiten. Wie die Codezeichen lauten steht in der Anlage.
Das Display arbeit jetzt seit 09/2000 fehlerfrei mit der Software. Das Programm erfüllt
noch nicht alle meine Wünsche und ist noch nicht optimiert, aber ich hab ja noch Zeit ;)
Hier vorab erstmal mein kleines Progrämmchen, und für weitere Anregungen bin ich
immer zu haben.
Programmcode V0.6 CTS
Und eine Anlage:
als .txt oder als .pdf
Änderungen zur Version 0.55:
- der Pufferüberlauf beim senden von mehr als Puffergrösse ist behoben (man kann
jetzt den Empfangspuffer wieder aktivieren !)
- LED's haben ein zusätzliches Argument -> BLINKEN
Auf Grund einiger Anfragen kommen ein paar Zeilen:
1. Man teile Linux mit welchen UART man besitzt (tlw. schon gemacht)
setserial /dev/ttyS0 uart 16550A
2. Man stelle die Übertragungsparameter ein:
stty -F /dev/ttyS0 speed 38400 ixon ctrscts
und schon kann der Spass losgehen...
ich nutze das Display zur Zeit zur Ausgabe von Statusmeldungen,
z.B. Fortschritt von SETI, loadavg und ob ich ONLINE bin. Natürlich gibt es da noch erheblich
mehr Möglichkeiten die jeder selbst 'entwerfen' kann.
Man schickt einfach eine Zeile an die serielle Schnittstelle
(unter Linux relativ einfach mit Cron automatisierbar) und mehr ist nicht nötig,
der übliche Treiberkampf kann entfallen.
- Beispiele:
- Diese Zeile schaltet zuerst die Beleuchtung an (~B1), löscht dann das Display (~C),
setzt Cursor auf Zeile 0 und Spalte 5 (~P005) und schreibt da Hallo hin...
echo "~B1~C~P005Hallo" >/dev/ttyS0
- Dies filtert den Fortschritt aus der Seti-Statusdatei..
das `-Zeichen ist wichtig ! .. ASC(96)
echo ~P200Seti:`cat state.sah 2>/dev/null | grep prog | tr "a-z,=" "\b" | cut -c8-9` >/dev/ttyS0 2>/dev/null
- Nach Installation vom lm_sensors kann die Prozessortemp. gefiltert werden..
echo ~P109`cat /proc/sensors | grep Mainboard | cut -c10-15` >/dev/ttyS0 2>/dev/null
Es gibt größere Chips mit 4KByte Programmspeicher (4333) bis hin zu den Riesen mit
512kByte. Dort hinein kann man dann schon nen kleineren Linuxkernel verpacken oder ein
eigenes kleines Terminalprogramm.
Also, auf zum probieren und Viel Spaß...
Aus gegebenem Anlass möchte ich darauf hinweisen, dass eine kommerzielle Nutzung
, Vermarktung oder ähnliches nur nach schriftlicher Genehmigung durch mich erlaubt
ist.
Anm.:
Die Entwicklung des Displays hat eine Menge Arbeit gemacht und wer damit Geld verdient,
sollte doch Bitte die Grundsätze der 'Fairniss' einhalten.
Michael Majunke
und
Sascha Weber
|