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]

[Photo of the Author]

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]

[Illustration]

ArticleBody:[The article body]

Einf�hrung

lcd from tuxgraphics
shop.tuxgraphics.org verkauft sehr gute und günstige LCD Anzeigen.
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.

schematic
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.
board
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:
type B Receptacle

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. ft232SMD

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):
usb lcd

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.

Referenzen