Linux USB LCD Display mit Watchdog und Tasten
ArticleCategory: [Choose a category, do not translate
this]
Hardware
AuthorImage:[Here we need a little image from you]
TranslationInfo:[Author + translation history. mailto: or
http://homepage]
original in en Guido
Socher
en to de Guido
Socher
AboutTheAuthor:[A small biography about the author]
Guido mag Linux, weil es ein Paradies f�r Leute ist, die
ihre eigene Hardware und Software entwickeln wollen.
Abstract:[Here you write a little summary]
Dieser Artikel ist das Ergebnis der vielen positiven R�ckmeldungen
zu meinen bisherigen Hardware-Artikeln.
Ihr LinuxFocus-Leser seid wirklich gro�artig! Einige von euch wollten
wissen, wie man den USB Bus benutzen kann. Dieser Artikel pr�sentiert eine
einfache und sch�ne L�sung. Wir benutzen das LCD Display aus dem Mai 2002 Artikel
und bringen es mit USB zum Laufen. Das ganze wird "bus powered" sein. Man
braucht also keine zus�tzliche Stromversorgung.
F�r diesen Artikel braucht man wenigstens eine in Teilen installierte
Linux AVR Entwicklungsumgebung. Wie man sie aufsetzt, ist in dem
Artikel Programmierung des AVR
Microcontroller mit GCC, M�rz 2002 beschrieben.
ArticleIllustration:[This is the title picture for your
article]
ArticleBody:[The article body]
Einf�hrung
USB ist cool, weil es eine moderne Schnittstelle ist und die
M�glichkeit bietet, die Ger�te direkt mit Strom �ber den USB
Bus zu versorgen. Die Stecker sind klein und gro�e Datenmengen
k�nnen �ber ein d�nnes Kable transportiert werden.
Das sind die positiven Seiten von USB. Die Nachteile sind eine
komplizierte Hardwareentwicklung wegen den hohen Frequenzen und das
Protokoll ist sehr kompliziert. Man braucht nur einen Blick auf
die Protokollspezifikation (http://www.usb.org/developers/,
du brauchst die 1.1 Spezifikation) zu werfen und man ist
geschockt. Es sind 327 Seiten Papier und das Dokument ist
nicht einfach zu verstehen. Kein Wunder, dass es sooo viele
fehlerhafte Implementationen von USB Devices gibt. Eine
mehr benutzerfreundliche Einf�hrung kann man unter
http://www.beyondlogic.org/
finden, aber die Spezifikation bleibt komplex.
Was soll man tun? Wie k�nnen wir unseren Microcontroller an
den USB Bus anschlie�en? FTDI, eine schottische Firma, hat die
L�sung (http://www.ftdichip.com). Sie
bieten einen Chip, der eine USB zu RS232 Seriell Umsetzung macht.
Eine Seite des FT232BM Chips ist rs232 und die andere USB.
Mit anderen Worten, man ersetzt einfach den MAX232, den man
bisher bei der rs232 Schnittstelle zur Spannungsumsetzung brauchte,
mit dem FT232BM Chip und man ist fertig.
Der Treiber
Der FT232BM ist eine Plattform�bergreifende L�sung. Treiber
gibt es f�r viele Betriebsysteme. Das Linux Kernelmodul nennt sich
ftdi_sio und ist Open Source. Es ist Teil des Standard Linux Kernel.
Der FT232BM bietet mehr als nur eine USB zu rs232 Umsetzung und
das Linux Kernelmodul ist noch in der Entwicklung, um auch
all die anderen Funktionen zu implementieren. Die reine USB nach
rs232 Konvertierung ist aber fertig und ich konnte z.B. einfach
einen Standard Redhat 7.3 Kernel (2.4.18) ohne neu kompilieren
oder �nderungen benutzen. USB Stecker einfach reinstecken, fertig.
ftdi_sio wird unter folgender Adresse entwickelt: http://ftdi-usb-sio.sourceforge.net/.
Bei meinem Redhat 7.3 wurden alle Module automatisch geladen, wenn
ich den USB Stecker einsteckte. Falls das bei dir nicht der Fall ist,
dann pr�fe, dass du folgende Module hast (f�r USB-UHCI):
/sbin/lsmod usb-uhci
/sbin/lsmod usbcore
/sbin/lsmod usbserial
/sbin/lsmod ftdi_sio
Die Devicedatei ist
/dev/ttyUSB0
Die Entwickler von ftdi_sio empfehlen, den letzten Kernel (2.4.20), aber
wie schon gesagt, hat 2.4.18 auch funktioniert (jedenfalls f�r die
Dinge, die wir hier brauchen).
Die Schaltung
Die Schaltung ist ganz einfach aufgebaut. Der FT232BM wird einfach
zwischen den Rx/Tx Anschl�ssen des Microcontrollers und dem USB Stecker
eingebaut. Dazu braucht man ein 6 Mhz Quarz und einige andere Teile,
die in der Design Spezifikation von FTDI beschrieben sind. Das
"ferrite bead" (Ferritkern, im Schaltbild rechts) ist eine
kleine Spule, die die hohen Frequenzen (der USB Bus arbeitet mit
48Mhz) filtert. Man kann auch einfach 10 Windungen eines d�nnen
Drahtes �ber einen 1K Widerstand wickeln und das als Spule nehmen.
Eine Sache, die man beachten muss, ist die Stromaufnahme.
Die Schaltung muss weniger als 100mA verbrauchen, wenn man
sie �ber den USB Bus betreiben will. Zus�tzlich muss dein Device den
USB Suspend Mode unterst�tzen. Wenn der Pin, der mit "sleep"
man FT232BM bezeichnet ist, auf Null geht, dann muss die ganze
Schaltung weniger als 0.5mA verbrauchen. Das ist eine
sehr harte Anforderung. Der AVR unterst�tzt einen "idle mode",
in dem er weniger als 2mA braucht und einen "power down" mode, in dem
er nur 20uA braucht. Es ist aber viel einfacher, den Microcontroller
wieder aus dem "idle mode" aufzuwecken. Ich habe deshalb
beschlossen, den "idle mode" zu nehmen, selbst wenn das die USB
Spezifikation etwas verletzt. Die optionale Hintergrundbeleuchtung
des LCD Display wird im Suspend Mode �ber den Transistor ausgeschaltet.
Die gesamte Schaltung braucht dann etwa 3mA. 3mA ist mehr als 0.5mA,
aber USB Host Controller Chips k�nnen den Strom nicht so genau messen,
um diese Verletzung der Spezifikation zu entdecken. Es sollte
funktionieren.
Nachdem ich das gesagt habe, muss ich leider zugeben, dass ich selbst keinen
Computer habe, der Suspend unterst�tzt. Deshalb konnte ich diesen
Teil nicht testen. Falls du einen Computer hast, der das kann,
vermutlich ein moderner Laptop, dann teste bitte diesen USB
Suspend Zustand und berichte mir.
Der Rest der Schaltung ist fast identisch zu dem, was im Mai 2002 Artikel pr�sentiert wurde.
Ich werde deshalb nicht weiter ins Detail gehen.
Du kannst auf das Schaltbild klicken, um ein gr��eres Bild zu erhalten.
Die Eagel Dateien sind zusammen mit der Software am Ende des Artikels
downloadbar.
Die Platine ist eine einseitige Platine und nur der blaue Layer
sollte ge�tzt werden. Die roten Linien sind Dr�hte.
Die USB Type-B Buchse, die man f�r diese Schaltung braucht,
hat folgende Anschlussbelegung:
Arbeiten mit SMD Chips
SMD Chips haben gute mechanische und elektrische Eigenschaften,
aber sie sind ein Albtraum f�r Hobbyelektronikfans. Man braucht
wirklich einiges an Geschick beim L�ten und der Teil der Platine,
auf der der SMD Chip aufgel�tet wird, muss sehr sauber gearbeitet sein.
Mit anderen Worten, das ist nichts f�r Anf�nger. Schau dir die
Liste mit Alternativen an, wenn du nicht sicher bist, dass du
den SMD Chip sauber l�ten kannst.
Der SMD Chip muss aufgel�tet werden, bevor irgendwelche anderen
Teile auf die Platine kommen.
Um den Chip aufzul�ten, gibt man zun�chst etwas L�tzinn auf die
Pads auf der Platine. Danach kommt ein d�nner Film SMD L�tpaste
(auch L�thonig genannt) auf die verzinnten Pads. Man kann auch einfach
L�tlack von "Kontakt Chemie" aufspr�hen, dann braucht man keinen
L�thonig.
Jetzt reinigt man den L�tkolben und entfernt alles Zinn. Der
FT232BM wird genau positioniert und dann dr�ckt man mit dem L�tkolben
jeden Pin einzeln leicht an. Nach dem ersten Pin kann man noch mal
checken, dass der Chip auch richtig sitzt. Beim Aufl�ten gibt man
kein L�tzinn hinzu.
Dieses Verfahren funktioniert sehr gut. Es ist nicht so wichtig, dass
man einen kleinen L�tkolben hat. Ein normaler L�tkolben tut es.
Es ist viel wichtiger, dass der L�tkolben sauber ist. Ich kann nur
abraten von irgendwelchen anderen Verfahren. K�chentoaster werden
z.B. oft empfohlen. Damit macht man die SMD Chips nur kaputt.
Der Test
Ich schlage vor, die Schaltung in zwei Schritten zu testen. Zuerst
schlie�t man die Schalung an den Rechner (USB) an, ohne dass der
AVR Microcontroller im Sockel steckt. Linux sollte den FTDI Chip
erkennen und man sollte folgenden Eintrag in /proc/bus/usb/devices
finden:
T: Bus=02 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2
Spd=12 MxCh= 0
D: Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs=
1
P: Vendor=0403 ProdID=6001 Rev= 2.00
S: Manufacturer=FTDI
S: Product=USB <-> Serial
C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr= 90mA
I: If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff
Driver=serial
E: Ad=81(I) Atr=02(Bulk) MxPS= 64 Ivl= 0ms
E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl= 0ms
Danach steckt man den AVR Microcontroller in die Fassung und l�dt das
Testprogramm. Die LED sollte dann blinken. Entpacke das linuxusblcd
Tar-File (siehe Download am Ende des Artikels) und tippe:
make testload0
Dabei m�ssen sowohl der USB Stecker als auch das Programmierkabel
eingesteckt sein.
Wenn das Testprogramm funktioniert, dann kann man sicher sein, dass der
Microcontroller funktioniert.
Nun kann man die
ganze Software laden:
make load
Mit "ttydevinit /dev/ttyUSB0" initialisiert man unter Linux die
USB Serial Connection und mit "cat > /dev/ttyUSB0" kann man mit
der Schaltung reden.
ttydevinit /dev/ttyUSB0
cat > /dev/ttyUSB0
D=hello world
Das wird "hello world" auf das Display schreiben. Mehr Details dazu
finden sich im Mai 2002 Artikel. Der Code f�r den Mai 2002 Artikel
enth�lt auch ein Programm namens llp.pl, mit dem ein interaktiver
Dialog �ber das Display und die Tasten realisiert wird. Dieses
Programm kann man hier wieder verwenden.
... und hier ist das funktionst�chtige Display (die Taster waren
nicht angeschlossen als das Foto gemacht wurde. Der FT232BM
ist unter der Platine):
Alternativen
Obwohl die hier pr�sentierte Schaltung sehr einfach ist, ist sie
nichts f�r Anf�nger, da man viel Geschick f�r den SMD Chip braucht.
Man sollte sich deshalb �berlegen, ob man nicht ein fertiges Produkt
kauft. Der Nachteil ist, dass man normalerweise nicht diesen Funktionsumfang
mit Tasten und Watchdog bekommt. Normalerweise erh�lt man nur das
LCD Display. Die Preise f�r fertige L�sungen sind in Ordnung.
Alleine die Bauteile f�r diese Schaltung kosten etwa 30 EUR und
fertige Displays liegen in derselben Gr��enordnung.
Leider benutzen die meisten kommerziellen Produkte eigene
Vendor IDs, selbst wenn der gleiche FTDI Chip verwendet wird.
Das bedeutet, dass das Kernel Modul die Schaltung nicht erkennen
wird, da USB Treiber von diesen IDs abh�ngig sind. Man muss
den Kernel-code editieren und neu kompilieren. Zuk�nftige Kernel
funktionieren vielleicht schon, wenn jemand anderes die IDs im Code
eingetragen hat.
- http://www.matrixorbital.com/ Sie benutzen auch den
FTDI 232bm, aber mit eigenen Vendor IDs. Das Display nennt sich
LK202-24-USB.
- http://www.usblcd.de/ Diese L�sung hat ihr eigenes
Kernelmodul. Es ist jedoch Teil des Standard Linux Kernel. Es wird
ohne gro�e �nderung mit jedem 2.4.x Kernel funktionieren. Vermutlich
eine sehr gute L�sung.
- http://crystalfontz.com/ Ihre USB Displays (632 und 634) benutzen den
FT232AM mit eigenen Product IDs.
- http://www.cwlinux.com/eng/products/products_lcd.php
Ich habe diese Seite erst k�rzlich entdeckt. Sie scheinen LCD
Displays mit kleiner Tastatur zu haben. Die Displays sind jedoch doppelt so teuer wie die L�sung aus diesem Artikel.
Referenzen