Gratis Leseprobe zum

Transcription

Gratis Leseprobe zum
4089-5 U1+U4
21.02.2008
16:54 Uhr
Seite 1
FRANZIS
PC & ELEKTRONIK
Dipl.-Ing. Jürgen Hulzebosch
inderElektronik
Die Schnittstelle für praktische Anwendungen am PC einsetzen
USB hat sich in den letzten Jahren zu einer universellen Schnittstelle entwickelt. Keine Elektronik- und Computerbranche bleibt
von dieser Schnittstelle verschont.
Aus dem Inhalt:
Der in diesem Buch verwendete USB-Baustein ohne integrierten
Mikrocontroller wird Ihnen zeigen, wie interessante USBSteuerungen aufgebaut werden können.
• Frequenzen erzeugen und anwenden
Das Buch startet mit einfachen „LED an/LED aus“-Beispielen.
Experimente mit einer Alarmanlage, Wasserstandsüberwachung,
LDRs und Fotodioden vertiefen das gelernte Wissen. Anschließend
werden die im Buch enthaltenen Beispiele komplexer: Messungen
von Helligkeit oder Temperatur mit einem selbst gebauten
Analog-/Digital-Wandler vermitteln weitere Grundlagen.
• Messen, Steuern und Regeln
mit PC-Schnittstellen
• Temperatur mit einem NTC messen
• 8-Kanal-Logicanalyzer
• Steuerung von Schrittmotoren
• EEProm-Daten ändern
• und vieles mehr
Manch einer wird sich vielleicht wundern, wie einfach der selbst
gebaute A/D-Wandler mit ein paar Zeilen in der Anwendungssoftware
über USB behandelt werden kann. Ein Fernbedienungstester mit
Fotodiode, ein Voltmeter und Batterietester, ein Kennwortdatenspeicher mit einem EEProm, Schrittmotorsteuerungen und die
Verwendung als USB-Dongle sind weitere praktische Beispiele.
Da der verwendete Baustein auch als USB-Seriell-Konverter für
Mikrocontroller-Anwendungen dienen kann, werden auch diese
Anwendungsmöglichkeiten aufgeführt.
Die Umsetzung einer USB-I2C-Schnittstelle wird zum Kinderspiel,
da ein Software-Logikanalyzer das Daten- und Taktsignal im
tatsächlich erzeugten Timingdiagramm visualisiert. Sie können in
fünf einfachen Schritten eine universelle USB-I2C-Schnittstelle
entwickeln.
Die einzelnen Beispiele werden detailliert erläutert und sind
umfangreich illustriert, damit die Zusammenhänge von der VisualBasic-Software zur Hardware und mit dem verwendeten USBBaustein nachvollzogen und für eigene Ideen genutzt werden
können.
Der Autor verwendet den USB-Baustein in der Praxis als USBSeriell-Konverter für industrielle Steuerungen, für USB-Schrittmotorsteuerungen und als Programmieradapter für die neue AtmelAT89LP-8051-Familie.
PC & ELEKTRONIK
Dipl.-Ing. Jürgen Hulzebosch
USB inderElektronik
USB
FRANZIS
FRANZIS
PC+ELEKTRONIK
n,
ichtspiele
L
n
e
h
c
fa
Von ein
,
bindungen
I
RS232 An
u
I2C nd SP
u
z
is
b
O
8 Bit I/
USB
inderElektronik
Die USB-Schnittstelle für praktische Anwendungen am PC einsetzen
ISBN 978-3-7723-4089-5
Auf CD-ROM:
Beispielprogramme
• Datenblätter
• Manuals
•
Euro 29,95 [D]
Besuchen Sie uns im Internet: www.franzis.de
Hulzebosch
Vorwort
USB hat sich in den letzten Jahren zu einer universellen Schnittstelle entwickelt.
Neben der PC-Industrie bleibt kaum eine Elektronikbranche von USB verschont,
sei es das Autoradio mit Anschluss für USB-MP3-Player, der digitale Satellitenempfänger für Updates über USB zur Übermittlung von aufgezeichneten Videos oder
Bildern auf den PC oder auch jedes etwas modernere Handy mit MP3 und integrierter Kamera, das einen USB-Anschluss besitzt.
USB steht für Universal Serial Bus, Version 1.0 wurde 1995 von einem Konsortium
mehrerer großer Elektronik Unternehmen entwickelt.
Im Vergleich zur seriellen oder parallelen Schnittstelle eines PCs hat USB eine gute
Übertragungsgeschwindigkeit. USB-Geräte können während des Betriebes hinzugesteckt oder wieder entfernt werden.
Beschäftigt man sich im Detail mit USB, dann wirkt die Komplexität dieser Technik
zunächst ein wenig abschreckend. Konnte man früher noch mit der parallelen oder
seriellen Schnittstelle des PCs die eigene Elektronik einfach steuern und regeln,
muss man sich heute doch zwangsläufig mit USB auseinandersetzen, da PCs neuester Generation nur noch mit USB ausgestattet sind.
Umfangreiche Literatur findet man im Internet, bei Herstellern von Mikrocontrollern und bei den verschiedensten Verlagsgesellschaften. Meistens enthalten die dort
beschriebenen USB-Controller einen Mikroprozessor-Kern, wodurch dann das
scheinbar „einfache“ USB doch wieder kompliziert wird.
Hier soll nicht auf jedes Detail aller möglichen Funktionalitäten von USB eingegangen werden. Der hier verwendete FTDI-USB-Baustein besitzt keinen integrierten
Mikrocontroller. Das vorliegende Buch wird Ihnen zeigen, wie interessante USBSteuerungen oder USB-Datenerfassungssysteme zum Teil auch gänzlich ohne Mikrocontroller aufgebaut werden können.
Das ursprüngliche Motiv des Bausteinherstellers FTDI war es, Konverter von USB
zur seriellen und parallelen Schnittstelle zu entwickeln, um moderne PCs für diese
Schnittstellen über USB nachzurüsten zu können.
Das war auch der erste Ansatz des Autors, sich persönlich mit USB und FTDI-Bausteinen auseinanderzusetzen, da der neue PC keine serielle Schnittstelle mehr hatte und
Vorwort
ein Mikrocontroller über eine serielle Schnittstelle programmiert werden musste. Schnell
wurde festgestellt, dass zwar die einfache serielle Übertragung funktionierte, doch das
Schalten einzelner Signale der seriellen Schnittstelle war extrem langsam im Vergleich zur
normalen seriellen (RS232)-Schnittstelle eines alten PCs. Die Frage „Ist das angeblich so
schnelle USB doch langsam?“ interessierte den Autor, und aus dieser Fragestellung heraus ist letztendlich dieses Buch mit vielen praktischen Beispielen entstanden.
Im täglichen Leben gibt es viele Situationen, die sich lohnen, elektronisch mit Hilfe eines
Computers gemeistert zu werden. Das Buch startet mit einfachen „LED An – LED Aus“ –
und Ampel-Versuchen über USB. Das Beispiel einer Alarmanlage und wie man den Wasserstand in einem Aquarium überwachen kann, vertiefen das gelernte Wissen. Auch etwas
Spaß soll nicht zu kurz kommen. Haben Sie noch irgendwo ein Quarzuhrwerk, das nach
einem kleinen Umbau über USB zum Flaschendrehspiel mutieren kann?
Anschließend werden die vorgestellten Beispiele komplexer. Helligkeits- oder Temperaturmessungen mit einem selbstgebauten A/D-Wandler vermitteln weitere Grundlagen,
die sowohl für die Software und für USB als auch für die Hardware notwendig sind.
Manch einer wird sich danach vielleicht wundern, wie problemlos ein selbstgebauter
A/D-Wandler mit ein paar Zeilen in der Anwendungssoftware behandelt werden kann.
Ein kleiner Fernbedienungstester mit Fotodiode, ein Voltmeter, einKennwort-Datenspeicher und die Verwendung als USB-Dongle sind weitere Anwendungsbeispiele.
Da der USB-Adapter auch als USB-Seriell-Konverter für Mikrocontroller-Anwendungen
dienen kann, werden zusätzliche Softwarebeispiele für die Verwendung mit serieller
Kommunikation aufgeführt.
Der geübte Elektroniker wird lernen, wie man die Ein- und Ausgabeleitungen auch für
komplexe Schnittstellen wie I2C oder SPI verwenden kann. Die Umsetzung einer USBI2C-Schnittstelle wird zum Kinderspiel, da ein Software-Logikanalyzer das Daten- und
Taktsignal im tatsächlich erzeugten Timing-Diagramm visualisiert. Sie können somit in
fünf einfachen Schritten eine universelle I2C-Schnittstelle entwickeln.
Das letzte Softwarebeispiel in diesem Buch zeigt Ihnen die Ansätze, wie man komplexe
Aufgaben, beispielsweise eine Flash-Programmierung des AT89LP Mikrocontrollers über
die SPI/ISP-Schnittstelle, bewerkstelligen kann.
Diejenigen, die bereits Mikrocontrollerelektronik entwickelt, aufgebaut und programmiert haben, können den in diesem Buch beschriebenen Adapter auch direkt als USBSeriell-Konverter oder SPI/RS232-Programmieradapter einsetzen.
Die einzelnen Beispiele werden detailliert erläutert und sind umfangreich illustriert, damit die Zusammenhänge von der Visual Basic-Software zur Hardware und in Zusammenhang mit dem verwendeten USB-Baustein FT232R nachvollzogen und für eigene
Ideen verwendet werden können.
Wer nun experimentierfreudig ist und Lust hat, einige weitere Schaltungsbeispiele in die
Praxis umzusetzen, sollte einen Lötkolben besitzen.
Aktuelle Informationen finden Sie auf www.minimikro.de
Inhalt
1 Messen, Steuern oder Regeln mit PC-Schnittstellen. . . . . . . . . . . . . . . 11
1.1 Informationseinheiten: Daten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2 Binär zählen (logische 0 und 1). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3 „Russisches Bauernrechnen“. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.4 Bits und Bytes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
14
15
16
2 USB-Grundlagen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.1 USB 1.0, 1.1, 2.0, On-The-Go. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2 Strom-, Spannungs-, Geräteidentifikation der USB-Schnittstelle . . . . . .
2.3 Serielle Datenübertragungen USB-RS232-SPI-I2C . . . . . . . . . . . . . . . . . .
2.4 NRZI-Kodierung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.5 USB – unbekannter serieller Bus. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.6 USB-Transfertypen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.7 USB-Treiber . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.8 USB-Anbieteridentifizierung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
18
19
19
20
21
22
23
3 Hardware: USB-/Zusatzplatine und Bezugsquellen . . . . . . . . . . . . . . . . 24
3.1 Hardware: USB-Flash-Adapter und Beschreibung. . . . . . . . . . . . . . . . . . .
3.2 Hardware: Zusatzplatine. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.3 UM232R-Module von FTDI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.4 Der interne Aufbau des FT232R von FTDI. . . . . . . . . . . . . . . . . . . . . . . . . .
3.5 Funktionen des FT232R von FTDI. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
28
30
32
33
3.6 Beispiel für seriellen Anschluss eines Mikrocontrollers an USB . . . . . . . 34
3.7 RS232/485-Pegelanpassung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.8 Baudratengenerator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
4 Installation des FTDI-Treibers Version 2.X. . . . . . . . . . . . . . . . . . . . . . . . . 39
4.1 USB View Utility. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
4.2 FTDI-USB-Treiber entfernen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Inhalt
5 Kontaktaufnahme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
5.1 Das erste VB-Beispielprogramm aufrufen. . . . . . . . . . . . . . . . . . . . . . . . .
5.2 Die ersten Programmaufrufe in der FTD2XX.DLL-Bibliothek. . . . . . . . . . .
5.3 Das Programmbeispiel 1 in Visual Basic. . . . . . . . . . . . . . . . . . . . . . . . . .
5.4 FTD2XX-Funktionen für VB deklarieren . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.5 Quellcode mit FT_ListDevices und FT_OpenEx . . . . . . . . . . . . . . . . . . . . .
5.6 Die weiteren Funktionsaufrufe mit FT_ListDevices . . . . . . . . . . . . . . . . . .
5.7 Die Funktionsaufrufe FT_OpenEx und FT_Close. . . . . . . . . . . . . . . . . . . .
46
47
47
48
49
52
54
6 Lichtspiele (serielle Ausgänge DTS/RTS/TxD nutzen) . . . . . . . . . . . . . . 55
6.1 LED an – LED aus (Aufrufe FT_ClrDtr, FT_SetDtr). . . . . . . . . . . . . . . . . . . .
6.2 LED aus – LED an. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.3 LED an – LED aus (Aufrufe FT_ClrRts, FT_SetRts). . . . . . . . . . . . . . . . . . . .
6.4 LED-Blitz. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.5 LED PWM, die Helligkeit einer LED steuern. . . . . . . . . . . . . . . . . . . . . . . .
6.6 Eine 2-Farben-(Duo)-LED steuern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.7 Wechselblinker mit Duo-LED . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.8 TxD-Ausgang schalten (FT_SetBreakOn, FT_SetBreakOff) . . . . . . . . . . . .
6.9 Beispiel einer Ampelschaltung mit drei LEDs. . . . . . . . . . . . . . . . . . . . . .
6.10 Schaltungsbeispiel USB-Leselampe . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.11 Schaltungsbeispiel LED als Solarzelle. . . . . . . . . . . . . . . . . . . . . . . . . . .
56
59
59
59
62
64
67
68
69
71
71
7 Eingänge abfragen (Funktion FT_GetModemStatus) . . . . . . . . . . . . . . . . 73
7.1 Eine Alarmanlage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.2 Alarm-Impulszähler. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.3 Schaltungsbeispiel Alarmanlage. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.4 Ist die Katze da? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.5 Vorsicht Wasser. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.6 LDR – Ist es hell oder dunkel? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.7 Alarmanlage mit einer Lichtschranke erweitern . . . . . . . . . . . . . . . . . . . .
7.8 LDR-Widerstand genauer ermitteln . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
76
77
78
80
81
82
83
84
8 Ein Quarzuhrwerk steuern (Flaschendrehspiel). . . . . . . . . . . . . . . . . . . . 89
8.1 Die Spule anschließen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
8.2 Software für ein Flaschendrehspiel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
9 Bit Bang – USB gibt Gas (FT_SetBitMode, FT_Write, FT_Read). . . . . . . 92
9.1 Der synchrone Bit Bang Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
9.2 Eingangssignale D0 bis D7 mit Bit Bang abfragen (FT_GetBitMode). . . . 99
Inhalt
9.3 Der Quellcode für Bit Bang Mode. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
9.4 Bit Bang und die Emulation anderer Schnittstellen. . . . . . . . . . . . . . . 102
10 Ein einfacher A/D-Wandler mit Bit Bang. . . . . . . . . . . . . . . . . . . . . . . . 105
10.1 ­ A/D-Wandler-Konzept. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.2 Schaltbild A/D-Wandler mit einem Komparator. . . . . . . . . . . . . . . .
10.3 Der erste Softwaretest für A/D-Wandler. . . . . . . . . . . . . . . . . . . . . . .
10.4 Das Zusammenspiel zwischen Software und USB-Hardware. . . . . .
10.5 Der Quellcode zum A/D-Wandler. . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.6 Der vorgeschaltete Operationsverstärker. . . . . . . . . . . . . . . . . . . . . .
10.7 Voltmeter-Spannungen am analogen Eingang E2 messen. . . . . . . .
10.8 Batterietester. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
105
107
108
110
114
117
118
122
11 Temperatur mit einem NTC messen. . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
11.1 Softwarebeispiel Temperaturmessung. . . . . . . . . . . . . . . . . . . . . . . . 124
11.2 Quellcode Temperaturmessung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
12 Frequenzen erzeugen und Anwendungen . . . . . . . . . . . . . . . . . . . . . . 127
12.1 Frequenzgenerator mit seriellen Schnittstellen-Signalen. . . . . . . . . 127
12.2 Frequenzgenerator mit Bit Bang. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
12.3 D/A-Wandler mit PWM. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
13 Kennwort Datenspeicher – FTDI Bit Bang mit I2C-EEProm. . . . . . . . 133
13.1 Grundlagen des EEProm-Datenspeichers. . . . . . . . . . . . . . . . . . . . .
13.2 Grundlagen der I2C-Schnittstelle. . . . . . . . . . . . . . . . . . . . . . . . . . . .
13.3 Der Datenspeicher sucht Anschluss. . . . . . . . . . . . . . . . . . . . . . . . . .
13.4 Vorüberlegungen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13.5 In fünf Schritten zum Erfolg. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13.6 Daten-„Fishing“. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13.7 Bedienung der Kennwortspeicher-Software. . . . . . . . . . . . . . . . . . .
13.8 Kennwortspeicher-Software – Auszüge aus dem Quellcode . . . . . .
13.9 Softwarebeispiel I2C-Zweidrahtverbindung. . . . . . . . . . . . . . . . . . . .
133
133
135
135
137
144
147
148
150
14 IR-Fernbedienung testen, Fotodiode im Einsatz. . . . . . . . . . . . . . . . . 153
14.1 Infrarot-Datenübertragung im RC5-Code. . . . . . . . . . . . . . . . . . . . . .
14.2 Beispielsoftware IR-Fernbedienungstest. . . . . . . . . . . . . . . . . . . . . .
14.3 Quellcode IR-Fernbedienungstest . . . . . . . . . . . . . . . . . . . . . . . . . . .
14.4 Tochterblitz mit Fotodiode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14.5 Auswertungen in einem Timing-Diagramm . . . . . . . . . . . . . . . . . . . .
154
155
158
159
160
10
Inhalt
15 Analyzer für digitale Signale bis 60 kHz. . . . . . . . . . . . . . . . . . . . . . . . 161
16 8-Kanal-Logikanalyzer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
16.1 Digitale Schaltungen analysieren. . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
17 Steuerung von Schrittmotoren. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
17.1 Ein unipolarer Schrittmotor sucht Anschluss. . . . . . . . . . . . . . . . . . . 167
17.2 Schrittweise steppen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
17.3 Softwarebeispiel für einen Schrittmotor . . . . . . . . . . . . . . . . . . . . . . 170
18 Die Verwendung als USB-Dongle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
18.1 FTDI Get_DeviceChip ID in Visual C. . . . . . . . . . . . . . . . . . . . . . . . . . . 175
19 EEProm-Daten ändern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
20 Softwarebeispiel: serielles Schreiben und Lesen ohne VCP-Treiber . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
21 USB-Anbindung an das Franzis-Lernpaket Mikrocontroller. . . . . . . 186
22 Beispiel: Flash-Programmierung der Atmel-AT89LP-Mikrocontroller 190
22.1 ISP-Programmierung des Atmel AT89LPx052 über SPI. . . . . . . . . . . 192
22.2 Ein Visual-Basic-Beispiel – 2 K Flash lesen. . . . . . . . . . . . . . . . . . . . 193
23 CD zum Buch. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
24 Literaturhinweise. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
45
5 Kontaktaufnahme
Wenn die Treiberinstallation erfolgreich war, können Sie nun den ersten Test wagen.
Alle Beispielprogramme sind auch als ausführbare .EXE Dateien auf der beiliegenden CD-ROM enthalten. Es ist empfehlenswert, das Verzeichnis mit den Beispielprogrammen auf die Festplatte zu kopieren.
Vergessen Sie nicht, nach dem Kopieren ggf. den Schreibschutz der einzelnen Dateien zu entfernen.
Als Programmiersprachen für einfache Anwendungsprogramme, die mit dem USBAdapter kommunizieren, kommen z. B. Visual Basic oder auch Pascal in Frage. Für
eine C-Programmierung werden fundiertere Programmierkenntnisse benötigt. Oftmals steht aber, gerade bei Anfängern, kein professioneller C-Compiler zur Verfügung.
Die aufgeführten Beispielprogramme in Visual Basic (VB) lassen sich relativ einfach in
andere Programmiersprachen umsetzen.
Zur einfachen Steuerung des FTDI232R-Bausteins sind alle notwendigen Programmroutinen für eigene Anwendungsprogramme in der Programmbibliothek FTD2XX.
DLL enthalten. Der Ablauf einer Kommunikation sieht insgesamt wie folgt aus:
Anwendung
FTD2XX.DLL
FTD2XX.SYS
USB Driver Stack
Windows-USB-Treiber
USB-Gerät (FTDI 232RL)
Die WDM-Treiberdatei FTD2XX.SYS und die
Datei FTD2XX.DLL-Bibliothek wurden mit
den FTDI-Treibern installiert. Der WDMTreiber kommuniziert einerseits mit dem
Windows-Treiber-Stack, um auf das physikalische USB-Gerät zuzugreifen, andererseits
mit der FTDI-Bibliothek FTD2XX.DLL.
Hinweis für Profis: Klassische Win32API-Funktionen sollten nie mit den APIFunktionen der FTDI-Treiber gemischt
werden!
46
5 Kontaktaufnahme
5.1 Das erste VB-Beispielprogramm aufrufen
Haben Sie den USB-Adapter angeschlossen? Dann starten Sie das Programm
beispiel_1.exe im Verzeichnis Bsp_1 in den Beispielprogrammen.
Hinweis: Wenn Sie beim Programmstart Laufzeitfehler erhalten, müssen Sie zuerst
die Setuproutine im Verzeichnis Bsp_1 ausführen, damit die VB-Laufzeitumgebung
installiert wird.
Betätigen Sie den Testschalter. Sie sollten folgendes Ergebnis erhalten:
Softwarebeispiel 1
Die Ergebnisse des ersten Beispielprogramms werden in einem kleinen Fenster dargestellt.
Das Programm stellt zunächst fest, wie viele (FTDI)-USB-Geräte vorhanden sind.
Danach werden die Gerätebeschreibungen und Seriennummern der Geräte ermittelt.
Anschließend versucht das Programm, einen Kommunikationskanal für den USBAdapter zu öffnen (etwa um Nachrichten zu lesen oder zu senden). Zuletzt wird der
Kommunikationskanal wieder geschlossen.
Das Feld mit Gerätebeschreibung: FT232R USB UART kann verändert werden. Wenn
der USB-Adapter nicht als einzelnes (FTDI-)USB-Gerät angeschlossen ist – und
damit nicht als erstes USB-Gerät in der Liste erscheint –, wird im Programm die
Gerätebeschreibung FT232R USB UART für den Kommunikationstest verwendet.
Wenn Sie einen Treiber mit einer anderen Beschreibung als FT232R USB UART
verwenden, dann müssen Sie diese Angabe in den Beipielprogrammen im Feld Gerät: jeweils ändern.
5.3 Das Programmbeispiel 1 in Visual Basic
47
5.2 Die ersten Programmaufrufe in der FTD2XX.DLL-
Bibliothek
Wie zu Beginn des Kapitels beschrieben, werden für eine Kommunikation Funktionen
in der FTDI-Bibliothek FTD2XX.DLL verwendet.
FTDI hat alle Aufrufe in einem D2XX Programmers Guide zusammengefasst. Das entsprechende PDF-Dokument ist auf der CD enthalten.
Im ersten VB-Beispielprogramm werden folgende Funktionsaufrufe der Bibliothek
verwendet:
Funktionsaufruf
Kurze Beschreibung
FT_GetNumDevices
Gibt die Anzahl der USB-Geräte zurück
(ruft FT_ListDevices auf)
FT_ListDevices
Gibt die Anzahl der USB-Geräte, der Gerätebeschreibungen oder auch die Seriennummern der
angeschlossenen Geräte zurück
FT_OpenEx
Öffnet einen Kommunikationskanal zum angegebenen USB-Gerät
FT_Close
Schließt den Kommunikationskanal
5.3 Das Programmbeispiel 1 in Visual Basic
Alle VB-Programme sind auf der CD im Quellcode abgelegt. Wenn Sie VB installiert
haben, rufen Sie einfach die Visual Basic-Projektdatei mit der Endung VBP auf, und
das Projekt wird geöffnet: hier die Datei Bsp.VBP im Verzeichnis Bsp_1. Um das Quellprogramm des ersten Beispiels in VB zu sehen, brauchen Sie nur einen Doppelklick
auf den Testschalter im Formular Beispiel 1 zu machen, der Quellcode wird Ihnen in
einem separaten Fenster angezeigt.
Der Aufruf der VB-Projektdatei im Windows Explorer:
Aufruf der VB-Originaldatei
48
5 Kontaktaufnahme
Das geöffnete VB-Projektfenster:
VB-Originalfenster
Der Name des Schalters ist bt_test. Wenn der Benutzer den Schalter betätigt, wird die
Funktion bt_test_click() aufgerufen.
Sollte das Projektfenster oben rechts nicht geöffnet sein, können Sie das Fenster mit
dem Menübefehl Ansicht/ProjektExplorer oder der Tastenkombination <Strg>-<R>
aufrufen.
5.4 FTD2XX-Funktionen für VB deklarieren
Um Visual Basic mitzuteilen, dass Funktionen in einer externen Bibliothek aufgerufen
werden sollen, müssen diese deklariert werden. Die Deklarationen sind im Modul1 (im
Objektbereich Module im VB-Projektexplorer) enthalten. Hier sollen beispielhaft zwei
Deklarationen aufgeführt werden:
Public Declare Function FT_ListDevices Lib "FTD2XX.DLL" ( _
ByVal arg1 As Long, _
ByVal arg2 As String, _
ByVal dwFlags As Long) As Long
5.5 Quellcode mit FT_ListDevices und FT_OpenEx
49
Public Declare Function FT_GetNumDevices Lib "FTD2XX.DLL” Alias
"FT_ListDevices” ( _
ByRef arg1 As Long, _
ByVal arg2 As String, _
ByVal dwFlags As Long) As Long
Auch der Aufruf FT_GetNumDevices ruft die Funktion FT_ListDevices in der FTDIBibliothek FTD2XX.DLL auf.
Des Weiteren sind häufig benutzte Konstanten weiter unten im Modul deklariert, z. B.:
´ für FT_OpenEx
Public Const FT_OPEN_BY_SERIAL_NUMBER = 1
Public Const FT_OPEN_BY_DESCRIPTION = 2
Die Namen der Konstanten entsprechen meistens der Beschreibung im D2XX Programmers Guide von FTDI. Damit lassen sich Programme im Ablauf leserlich gestalten.
5.5 Quellcode mit FT_ListDevices und FT_OpenEx
Die folgende Routine wird aufgerufen, wenn der Schalter „Test“ zur Programmlaufzeit
im VB-Formular betätigt wird:
Private Sub bt_test_Click()
On Error GoTo bt_test_fehler
LoggerList.Clear
If FT_GetNumDevices(lngNumDevices,vbNullString,FT_LIST_BY_NUMBER
_ONLY)<>FT_OK Then LoggerList.AddItem ("Fehler bei Aufruf:
FT_GetNumDevices funktionierte nicht")
Exit sub
Else
LoggerList.AddItem ("Anzahl vorhandener USB-Geräte: " & lngNum
Devices)
End If
If FT_ListDevices(0,strBeschreibung,FT_LIST_BY_INDEX Or FT_OPEN_
BY_DESCRIPTION)_
<> FT_OK Then
LoggerList.AddItem ("Fehler bei Aufruf der Beschreibung: FT_ListDevices_ funktionierte nicht")
50
5 Kontaktaufnahme
Exit Sub
Else
LoggerList.AddItem ("Gerätebeschreibung: " & strBeschreibung)
End If
If FT_ListDevices(0,strSerienNummer,FT_LIST_BY_INDEX Or FT_OPEN_
BY_SERIAL_NUMBER)_<> FT_OK Then
LoggerList.AddItem ("Fehler bei Aufruf
FT_ListDevices_funktionierte nicht”)
der
Seriennummer:
Exit Sub
Else
LoggerList.AddItem ("Seriennummer: " & strSerienNummer)
End If
If Left$(strBeschreibung, 15) <> "FT232R USB UART" Then
' Namen mit 0 abschließen, sonst sind nur Leerzeichen in VB enthalten
strBeschreibung = Trim(Me.DeviceName.Text) & Chr(0)
LoggerList.AddItem "Alternative Gerätebeschreibung verwendet”
End If
If FT_OpenEx(strBeschreibung, FT_OPEN_BY_DESCRIPTION, lngHandle) <> FT_OK Then
LoggerList.AddItem "Fehler bei Aufruf: FT_OpenEx”
Exit Sub
Else
LoggerList.AddItem "Gerät wurde geöffnet: " & Trim(strBeschreibung)
End If
If FT_Close(lngHandle) <> FT_OK Then
LoggerList.AddItem "Fehler bei Aufruf: FT_Close”
Exit Sub
Else
LoggerList.AddItem "Gerät wurde geschlossen: " & Trim(strBeschreibung)
End If
LoggerList.AddItem "Test erfolgreich beendet”
bt_test_fehler_ende:
Exit Sub
bt_test_fehler:
MsgBox Err.Description
Resume bt_test_fehler_ende
End Sub
5.5 Quellcode mit FT_ListDevices und FT_OpenEx
51
Zu den einzelnen Programmschritten:
On Error GoTo bt_test_fehler
Verzweigt in eine Fehlerbehandlungsroutine
LoggerList.Clear
Löscht das verwendete Ausgabefenster „LoggerList“
If FT_GetNumDevices(lngNumDevices,vbNullString,FT_LIST_BY_NUM
BER_ONLY)<>FT_OK Then
oggerList.AddItem ("Fehler bei Aufruf: FT_GetNumDevices funktionierte nicht”)
Else
LoggerList.AddItem ("Anzahl vorhandener USB-Geräte: " & IngNumDevices)
End If
FT_GetNumDevices ruft die Funktion FT_ListDevices in der FTD2XX.DLL auf, um die
Anzahl der USB-Geräte zu ermitteln. Es müssen drei Werte angegeben werden. Die einzelnen Übergabewerte bei Funktionsaufruf heißen:
1. lngNumDevices
Nach erfolgreichem Funktionsaufruf enthält lngNumDevices die Anzahl der USBGeräte. lngNumDevices wurde im Kopf des Programms definiert.
2. vbnullstring
Der zweite Parameter wird bei weiteren Aufrufmöglichkeiten der Funktion FT_
ListDevices benötigt. Da der dritte Parameter die Anzahl der Geräte zu ermitteln
hat, muss der zweite Parameter auf 0 gesetzt werden.
3. FT_LIST_BY_NUMBER_ONLY
Der dritte Parameter gibt an, welche Werte von der Funktion ermittelt und
zurückgegeben werden sollen. FT_LIST_BY_NUMBER_ONLY ist im Modul 1 als
Konstante deklariert, den FTDI-Vorgaben im D2XX Programmers Guide entsprechend. FT_LIST_BY_NUMBER_ONLY besitzt den Wert &H80000000, der so in
dieser Form nicht besonders leserlich ist.
Die Funktion FT_GetNumDevices kann nach Aufruf – entsprechend der Deklaration:
Public Declare Function FT_GetNumDevices Lib „FTD2XX.DLL“ Alias „FT_ListDevices“
(….) As Long – einen Wert zurückgeben. Im Erfolgsfall wird eine 0 zurückgegeben. Die
Konstante FT_OK ist im Modul 1 als 0 deklariert.
Der Erfolgsfall wird im VB-Programm mit IF abgefragt. Wenn also die Funktion nach
Aufruf eine 0 zurückgibt (= FT_OK), wird im Ausgabefenster die Anzahl vorhandener
Geräte angezeigt und fortgefahren.
52
5 Kontaktaufnahme
Ist der Wert ungleich 0, war der Aufruf fehlerhaft, eine Fehlermeldung wird ausgegeben, und die Testroutine mit dem Befehl Exit Sub beendet.
5.6 Die weiteren Funktionsaufrufe mit FT_ListDevices
If FT_ListDevices(0,strBeschreibung,FT_LIST_BY_INDEX Or FT_OPEN_
BY_DESCRIPTION) <> FT_OK
……
If FT_ListDevices(0,strSerienNummer,FT_LIST_BY_INDEX Or FT_OPEN_
BY_SERIAL_NUMBER) <> FT_OK
……
Neben dem vorher beschriebenen Funktionsaufruf, der die Anzahl der USB-Geräte
meldet, kann man FT_ListDevices auch so einsetzen, dass man die Gerätebeschreibung oder Seriennummer des Gerätes erhält.
Mit
dem dritten Parameter FT_OPEN_BY_DESCRIPTION erhält man die GerätebeFT_ListDevices(0,strBeschreibung,FT_LIST_BY_INDEX Or_
schreibung, die sich nach Aufruf im String strBeschreibung befindet:
FT_OPEN_BY_DESCRIPTION)
Der Parameter FT_OPEN_BY_SERIAL_NUMBER nennt die Seriennummer, die sich
nach Aufruf im String strSeriennummer befindet:
FT_ListDevices(0,strSerienNummer,FT_LIST_BY_INDEX Or_
FT_OPEN_BY_SERIAL_NUMBER)
Die Zeichenketten strBeschreibung und strSeriennummer, jeweils mit einer Länge von
256 Zeichen, enthalten die Angaben aller gefundenen USB-Geräte.
Diese Programmierung ist in verschiedenen Punkten nicht ganz korrekt. Als erster
Übergabewert der Funktion (hier 0 als Geräte-ID) wird auch nur das erste USB-Gerät
angesprochen. Wenn mehrere FTDI-USB-Geräte angeschlossen wären, müsste man
zuerst deren Anzahl ermitteln und danach die einzelnen Beschreibungen durchlaufen.
FT_ListDevices(0,strBeschreibung0,FT_LIST_BY_INDEX Or_
FT_OPEN_BY_DESCRIPTION)
FT_ListDevices(1,strBeschreibung1,FT_LIST_BY_INDEX Or_
FT_OPEN_BY_DESCRIPTION)
5.6 Die weiteren Funktionsaufrufe mit FT_ListDevices
53
Die Programmierung ließe sich auch in einem einzelnen Funktionsaufruf zusammenfassen: Als ersten Parameter müsste man einen Zeiger (der wiederum auf einen Buffer
Array zeigt), im zweiten Parameter die ermittelte Anzahl der USB-Geräte angeben.
Diese Überlegung sollten Sie ggf. berücksichtigen, wenn Sie eigene Programme für
eine komplexe Umgebung mit mehreren USB-Geräten entwickeln.
Wenn das erste USB-Gerät nicht der USB-Adapter mit dem FTDI-FT232R-Baustein
ist, dann wird die Beschreibung einfach gesetzt, bevor das USB-Gerät für eine Kommunikation geöffnet wird:
If Left$(strBeschreibung, 15) <> "FT232R USB UART" Then
' Namen mit 0 abschließen, sonst sind nur Leerzeichen in VB enthalten
strBeschreibung = Trim(Me.DeviceName.Text) & Chr(0)
LoggerList.AddItem "Alternative Gerätebeschreibung verwendet"
End If
Die Beschreibung FT232R USB UART kommt aus dem (vom Benutzer im Text veränderbaren) Formularfeld DeviceName. Die Beschreibung muss mit dem Zeichen 0 enden. Diese 0 wird mit Chr(0) an die Zeichenkette der strBeschreibung angefügt.
Arbeitet man z. B. mit einem Vorgängertyp des FT232R von FTDI oder hat man sogar
im EEProm die Beschreibung geändert, muss man die Gerätebeschreibung während
der Ausführung bei Gerät: ändern, um dieses Testprogramm nutzen zu können.
73
7 Eingänge abfragen
(Funktion FT_GetModemStatus)
Die Signale DCD, DSR, RI und CTS sind digitale Eingänge, die sich in einem Programm durch Funktionsaufrufe in der FTD2XX.DLL abfragen lassen.
Die obigen Eingangssignale besitzen innerhalb des FT232R-Bausteins interne Widerstände von 200 kOhm zur USB-Versorgungsspannung. Ist der Eingang nicht angeschlossen, liegen über dem internen Widerstand 5 V am jeweiligen Eingang an.
Damit ergibt sich ein einfacher Einsatz für eine Alarmanlage. Üblicherweise wird bei
Alarmanlagen nicht das Schließen, sondern das Öffnen eines (geschlossenen) Stromkreises überwacht. Dies kann man mit dem FT232R-Baustein erreichen, indem man
eine einfache Drahtverbindung von einem der Eingänge nach Masse benutzt und damit
den entsprechenden Eingang auf 0 V legt. Wird die Drahtverbindung unterbrochen,
liegen erneut 5 V am Eingang an, und im Anwendungsprogramm lässt sich ein Alarm
auslösen.
Ein erster Versuch, das CTS-Eingangssignal abzufragen:
Entfernen Sie den USB-Adapter aus dem USB-Stecker Ihres Computers. Legen Sie die
CTS-Leitung mit einem Verbindungsdraht an Masse. Dieser Verbindungsdraht soll einen geschlossenen Schalter bzw. einen geschlossenen Stromkreis nach Masse darstellen.
74
7 Eingänge abfragen (Funktion FT_GetModemStatus)
Sie müssen von Pin 16 zu Pin 4
einen Verbindungsdraht nach
Masse (= GND) stecken.
Verbinden Sie den USB-Adapter mit angeschlossener Zusatzkarte mit dem PC. Starten
Sie das Programm beispiel_7.exe im Verzeichnis Bsp_7 in den Beispielprogrammen.
Wenn Sie auf Signale abfragen klicken, sollte nur das CTS-Kontrollkästchen Alarmleitung 1) aktiviert werden. Die anderen Kontrollkästchen bleiben deaktiviert, da sie mit
5 V verbunden sind. Wenn Sie die Drahtbrücke jetzt entfernen und erneut auf Signale
abfragen klicken, dann wird auch CTS wieder deaktiviert – was der Auslösung eines
Alarms gleichkäme.
Softwarebeispiel 7
Sie können mit den drei anderen Eingangssignalen DSR, DCD und RI weitere Versuche durchführen. Seien Sie aber vorsichtig, damit Sie keinen Kurzschluss von Pin 20
(oder Pin 10) der USB-Versorgungsspannung nach Masse erzeugen!
7 Eingänge abfragen (Funktion FT_GetModemStatus) 75
Der Quellcode zum siebten Beispielprogramm:
Für das siebte Beispiel ist der Quellcode in der Datei Bsp.VBP im Verzeichnis Bsp_7
einsehbar. Die folgenden Routinen werden aufgerufen, wenn der Schalter Signale abfragen zur Programmlaufzeit im VB-Formular betätigt wird.
Private Sub bt_Eingang_abfragen_Click()
.
.
IF FT_GetModemStatus(lngHandle, ModemStatus) <> FT_OK Then
LoggerList.AddItem "Fehler bei Aufruf: FT_GetModemStatus"
Else
Me.Cb_cts.Value = (ModemStatus And &H10) / &H10
Me.cb_dsr.Value = (ModemStatus And &H20) / &H20
Me.cb_ri.Value = (ModemStatus And &H40) / &H40
Me.Cb_dcd.Value = (ModemStatus And &H80) / &H80
End If
.
.
End Sub
Der Funktionsaufruf FT_GetModemStatus zeigt den Zustand der jeweiligen Signalleitungen im zurückgegebenen Wert ModemStatus in einzelnen Bits an. Diese müssen
abgefragt und einzeln weiter verarbeitet werden:
DCD RI
DSR CTS
D7
D6
D5
0
0
0
D4
1
X
X
X
X
D0
0
0
0
0
=
=
=
Modemstatus, die letzten 8 Bits
Datenbits
Maske: &H10 (= HEX10)
Als Beispiel sehen wir uns die Verarbeitung von CTS genauer an. CTS wird im Datenbit D4 geführt. Mit (ModemStatus And & H10) wird das Datenbit D4 im ModemStatus
mit dem Datenbit D4 in der Maske &H10 logisch mit UND (AND) verknüpft. Bei einer UND-Verknüpfung müssen beide Bits einen Wert von 1 besitzen, damit das Ergebnis eine 1 bzw. ungleich 0 ist. Ist CTS 0, bleibt das Ergebnis 0, das Kontrollkästchen
Cb_cts ist deaktiviert.
CTS = 0:
0
=
CTS = 0
0
0
0
1
0
0
0
0
=
Maske HEX10
0
0
0
0
0
0
0
0
=
Ergebnis = 0
76
7 Eingänge abfragen (Funktion FT_GetModemStatus)
CTS = 1:
1
=
CTS = 1
0
0
0
1
0
0
0
0
=
Maske HEX10
0
0
0
1
0
0
0
0
=
Ergebnis = Hex 10, bzw. dezimal 16
Nur wenn CTS den Wert 1 hat, erhält man ein Ergebnis von 1. Das Ergebnis aus (ModemStatus And & H10) wäre in diesem Fall die Zahl 16 (= Hex10). Damit das Ergebnis
beim Kontrollkästchen Cb_cts auch gleich als Wert 1 verwendet werden kann, muss
noch durch die Maske &H10 geteilt werden.
Die weiteren Signale DCD, RI und DSR werden entsprechend der Position des Bits im
ModemStatus mit &H80, &H40 und &H20 maskiert.
7.1 Eine Alarmanlage
Wenn Sie auf Alarmanlage klicken, werden die Eingangssignale periodisch abgefragt.
Sind die Signalleitungen CTS, DCD, RI oder DSR mit Masse verbunden, ist der jeweilige Stromkreis geschlossen und das entsprechende Kontrollkästchen aktiviert. Bei
einem unterbrochenen Stromkreis wird die Bezeichnung des jeweiligen Kontrollkästchens in roter Farbe angezeigt, das Kontrollkästchen ist deaktiviert.
Private Sub Timer1_Timer()
.
.
If FT_GetModemStatus(lngHandle, ModemStatus) <> FT_OK Then
LoggerList.AddItem "Fehler bei Aufruf: FT_GetModemStatus"
Else
Me.Cb_cts.Value = (ModemStatus And &H10) / &H10
Me.Cb_cts.ForeColor = 0
' wenn Alarm, dann in Rot ändern
If Me.Cb_cts.Value = False Then Cb_cts.ForeColor = 255
Me.cb_dsr.Value = (ModemStatus And &H20) / &H20
Me.cb_dsr.ForeColor = 0
If Me.cb_dsr.Value = False Then cb_dsr.ForeColor = 255
Me.cb_ri.Value = (ModemStatus And &H40) / &H40
Me.cb_ri.ForeColor = 0
If Me.cb_ri.Value = False Then cb_ri.ForeColor = 255
Me.Cb_dcd.Value = (ModemStatus And &H80) / &H80
Me.Cb_dcd.ForeColor = 0
If Me.Cb_dcd.Value = False Then Cb_dcd.ForeColor = 255
End If
.
.
End Sub
7.2 Alarm-Impulszähler
77
Die Signalleitungen werden mit dem Timer1, der mit dem Schalter Alarmanlage gestartet wird, in Abständen von 500 ms abgefragt. Ein Auszug aus dem Quellcode in
Beispiel 7:
Alle 500 ms wird in die Timer1-Routine verzweigt. Damit der Alarmzustand farblich
dargestellt werden kann, wird der jeweilige Zustand der Signalleitungen ausgewertet
und die Farbe ggf. von 0 auf 255 (= Rot) geändert.
Der Timer1 wird gestartet bzw. gestoppt, wenn der Schalter Alarmanlage betätigt wird.
Private Sub bt_alarm_Click()
.
If TimerIstAn Then
Me.bt_alarm.Caption = "Alarmanlage"
Me.Timer1.Interval = 0
TimerIstAn = False
LoggerList.AddItem ("Alarmanlage ausgeschaltet")
Me.lb_anzeige.Visible = False
Me.lb_impulse.Visible = False
Else
Me.bt_alarm.Caption = «Alarm aus»
Me.Timer1.Interval = 500
TimerIstAn = True
LoggerList.Clear
LoggerList.AddItem («Alarmanlage scharf geschaltet»)
Me.lb_anzeige.Visible = True
Me.lb_impulse.Visible = True
End If
.
End Sub
Beim ersten Start der Routine wird das Merkmal TimerIstAn auf den Wert „True“,
das Timerintervall auf 500 ms gesetzt. Zugleich werden die weiteren Informationen
(lb_anzeige und lb_impulse) für den Anwender eingeblendet. Der Schalter wird in
Alarm aus umbenannt.
Ein erneutes Betätigen des Schalters stoppt den Timer und löscht das Merkmal
TimerIstAn.
7.2 Alarm-Impulszähler
Bei jedem Alarm auf der CTS-Leitung erhöht sich ein Alarmzähler um den Wert 1.
Dazu wird der vorherige Zustand der Signalleitung in bcts_vorher gespeichert und mit
dem aktuellen Zustand der CTS-Signalleitung (des Kontrollkästchens Cb_cts) verglichen. Dieser Vergleich ist erforderlich, wenn nur das Auslösen eines Alarms gezählt
und, wie in diesem Fall, mit einer Uhrzeit dokumentiert werden soll. Der dazu passende Auszug aus dem Quellcode in Beispiel 7 lautet:
78
7 Eingänge abfragen (Funktion FT_GetModemStatus)
Private Sub Timer1_Timer()
.
.
.
Me.Cb_cts.Value = (ModemStatus And &H10) / &H10
Me.Cb_cts.ForeColor = 0
' wenn Alarm, dann in Rot ändern
If Me.Cb_cts.Value = False Then Cb_cts.ForeColor = 255
'Alarmzähler, nur wenn vorher Zustand anders war
If bcts_vorher = True And Me.Cb_cts.Value = False Then
Me.tb_impulse.Text = Str(Val(Me.tb_impulse.Text) + 1)
Me.LoggerList.AddItem "Alarm um " & Time()
End If
bcts_vorher = Me.Cb_cts.Value
Me.cb_dsr.Value = (ModemStatus And &H20) / &H20
Me.cb_dsr.ForeColor = 0
If Me.cb_dsr.Value = False Then cb_dsr.ForeColor = 255
.
.
End Sub
Jedes Mal, wenn Sie die Drahtbrücke für die CTS-Signalleitung entfernen, wird die
Zustandsänderung bemerkt und die Uhrzeit dokumentiert. Wenn Sie die Drahtbrücke
zum CTS-Signal wieder schließen, geschieht hingegen nichts.
7.3 Schaltungsbeispiel Alarmanlage
In der Praxis werden in Alarmleitungen häufig sogenannte Reed-Kontakte eingesetzt.
Befinden sich Reed-Kontakte in einem Magnetfeld, ist der Reed-Kontakt-Schalter geschlossen. Wird das Magnetfeld entfernt, öffnet sich der Reed-Kontakt. Bei Fenstern und
Türen ist es sinnvoll, den Dauermagneten am beweglichen Element zu montieren.
Reed-Kontakt
mit
Anschlüssen
Magnet
Türblatt
Türrahmen
7.3 Schaltungsbeispiel Alarmanlage
79
Der Reed-Kontakt muss natürlich in unmittelbarer Nähe zum Dauermagneten angebracht
sein, damit der Stromkreis bei einem geschlossenen Fenster ebenfalls geschlossen ist.
Dauermagnete und Reed-Kontakte sind im Handel erhältlich:
Ein Dauermagnet für Montage
Reed-Schalter für Montage
Reed-Kontakt im Glasgehäuse
[Quelle: www.reichelt.de]
Tipp: Bei vielen Discountern werden für Fenster und Türen sehr preiswerte MiniAlarmanlagen angeboten, die sich oftmals für diese Zwecke schnell umbauen lassen.
So könnte das Schaltbild Ihrer selbst gebauten Alarmanlage für Ihren Computerraum
aussehen:
– 4Reed-Kontakte für Tür, Fenster, Schublade, CD-Schrank oder einen Schlüsselschalter, der die Alarmanlage aktiviert
– 2Relais (für 5 V, < 20 mA) z. B. für eine Verbindung zum Alarm der Telefonzentrale mit stillem Alarm und der Falltür vor Ihrem CD-Schrank oder einer
Alarmhupe
– und eine helle LED, damit der Einbrecher nicht im Dunkeln bleibt.
80
7 Eingänge abfragen (Funktion FT_GetModemStatus)
So könnte Ihre selbst gebaute Alarmanlage für Ihren Computerraum bei Verwendung
der Zusatzkarte aussehen:
Alarmanlage mit Zusatzkarte
Schon mit den ersten Beispielen in diesem Buch können Sie sich umfangreiche Softwarelösungen für die Auswertung und Reaktionen im Alarmfall selbst zusammenstellen. Natürlich können Sie für den Alarmfall auch einfach nur ein Hintergrundprotokoll mit den Alarmzeiten laufen lassen.
7.4 Ist die Katze da?
Was halten Sie von einer elektronischen Überprüfung Ihrer Katzenklappe in der Haustür, um die Gewohnheiten Ihrer Katze zu ermitteln?
Sie brauchen hierzu je einen Reed-Kontakt innerhalb wie außerhalb der Katzenklappe.
Die Kontakte sind zunächst offen und werden erst dann geschlossen, wenn sich die
Klappe bewegt. Wenn Sie ein wenig experimentierfreudig sind, können Sie die notwendigen Änderungen im vorliegenden Softwarebeispiel selbst anpassen. Sie können
auch Softwarebeispiel 12 (periodisches Lesen der Eingänge im Bit Bang Mode) für Ihre
Versuche verwenden.
Hinweis: Es gibt im Handel auch elektronische Katzenklappen, die Ihre Katze an einem
Chip im Halsband erkennen und die Klappe erst bei der richtigen Kennung freigeben.
Vorsicht! Wenn Sie bei den Relais an der Ausgangsseite mit Spannungen > 24 V
arbeiten, kann dies im Fehlerfall Lebens- und Feuergefahr bedeuten!
7.5 Vorsicht Wasser
81
7.5 Vorsicht Wasser
Für die digitale Verarbeitung als 0 oder 1 muss ein Signal nicht zwangsläufig auch genau
0 V oder 5 V am Signaleingang haben. Es gibt Schwellen, die am Signaleingang überbzw. unterschritten werden können. Bei einer Versorgungsspannung von 5 V liegen die
Schaltschwellen beim FT232R-Baustein zwischen 1,3 und 1,9 V, typisch bei 1,6 V. Liegt
die Eingangsspannung innerhalb dieses Schwellenbereichs, kann dies als 0 oder als 1
interpretiert werden. Bei einer Spannung unterhalb von 1,3 V wird garantiert der Zustand LOW, bei einer Spannung über 1,9 V garantiert der Zustand HIGH erkannt.
Bei den digitalen Ausgängen besitzt ein High-Pegel beim FT232R-Baustein typischerweise eine Spannung von 4,1 V (3,2 –4,9 V, bei 6 mA des Verbrauchers). Ein Low-Pegel
liegt in etwa bei 0,4 V (0,3 –0,6 V).
Wird an einem Eingang, wie im Beispiel der Alarmanlage, ein Schalter nach Masse
geschlossen, liegt die Spannung sicherlich unter 0,3 V. Da die Eingänge im FT232RBaustein intern einen Widerstand von 200 kOhm zur Versorgungsspannung besitzen,
kann man den Widerstand, der mindestens unterschritten werden muss, damit am
Eingang ein Low-Pegel erkannt wird, ungefähr ermitteln:
Vcc
5V
Ri
200K
Ve 1,3 Vt
(z.B. an CTS)
Rx
?
I = U/R
I = URx / Rx = URi / Ri
Rx= URx / URI · Ri = 1,3/3,7 · 200K
Rx < = 70,2K
Der Widerstand an einem Eingang muss, unter Vernachlässigung weiterer Faktoren, unterhalb von 70 kOhm liegen,
damit vom FT232R-Baustein ein Low-Zustand erkannt
wird.
In der Praxis zeigt sich, dass ein Widerstand von ca. 65 kOhm
den Low-Zustand herstellt.
Zum Testen eignet sich Alarmbeispiel 7.
82
7 Eingänge abfragen (Funktion FT_GetModemStatus)
Schließen Sie einfach jeweils einen Draht, den Sie an den Enden
isoliert haben, an Pin 16 und Pin
11 (= Masse) an.
Verbinden Sie den USB-Adapter
mit angeschlossener Zusatzkarte
mit dem PC.
Starten Sie die Alarmanlage im Programmbeispiel_7.exe. Wenn Sie die Drahtenden
kurzschließen, werden Sie sehen, dass im Programm das CTS-Signal aktiviert wird.
Wenn Sie die beiden isolierten Drahtenden in einem Abstand von wenigen Millimetern zwischen Daumen und Zeigefinger halten, wird das CTS-Signal ebenfalls aktiviert. Der Widerstand ist dann kleiner als ca. 70 kOhm. Befeuchten Sie ggf. die Finger,
wenn es nicht funktionieren sollte.
Für medizinische Messverfahren bedeutet ein Hautwiderstandswert von 600 kOhm
bis 1 MOhm eine ausgeglichene Energieversorgung, ein sehr niedriger Wert lässt auf
Übersäuerung oder auch Stress schließen, aber keine Angst, in diesem Fall liegt es nur
an der Feuchtigkeit.
Bekanntlich leitet auch Wasser: Wenn Sie die beiden isolierten Drahtenden in ein gefülltes Wasserglas tauchen, wird das CTS-Signal ebenfalls aktiviert. Jetzt wissen Sie, wie
Sie den Wasserstand in Ihrem Aquarium, in Ihrem Swimmingpool oder am Fuß der
Waschmaschine in Ihrem Hauswirtschaftsraum mit Ihrem USB-Computer überwachen können!
7.6 LDR – Ist es hell oder dunkel?
Ein LDR (Light Dependent Resistor) ist ein lichtempfindlicher Fotowiderstand. LDRs
werden in Dämmerungsschaltern oder als Sensoren in Lichtschranken verwendet. Je
mehr Licht auf einen LDR fällt, desto kleiner wird der Widerstand und desto größer
der elektrische Strom. Bei Dunkelheit besitzt ein LDR einen hohen Widerstand von
einigen MOhm; bei Helligkeit einen elektrischen Widerstand von wenigen kOhm.
7.7 Alarmanlage mit einer Lichtschranke erweitern
83
Die Änderung des Widerstands
können Sie wie im vorherigen
Beispiel testen.
Schließen Sie den LDR an Pin 16
und Pin 11 des Stecksockels an.
Verbinden Sie den USB-Adapter
mit angeschlossener Zusatzkarte
mit dem PC.
Starten Sie die Alarmanlage im
Programmbeispiel_7.exe.
Wie Sie sehen, wird im Programm das CTS-Signal bei genügender Helligkeit sofort
aktiviert, der LDR-Widerstand liegt also unter 70 kOhm. Wenn Sie den LDR genügend
abdunkeln, wird das CTS-Signal irgendwann deaktiviert, da der Widerstandswert mit
zunehmender Dunkelheit größer wird.
Wenn Sie die Lichtempfindlichkeit verringern möchten, können Sie den Lichteinfall
durch unterschiedlich große Bohrungen in einer Pappe o. ä. vor dem LDR ändern.
In Verbindung mit der USB-Leselampe lassen sich die LEDs mit dem LDR auch automatisch einschalten.
7.7 Alarmanlage mit einer Lichtschranke erweitern
Jeden Reed-Kontakt der Alarmanlage in Kapitel 7.1 können Sie auch mit einem LDR
oder einer Fotodiode austauschen. Das Fotoelement lässt sich mit einer LED oder auch
mit einem preiswerten Laserpointer anstrahlen. Solange der Lichtstrahl nicht unterbrochen wird, hat das Fotoelement einen geringen Widerstand. Wird der Lichtstrahl
unterbrochen (oder fällt der Laserpointer aus), erhalten Sie ein Alarmsignal.
LDR
Laser
Laserstrahl ->
Umlenkspiegel
Lichtschranke mit Laserstrahl und Umlenkspiegel
203
Sachverzeichnis
A
Control-Transfer 21
FT_ClrDtr 56
FT_ClrRts 59
FT_EE_UARead 173
FT_EE_UASize 173
FT_EE_UAWrite 173
FT_GetBitMode 99, 103
FT_GetModemStatus 75
FT_GetNumDevices 47
FT_ListDevices 47
FT_OpenEx 47,54
FT_Read 92, 103
FT_SetBaudRate 37,96,103
FT_SetBitMode 92,96,103
FT_SetBreakOff 68
FT_SetBreakOn 68
FT_SetDivisor 38
FT_SetDtr 56
FT_SetRts 59
FT_Write 92,103
FTID_GetDeviceChipID 174
D
G
Daten 14
Datentransferrate 19
Dongle 173
Duo-LED 64
I
A/D-Wandler 105
Alarmanlage 76
Analyzer 161
Anbieteridentifizierung 23
B
Batterietester 122
Baudratengenerator 37
binär 14
bipolarer Schrittmotor 167
Bit 16
Bit Bang 92
Bit Stuffer 19
Broadcasting 13
Bulk-Transfer 22
Bus powered 18
Byte 16
C
Geräteidentifikation 18
EEProm 34,133
EHCI 20
I2C 133
Infrarot 153
Interrupt-Transfer 21
Isochroner Transfer 22
ISP-Programmierung 192
F
K
E
Fernbedienung 153
Flaschendrehspiel 91
Flash-Programmierung 190
Fotodioden 153
Fotoelement 109
Frequenzgenerator 127
FT_Close 47, 54
Kaskadierung 13
Kennwortspeicher 147
L
LDR 82
Least Significant Bit 16
Logikanalyzer 163
LSB 16
204
Sachverzeichnis
M
Megabyte 16
Most Significant Bit 16
MPROG-Software 178
MSB 16
N
NRZI-Kodierung 19
NTC 123
O
OHCI 20
Operationsverstärker 117
OPV 117
P
parallelen Schnittstelle 11
Parallelverfahren 105
PID 23
Produkt-ID 23
Pulse Width Modulation 62
PWM 62,129
R
RC5-Code 154
RS232 35
RS485 37
S
Schaltschwellen 81
Schrittmotor 166
SCL 133
SDA 133
self powered 18
Serial Interface Engine 33
serielle Ausgänge 55
serielle Datenübertragung 11
serielle Schnittstelle 11
SIR-Übertragungsverfahren 155
Solartrackerschaltung 71
Speicherkapazität 147
SPI-Schnittstelle 192
Stromverbrauch 18
T
Tastrate 131
Tastverhältnis 131
Temperaturmessung 123
Transfertypen 21
Triggern 161
U
UHCI 20
unipolarer Schrittmotor 167
USB-DPLL 33
USB-Flash-Adapter 25
USB-Hub 13
USB-Treiber 22
USB Protocol Engine 33
USB Transceiver 33
V
VCP 22
Vendor-ID 23
VID 23
Visual Basic 47
W
Wägeverfahren 105
WDM 22
Word 16
Z
Zählverfahren 105
Zeitkonstante τ 84
Zusatzplatine 28
4089-5 U1+U4
21.02.2008
16:54 Uhr
Seite 1
FRANZIS
PC & ELEKTRONIK
Dipl.-Ing. Jürgen Hulzebosch
inderElektronik
Die Schnittstelle für praktische Anwendungen am PC einsetzen
USB hat sich in den letzten Jahren zu einer universellen Schnittstelle entwickelt. Keine Elektronik- und Computerbranche bleibt
von dieser Schnittstelle verschont.
Aus dem Inhalt:
Der in diesem Buch verwendete USB-Baustein ohne integrierten
Mikrocontroller wird Ihnen zeigen, wie interessante USBSteuerungen aufgebaut werden können.
• Frequenzen erzeugen und anwenden
Das Buch startet mit einfachen „LED an/LED aus“-Beispielen.
Experimente mit einer Alarmanlage, Wasserstandsüberwachung,
LDRs und Fotodioden vertiefen das gelernte Wissen. Anschließend
werden die im Buch enthaltenen Beispiele komplexer: Messungen
von Helligkeit oder Temperatur mit einem selbst gebauten
Analog-/Digital-Wandler vermitteln weitere Grundlagen.
• Messen, Steuern und Regeln
mit PC-Schnittstellen
• Temperatur mit einem NTC messen
• 8-Kanal-Logicanalyzer
• Steuerung von Schrittmotoren
• EEProm-Daten ändern
• und vieles mehr
Manch einer wird sich vielleicht wundern, wie einfach der selbst
gebaute A/D-Wandler mit ein paar Zeilen in der Anwendungssoftware
über USB behandelt werden kann. Ein Fernbedienungstester mit
Fotodiode, ein Voltmeter und Batterietester, ein Kennwortdatenspeicher mit einem EEProm, Schrittmotorsteuerungen und die
Verwendung als USB-Dongle sind weitere praktische Beispiele.
Da der verwendete Baustein auch als USB-Seriell-Konverter für
Mikrocontroller-Anwendungen dienen kann, werden auch diese
Anwendungsmöglichkeiten aufgeführt.
Die Umsetzung einer USB-I2C-Schnittstelle wird zum Kinderspiel,
da ein Software-Logikanalyzer das Daten- und Taktsignal im
tatsächlich erzeugten Timingdiagramm visualisiert. Sie können in
fünf einfachen Schritten eine universelle USB-I2C-Schnittstelle
entwickeln.
Die einzelnen Beispiele werden detailliert erläutert und sind
umfangreich illustriert, damit die Zusammenhänge von der VisualBasic-Software zur Hardware und mit dem verwendeten USBBaustein nachvollzogen und für eigene Ideen genutzt werden
können.
Der Autor verwendet den USB-Baustein in der Praxis als USBSeriell-Konverter für industrielle Steuerungen, für USB-Schrittmotorsteuerungen und als Programmieradapter für die neue AtmelAT89LP-8051-Familie.
PC & ELEKTRONIK
Dipl.-Ing. Jürgen Hulzebosch
USB inderElektronik
USB
FRANZIS
FRANZIS
PC+ELEKTRONIK
n,
ichtspiele
L
n
e
h
c
fa
Von ein
,
bindungen
I
RS232 An
u
I2C nd SP
u
z
is
b
O
8 Bit I/
USB
inderElektronik
Die USB-Schnittstelle für praktische Anwendungen am PC einsetzen
ISBN 978-3-7723-4089-5
Auf CD-ROM:
Beispielprogramme
• Datenblätter
• Manuals
•
Euro 29,95 [D]
Besuchen Sie uns im Internet: www.franzis.de
Hulzebosch