Transcript
Page 1: USB in der Elektronik - ciando.com · Vorwort USB hat sich in den letzten Jahren zu einer universellen Schnittstelle entwickelt. Neben der PC-Industrie bleibt kaum eine Elektronikbranche

FRANZISPC & ELEKTRONIKFRANZIS

P C + E L E K T R O N I K

Hulzebosch

Dipl.-Ing. Jürgen Hulzebosch

ISBN 978-3-7723-4089-5

Euro 29,95 [D]

Besuchen Sie uns im Internet: www.franzis.de

Aus dem Inhalt:• Messen, Steuern und Regeln

mit PC-Schnittstellen

• Frequenzen erzeugen und anwenden

• Temperatur mit einem NTC messen

• 8-Kanal-Logicanalyzer

• Steuerung von Schrittmotoren

• EEProm-Daten ändern

• und vieles mehr

FRANZISPC & ELEKTRONIK

USB hat sich in den letzten Jahren zu einer universellen Schnitt-stelle entwickelt. Keine Elektronik- und Computerbranche bleibtvon dieser Schnittstelle verschont.

Der in diesem Buch verwendete USB-Baustein ohne integriertenMikrocontroller wird Ihnen zeigen, wie interessante USB-Steuerungen aufgebaut werden können.

Das Buch startet mit einfachen „LED an/LED aus“-Beispielen. Experimente mit einer Alarmanlage, Wasserstandsüberwachung,LDRs und Fotodioden vertiefen das gelernte Wissen. Anschließendwerden die im Buch enthaltenen Beispiele komplexer: Messungenvon Helligkeit oder Temperatur mit einem selbst gebauten Analog-/Digital-Wandler vermitteln weitere Grundlagen.

Manch einer wird sich vielleicht wundern, wie einfach der selbstgebaute A/D-Wandler mit ein paar Zeilen in der Anwendungssoftwareüber USB behandelt werden kann. Ein Fernbedienungstester mitFotodiode, ein Voltmeter und Batterietester, ein Kennwortdaten-speicher mit einem EEProm, Schrittmotorsteuerungen und dieVerwendung als USB-Dongle sind weitere praktische Beispiele.

Da der verwendete Baustein auch als USB-Seriell-Konverter fürMikrocontroller-Anwendungen dienen kann, werden auch dieseAnwendungsmöglichkeiten aufgeführt.

Die Umsetzung einer USB-I2C-Schnittstelle wird zum Kinderspiel,da ein Software-Logikanalyzer das Daten- und Taktsignal imtatsächlich erzeugten Timingdiagramm visualisiert. Sie können infünf einfachen Schritten eine universelle USB-I2C-Schnittstelleentwickeln.

Die einzelnen Beispiele werden detailliert erläutert und sindumfangreich illustriert, damit die Zusammenhänge von der Visual-Basic-Software zur Hardware und mit dem verwendeten USB-Baustein nachvollzogen und für eigene Ideen genutzt werdenkönnen.

Der Autor verwendet den USB-Baustein in der Praxis als USB-Seriell-Konverter für industrielle Steuerungen, für USB-Schrittmotor-steuerungen und als Programmieradapter für die neue Atmel-AT89LP-8051-Familie.

USBinderElektronikDie USB-Schnittstelle für praktische Anwendungen am PC einsetzen

USBinderElektronikDie Schnittstelle für praktische Anwendungen am PC einsetzen

Dipl.-Ing. Jürgen Hulzebosch

Auf CD-ROM:• Beispielprogramme• Datenblätter• Manuals

Von einfachen Lichtspielen,

RS232 Anbindungen,

8 Bit I/O bis zu I2C und SPI

USB

inde

rEle

ktro

nik

4089-5 U1+U4 21.02.2008 16:54 Uhr Seite 1

Page 2: USB in der Elektronik - ciando.com · Vorwort USB hat sich in den letzten Jahren zu einer universellen Schnittstelle entwickelt. Neben der PC-Industrie bleibt kaum eine Elektronikbranche

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 Satellitenemp-fä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 inte-grierter 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 hinzu-gesteckt 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 neues-ter Generation nur noch mit USB ausgestattet sind.

Umfangreiche Literatur findet man im Internet, bei Herstellern von Mikrocontrol-lern 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 eingegan-gen werden. Der hier verwendete FTDI-USB-Baustein besitzt keinen integrierten Mikrocontroller. Das vorliegende Buch wird Ihnen zeigen, wie interessante USB-Steuerungen oder USB-Datenerfassungssysteme zum Teil auch gänzlich ohne Mi-krocontroller 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-Bau-steinen auseinanderzusetzen, da der neue PC keine serielle Schnittstelle mehr hatte und

Page 3: USB in der Elektronik - ciando.com · Vorwort USB hat sich in den letzten Jahren zu einer universellen Schnittstelle entwickelt. Neben der PC-Industrie bleibt kaum eine Elektronikbranche

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 her-aus 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 Was-serstand 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 Tempera-turmessungen 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-Datenspei-cher 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 USB-I2C-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 program-miert haben, können den in diesem Buch beschriebenen Adapter auch direkt als USB-Seriell-Konverter oder SPI/RS232-Programmieradapter einsetzen.

Die einzelnen Beispiele werden detailliert erläutert und sind umfangreich illustriert, da-mit die Zusammenhänge von der Visual Basic-Software zur Hardware und in Zusam-menhang 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

�Vorwort

Page 4: USB in der Elektronik - ciando.com · Vorwort USB hat sich in den letzten Jahren zu einer universellen Schnittstelle entwickelt. Neben der PC-Industrie bleibt kaum eine Elektronikbranche

Inhalt

1 Messen,SteuernoderRegelnmitPC-Schnittstellen. . . . . . . . . . . . . . . 111.1 Informationseinheiten: Daten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141.2 Binär zählen (logische 0 und 1) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141.3 „Russisches Bauernrechnen“ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151.4 Bits und Bytes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

2 USB-Grundlagen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172.1 USB 1.0, 1.1, 2.0, On-The-Go . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172.2 Strom-, Spannungs-, Geräteidentifikation der USB-Schnittstelle . . . . . 182.3 Serielle Datenübertragungen USB-RS232-SPI-I2C . . . . . . . . . . . . . . . . . 192.4 NRZI-Kodierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192.5 USB – unbekannter serieller Bus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202.6 USB-Transfertypen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212.7 USB-Treiber . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222.8 USB-Anbieteridentifizierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

3 Hardware:USB-/ZusatzplatineundBezugsquellen . . . . . . . . . . . . . . . 243.1 Hardware: USB-Flash-Adapter und Beschreibung . . . . . . . . . . . . . . . . . . 253.2 Hardware: Zusatzplatine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283.3 UM232R-Module von FTDI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303.4 Der interne Aufbau des FT232R von FTDI . . . . . . . . . . . . . . . . . . . . . . . . . 323.5 Funktionen des FT232R von FTDI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

3.6 Beispiel für seriellen Anschluss eines Mikrocontrollers an USB . . . . . . 343.7 RS232/485-Pegelanpassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353.8 Baudratengenerator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

4 InstallationdesFTDI-TreibersVersion2.X . . . . . . . . . . . . . . . . . . . . . . . . 394.1 USB View Utility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424.2 FTDI-USB-Treiber entfernen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

Page 5: USB in der Elektronik - ciando.com · Vorwort USB hat sich in den letzten Jahren zu einer universellen Schnittstelle entwickelt. Neben der PC-Industrie bleibt kaum eine Elektronikbranche

� Kontaktaufnahme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455.1 Das erste VB-Beispielprogramm aufrufen . . . . . . . . . . . . . . . . . . . . . . . . 465.2 Die ersten Programmaufrufe in der FTD2XX.DLL-Bibliothek . . . . . . . . . . 475.3 Das Programmbeispiel 1 in Visual Basic . . . . . . . . . . . . . . . . . . . . . . . . . 475.4 FTD2XX-Funktionen für VB deklarieren . . . . . . . . . . . . . . . . . . . . . . . . . . 485.5 Quellcode mit FT_ListDevices und FT_OpenEx . . . . . . . . . . . . . . . . . . . . 495.6 Die weiteren Funktionsaufrufe mit FT_ListDevices . . . . . . . . . . . . . . . . . 525.7 Die Funktionsaufrufe FT_OpenEx und FT_Close. . . . . . . . . . . . . . . . . . . . 54

� Lichtspiele(serielleAusgängeDTS/RTS/TxDnutzen) . . . . . . . . . . . . . 556.1 LED an – LED aus (Aufrufe FT_ClrDtr, FT_SetDtr) . . . . . . . . . . . . . . . . . . . 566.2 LED aus – LED an . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596.3 LED an – LED aus (Aufrufe FT_ClrRts, FT_SetRts) . . . . . . . . . . . . . . . . . . . 596.4 LED-Blitz. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596.5 LED PWM, die Helligkeit einer LED steuern . . . . . . . . . . . . . . . . . . . . . . . 626.6 Eine 2-Farben-(Duo)-LED steuern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 646.7 Wechselblinker mit Duo-LED . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 676.8 TxD-Ausgang schalten (FT_SetBreakOn, FT_SetBreakOff) . . . . . . . . . . . 686.9 Beispiel einer Ampelschaltung mit drei LEDs . . . . . . . . . . . . . . . . . . . . . 696.10 Schaltungsbeispiel USB-Leselampe . . . . . . . . . . . . . . . . . . . . . . . . . . . 716.11 Schaltungsbeispiel LED als Solarzelle . . . . . . . . . . . . . . . . . . . . . . . . . . 71

� Eingängeabfragen(FunktionFT_GetModemStatus) . . . . . . . . . . . . . . . .737.1 Eine Alarmanlage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 767.2 Alarm-Impulszähler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 777.3 Schaltungsbeispiel Alarmanlage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 787.4 Ist die Katze da? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 807.5 Vorsicht Wasser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 817.6 LDR – Ist es hell oder dunkel? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 827.7 Alarmanlage mit einer Lichtschranke erweitern . . . . . . . . . . . . . . . . . . . 837.8 LDR-Widerstand genauer ermitteln . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84

� EinQuarzuhrwerksteuern(Flaschendrehspiel) . . . . . . . . . . . . . . . . . . . 898.1 Die Spule anschließen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 898.2 Software für ein Flaschendrehspiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

9 BitBang–USBgibtGas(FT_SetBitMode,FT_Write,FT_Read) . . . . . . 929.1 Der synchrone Bit Bang Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 939.2 Eingangssignale D0 bis D7 mit Bit Bang abfragen (FT_GetBitMode) . . . 99

Inhalt

Page 6: USB in der Elektronik - ciando.com · Vorwort USB hat sich in den letzten Jahren zu einer universellen Schnittstelle entwickelt. Neben der PC-Industrie bleibt kaum eine Elektronikbranche

9

9.3 Der Quellcode für Bit Bang Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1009.4 Bit Bang und die Emulation anderer Schnittstellen . . . . . . . . . . . . . . 102

10 EineinfacherA/D-WandlermitBitBang . . . . . . . . . . . . . . . . . . . . . . . 10510.1 A/D-Wandler-Konzept . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10510.2 Schaltbild A/D-Wandler mit einem Komparator. . . . . . . . . . . . . . . . 10710.3 Der erste Softwaretest für A/D-Wandler . . . . . . . . . . . . . . . . . . . . . . 10810.4 Das Zusammenspiel zwischen Software und USB-Hardware . . . . . 11010.5 Der Quellcode zum A/D-Wandler . . . . . . . . . . . . . . . . . . . . . . . . . . . 11410.6 Der vorgeschaltete Operationsverstärker . . . . . . . . . . . . . . . . . . . . . 11710.7 Voltmeter-Spannungen am analogen Eingang E2 messen . . . . . . . 11810.8 Batterietester . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122

11 TemperaturmiteinemNTCmessen . . . . . . . . . . . . . . . . . . . . . . . . . . . 12311.1 Softwarebeispiel Temperaturmessung . . . . . . . . . . . . . . . . . . . . . . . 12411.2 Quellcode Temperaturmessung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125

12 FrequenzenerzeugenundAnwendungen . . . . . . . . . . . . . . . . . . . . . 12712.1 Frequenzgenerator mit seriellen Schnittstellen-Signalen . . . . . . . . 12712.2 Frequenzgenerator mit Bit Bang . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12712.3 D/A-Wandler mit PWM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129

13 KennwortDatenspeicher–FTDIBitBangmitI2C-EEProm . . . . . . . 13313.1 Grundlagen des EEProm-Datenspeichers. . . . . . . . . . . . . . . . . . . . . 13313.2 Grundlagen der I2C-Schnittstelle . . . . . . . . . . . . . . . . . . . . . . . . . . . 13313.3 Der Datenspeicher sucht Anschluss . . . . . . . . . . . . . . . . . . . . . . . . . 13513.4 Vorüberlegungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13513.5 In fünf Schritten zum Erfolg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13713.6 Daten-„Fishing“ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14413.7 Bedienung der Kennwortspeicher-Software. . . . . . . . . . . . . . . . . . . 14713.8 Kennwortspeicher-Software – Auszüge aus dem Quellcode . . . . . 14813.9 Softwarebeispiel I2C-Zweidrahtverbindung . . . . . . . . . . . . . . . . . . . 150

14 IR-Fernbedienungtesten,FotodiodeimEinsatz . . . . . . . . . . . . . . . . 15314.1 Infrarot-Datenübertragung im RC5-Code . . . . . . . . . . . . . . . . . . . . . 15414.2 Beispielsoftware IR-Fernbedienungstest . . . . . . . . . . . . . . . . . . . . . 15514.3 Quellcode IR-Fernbedienungstest . . . . . . . . . . . . . . . . . . . . . . . . . . 15814.4 Tochterblitz mit Fotodiode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15914.5 Auswertungen in einem Timing-Diagramm . . . . . . . . . . . . . . . . . . . 160

��Inhalt

Page 7: USB in der Elektronik - ciando.com · Vorwort USB hat sich in den letzten Jahren zu einer universellen Schnittstelle entwickelt. Neben der PC-Industrie bleibt kaum eine Elektronikbranche

10

1� AnalyzerfürdigitaleSignalebis�0kHz . . . . . . . . . . . . . . . . . . . . . . . 161

1� �-Kanal-Logikanalyzer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16316.1 Digitale Schaltungen analysieren . . . . . . . . . . . . . . . . . . . . . . . . . . . 165

1� SteuerungvonSchrittmotoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16617.1 Ein unipolarer Schrittmotor sucht Anschluss . . . . . . . . . . . . . . . . . . 16717.2 Schrittweise steppen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16817.3 Softwarebeispiel für einen Schrittmotor . . . . . . . . . . . . . . . . . . . . . 170

1� DieVerwendungalsUSB-Dongle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17318.1 FTDI Get_DeviceChip ID in Visual C . . . . . . . . . . . . . . . . . . . . . . . . . . 175

19 EEProm-Datenändern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178

20 Softwarebeispiel:seriellesSchreibenundLesenohneVCP-Treiber . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182

21 USB-AnbindungandasFranzis-LernpaketMikrocontroller . . . . . . 186

22 Beispiel:Flash-ProgrammierungderAtmel-AT�9LP-Mikrocontroller 19022.1 ISP-Programmierung des Atmel AT89LPx052 über SPI . . . . . . . . . . 19222.2 Ein Visual-Basic-Beispiel – 2 K Flash lesen . . . . . . . . . . . . . . . . . . . 193

23 CDzumBuch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199

24 Literaturhinweise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202

Inhalt

Page 8: USB in der Elektronik - ciando.com · Vorwort USB hat sich in den letzten Jahren zu einer universellen Schnittstelle entwickelt. Neben der PC-Industrie bleibt kaum eine Elektronikbranche

4�

� 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 beiliegen-den CD-ROM enthalten. Es ist empfehlenswert, das Verzeichnis mit den Beispiel-programmen auf die Festplatte zu kopieren.

Vergessen Sie nicht, nach dem Kopieren ggf. den Schreibschutz der einzelnen Datei-en zu entfernen.

Als Programmiersprachen für einfache Anwendungsprogramme, die mit dem USB-Adapter kommunizieren, kommen z. B. Visual Basic oder auch Pascal in Frage. Für eine C-Programmierung werden fundiertere Programmierkenntnisse benötigt. Oft-mals 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 Programm-routinen für eigene Anwendungsprogramme in der Programmbibliothek FTD2XX.

DLL enthalten. Der Ablauf einer Kommuni-kation sieht insgesamt wie folgt aus:

Die WDM-Treiberdatei FTD2XX.SYS und die Datei FTD2XX.DLL-Bibliothek wurden mit den FTDI-Treibern installiert. Der WDM-Treiber kommuniziert einerseits mit dem Windows-Treiber-Stack, um auf das physika-lische USB-Gerät zuzugreifen, andererseits mit der FTDI-Bibliothek FTD2XX.DLL.

Hinweis für Profis: Klassische Win32-API-Funktionen sollten nie mit den API-Funktionen der FTDI-Treiber gemischt werden!

Anwendung

FTD2XX.DLL

FTD2XX.SYS

USB Driver Stack Windows-USB-Treiber

USB-Gerät (FTDI 232RL)

Page 9: USB in der Elektronik - ciando.com · Vorwort USB hat sich in den letzten Jahren zu einer universellen Schnittstelle entwickelt. Neben der PC-Industrie bleibt kaum eine Elektronikbranche

4� 5� Kontaktaufnahme

�.1 DasersteVB-Beispielprogrammaufrufen

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:

Die Ergebnisse des ersten Beispielprogramms werden in einem kleinen Fenster darge-stellt.

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 USB-Adapter 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.

Softwarebeispiel 1

Wenn Sie einen Treiber mit einer anderen Beschreibung als FT232R USB UART verwenden, dann müssen Sie diese Angabe in den Beipielprogrammen im Feld Ge-rät: jeweils ändern.

Page 10: USB in der Elektronik - ciando.com · Vorwort USB hat sich in den letzten Jahren zu einer universellen Schnittstelle entwickelt. Neben der PC-Industrie bleibt kaum eine Elektronikbranche

4�5.3� Das�Programmbeispiel�1�in�Visual�Basic

�.2 DieerstenProgrammaufrufeinderFTD2XX.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 ent-sprechende 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ätebe-schreibungen oder auch die Seriennummern der angeschlossenen Geräte zurück

FT_OpenEx Öffnet einen Kommunikationskanal zum angege-benen USB-Gerät

FT_Close Schließt den Kommunikationskanal

�.3 DasProgrammbeispiel1inVisualBasic

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 Quell-programm 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

Page 11: USB in der Elektronik - ciando.com · Vorwort USB hat sich in den letzten Jahren zu einer universellen Schnittstelle entwickelt. Neben der PC-Industrie bleibt kaum eine Elektronikbranche

4� 5� Kontaktaufnahme

Das geöffnete VB-Projektfenster:

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.

�.4 FTD2XX-FunktionenfürVBdeklarieren

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

VB-Originalfenster

Page 12: USB in der Elektronik - ciando.com · Vorwort USB hat sich in den letzten Jahren zu einer universellen Schnittstelle entwickelt. Neben der PC-Industrie bleibt kaum eine Elektronikbranche

495.5� Quellcode�mit�FT_ListDevices�und�FT_OpenEx

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 FTDI-Bibliothek 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 Program-mers Guide von FTDI. Damit lassen sich Programme im Ablauf leserlich gestalten.

�.� QuellcodemitFT_ListDevicesundFT_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")

Page 13: USB in der Elektronik - ciando.com · Vorwort USB hat sich in den letzten Jahren zu einer universellen Schnittstelle entwickelt. Neben der PC-Industrie bleibt kaum eine Elektronikbranche

�0 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 der Seriennummer: FT_ListDevices_funktionierte nicht”)

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

Page 14: USB in der Elektronik - ciando.com · Vorwort USB hat sich in den letzten Jahren zu einer universellen Schnittstelle entwickelt. Neben der PC-Industrie bleibt kaum eine Elektronikbranche

�15.5� Quellcode�mit�FT_ListDevices�und�FT_OpenEx

Zu den einzelnen Programmschritten:

Verzweigt in eine Fehlerbehandlungsroutine

Löscht das verwendete Ausgabefenster „LoggerList“

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 ein-zelnen Übergabewerte bei Funktionsaufruf heißen:

1. lngNumDevices Nach erfolgreichem Funktionsaufruf enthält lngNumDevices die Anzahl der USB-

Gerä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 entspre-chend. 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.

On Error GoTo bt_test_fehler

LoggerList.Clear

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

Page 15: USB in der Elektronik - ciando.com · Vorwort USB hat sich in den letzten Jahren zu einer universellen Schnittstelle entwickelt. Neben der PC-Industrie bleibt kaum eine Elektronikbranche

�2 5� Kontaktaufnahme

Ist der Wert ungleich 0, war der Aufruf fehlerhaft, eine Fehlermeldung wird ausgege-ben, und die Testroutine mit dem Befehl Exit Sub beendet.

�.� DieweiterenFunktionsaufrufemitFT_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ätebeschrei-bung oder Seriennummer des Gerätes erhält.

Mit dem dritten Parameter FT_OPEN_BY_DESCRIPTION erhält man die Gerätebe-schreibung, die sich nach Aufruf im String strBeschreibung befindet:FT_ListDevices(0,strBeschreibung,FT_LIST_BY_INDEX Or_

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)

Page 16: USB in der Elektronik - ciando.com · Vorwort USB hat sich in den letzten Jahren zu einer universellen Schnittstelle entwickelt. Neben der PC-Industrie bleibt kaum eine Elektronikbranche

�35.6� Die�weiteren�Funktionsaufrufe�mit�FT_ListDevices

Die Programmierung ließe sich auch in einem einzelnen Funktionsaufruf zusammen-fassen: 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 Kom-munikation 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än-derbaren) Formularfeld DeviceName. Die Beschreibung muss mit dem Zeichen 0 en-den. 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.

Page 17: USB in der Elektronik - ciando.com · Vorwort USB hat sich in den letzten Jahren zu einer universellen Schnittstelle entwickelt. Neben der PC-Industrie bleibt kaum eine Elektronikbranche

�3

� Eingängeabfragen(FunktionFT_GetModemStatus)

Die Signale DCD, DSR, RI und CTS sind digitale Eingänge, die sich in einem Pro-gramm durch Funktionsaufrufe in der FTD2XX.DLL abfragen lassen.

Die obigen Eingangssignale besitzen innerhalb des FT232R-Bausteins interne Wider-stände von 200 kOhm zur USB-Versorgungsspannung. Ist der Eingang nicht ange-schlossen, 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) Strom-kreises ü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 ei-nen geschlossenen Schalter bzw. einen geschlossenen Stromkreis nach Masse darstel-len.

Page 18: USB in der Elektronik - ciando.com · Vorwort USB hat sich in den letzten Jahren zu einer universellen Schnittstelle entwickelt. Neben der PC-Industrie bleibt kaum eine Elektronikbranche

�4 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 Alarmlei-tung 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.

Sie können mit den drei anderen Eingangssignalen DSR, DCD und RI weitere Ver-suche durchführen. Seien Sie aber vorsichtig, damit Sie keinen Kurzschluss von Pin 20 (oder Pin 10) der USB-Versorgungsspannung nach Masse erzeugen!

Softwarebeispiel 7

Page 19: USB in der Elektronik - ciando.com · Vorwort USB hat sich in den letzten Jahren zu einer universellen Schnittstelle entwickelt. Neben der PC-Industrie bleibt kaum eine Elektronikbranche

���

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 ab-fragen 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) / &H80End If..End Sub

Der Funktionsaufruf FT_GetModemStatus zeigt den Zustand der jeweiligen Signallei-tungen im zurückgegebenen Wert ModemStatus in einzelnen Bits an. Diese müssen abgefragt und einzeln weiter verarbeitet werden:

DCD RI DSR CTS X X X X = Modemstatus, die letzten 8 Bits

D7 D6 D5 D4 D0 = Datenbits

0 0 0 1 0 0 0 0 = Maske: &H10 (= HEX10)

Als Beispiel sehen wir uns die Verarbeitung von CTS genauer an. CTS wird im Daten-bit 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 ei-ner UND-Verknüpfung müssen beide Bits einen Wert von 1 besitzen, damit das Ergeb-nis 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

7� Eingänge�abfragen�(Funktion�FT_GetModemStatus)

Page 20: USB in der Elektronik - ciando.com · Vorwort USB hat sich in den letzten Jahren zu einer universellen Schnittstelle entwickelt. Neben der PC-Industrie bleibt kaum eine Elektronikbranche

�� 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 (Mo-demStatus 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.

�.1 EineAlarmanlage

Wenn Sie auf Alarmanlage klicken, werden die Eingangssignale periodisch abgefragt. Sind die Signalleitungen CTS, DCD, RI oder DSR mit Masse verbunden, ist der jewei-lige Stromkreis geschlossen und das entsprechende Kontrollkästchen aktiviert. Bei einem unterbrochenen Stromkreis wird die Bezeichnung des jeweiligen Kontrollkäst-chens 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 = 255End If..End Sub

Page 21: USB in der Elektronik - ciando.com · Vorwort USB hat sich in den letzten Jahren zu einer universellen Schnittstelle entwickelt. Neben der PC-Industrie bleibt kaum eine Elektronikbranche

��7.2� Alarm-Impulszähler

Die Signalleitungen werden mit dem Timer1, der mit dem Schalter Alarmanlage ge-startet 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 = TrueEnd 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.

�.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) vergli-chen. 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 passen-de Auszug aus dem Quellcode in Beispiel 7 lautet:

Page 22: USB in der Elektronik - ciando.com · Vorwort USB hat sich in den letzten Jahren zu einer universellen Schnittstelle entwickelt. Neben der PC-Industrie bleibt kaum eine Elektronikbranche

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

�.3 SchaltungsbeispielAlarmanlage

In der Praxis werden in Alarmleitungen häufig sogenannte Reed-Kontakte eingesetzt. Befinden sich Reed-Kontakte in einem Magnetfeld, ist der Reed-Kontakt-Schalter ge-schlossen. Wird das Magnetfeld entfernt, öffnet sich der Reed-Kontakt. Bei Fenstern und Türen ist es sinnvoll, den Dauermagneten am beweglichen Element zu montieren.

Türrahmen

Türblatt

Magnet

Reed-KontaktmitAnschlüssen

Page 23: USB in der Elektronik - ciando.com · Vorwort USB hat sich in den letzten Jahren zu einer universellen Schnittstelle entwickelt. Neben der PC-Industrie bleibt kaum eine Elektronikbranche

�97.3� Schaltungsbeispiel�Alarmanlage

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]

So könnte das Schaltbild Ihrer selbst gebauten Alarmanlage für Ihren Computerraum aussehen:

– 4 Reed-Kontakte für Tür, Fenster, Schublade, CD-Schrank oder einen Schlüssel-schalter, der die Alarmanlage aktiviert

– 2 Relais (für 5 V, < 20 mA) z. B. für eine Verbindung zum Alarm der Telefonzent-rale 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.

Tipp: Bei vielen Discountern werden für Fenster und Türen sehr preiswerte Mini-Alarmanlagen angeboten, die sich oftmals für diese Zwecke schnell umbauen lassen.

Page 24: USB in der Elektronik - ciando.com · Vorwort USB hat sich in den letzten Jahren zu einer universellen Schnittstelle entwickelt. Neben der PC-Industrie bleibt kaum eine Elektronikbranche

�0 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 Soft-warelösungen für die Auswertung und Reaktionen im Alarmfall selbst zusammenstel-len. Natürlich können Sie für den Alarmfall auch einfach nur ein Hintergrundproto-koll mit den Alarmzeiten laufen lassen.

�.4 IstdieKatzeda?

Was halten Sie von einer elektronischen Überprüfung Ihrer Katzenklappe in der Haus-tü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 not-wendigen Ä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!

Page 25: USB in der Elektronik - ciando.com · Vorwort USB hat sich in den letzten Jahren zu einer universellen Schnittstelle entwickelt. Neben der PC-Industrie bleibt kaum eine Elektronikbranche

�17.5� Vorsicht�Wasser

�.� VorsichtWasser

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 über- bzw. 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 Zu-stand 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 typischer-weise 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 FT232R-Baustein 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:

I = U/RI = U

Rx / Rx = U

Ri / Ri

Rx= URx

/ URI

· Ri = 1,3/3,7 · 200KRx < = 70,2KDer Widerstand an einem Eingang muss, unter Vernachläs-sigung 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.

Vcc5 V

Ri200K

Ve 1,3 Vt (z.B. an CTS)

Rx?

Page 26: USB in der Elektronik - ciando.com · Vorwort USB hat sich in den letzten Jahren zu einer universellen Schnittstelle entwickelt. Neben der PC-Industrie bleibt kaum eine Elektronikbranche

�2 7� Eingänge�abfragen�(Funktion�FT_GetModemStatus)

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 Millime-tern zwischen Daumen und Zeigefinger halten, wird das CTS-Signal ebenfalls akti-viert. 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 ge-fü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 überwa-chen können!

�.� LDR–Isteshelloderdunkel?

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.

Schließen Sie einfach jeweils ei-nen 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.

Page 27: USB in der Elektronik - ciando.com · Vorwort USB hat sich in den letzten Jahren zu einer universellen Schnittstelle entwickelt. Neben der PC-Industrie bleibt kaum eine Elektronikbranche

�37.7� Alarmanlage�mit�einer�Lichtschranke�erweitern

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 auto-matisch einschalten.

�.� AlarmanlagemiteinerLichtschrankeerweitern

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 unter-brochen wird, hat das Fotoelement einen geringen Widerstand. Wird der Lichtstrahl unterbrochen (oder fällt der Laserpointer aus), erhalten Sie ein Alarmsignal.

Lichtschranke mit Laserstrahl und Umlenkspiegel

Umlenkspiegel

Laserstrahl ->

Laser

LDR

Page 28: USB in der Elektronik - ciando.com · Vorwort USB hat sich in den letzten Jahren zu einer universellen Schnittstelle entwickelt. Neben der PC-Industrie bleibt kaum eine Elektronikbranche

203

AA/D-Wandler 105Alarmanlage 76Analyzer 161Anbieteridentifizierung 23

BBatterietester 122Baudratengenerator 37binär 14bipolarer Schrittmotor 167Bit 16Bit Bang 92Bit Stuffer 19Broadcasting 13Bulk-Transfer 22Bus powered 18Byte 16

CControl-Transfer 21

DDaten 14Datentransferrate 19Dongle 173Duo-LED 64

EEEProm 34,133EHCI 20

FFernbedienung 153Flaschendrehspiel 91Flash-Programmierung 190Fotodioden 153Fotoelement 109Frequenzgenerator 127FT_Close 47, 54

FT_ClrDtr 56FT_ClrRts 59FT_EE_UARead 173FT_EE_UASize 173FT_EE_UAWrite 173FT_GetBitMode 99, 103FT_GetModemStatus 75FT_GetNumDevices 47FT_ListDevices 47FT_OpenEx 47,54FT_Read 92, 103FT_SetBaudRate 37,96,103FT_SetBitMode 92,96,103FT_SetBreakOff 68FT_SetBreakOn 68FT_SetDivisor 38FT_SetDtr 56FT_SetRts 59FT_Write 92,103FTID_GetDeviceChipID 174

GGeräteidentifikation 18

II2C 133Infrarot 153Interrupt-Transfer 21Isochroner Transfer 22ISP-Programmierung 192

KKaskadierung 13Kennwortspeicher 147

LLDR 82Least Significant Bit 16Logikanalyzer 163LSB 16

Sachverzeichnis

Page 29: USB in der Elektronik - ciando.com · Vorwort USB hat sich in den letzten Jahren zu einer universellen Schnittstelle entwickelt. Neben der PC-Industrie bleibt kaum eine Elektronikbranche

204

MMegabyte 16Most Significant Bit 16MPROG-Software 178MSB 16

NNRZI-Kodierung 19NTC 123

OOHCI 20Operationsverstärker 117OPV 117

Pparallelen Schnittstelle 11Parallelverfahren 105PID 23Produkt-ID 23Pulse Width Modulation 62PWM 62,129

RRC5-Code 154RS232 35RS485 37

SSchaltschwellen 81Schrittmotor 166SCL 133SDA 133self powered 18Serial Interface Engine 33serielle Ausgänge 55serielle Datenübertragung 11serielle Schnittstelle 11SIR-Übertragungsverfahren 155Solartrackerschaltung 71Speicherkapazität 147SPI-Schnittstelle 192Stromverbrauch 18

TTastrate 131Tastverhältnis 131Temperaturmessung 123

Transfertypen 21Triggern 161

UUHCI 20unipolarer Schrittmotor 167USB-DPLL 33USB-Flash-Adapter 25USB-Hub 13USB-Treiber 22USB Protocol Engine 33USB Transceiver 33

VVCP 22Vendor-ID 23VID 23Visual Basic 47

WWägeverfahren 105WDM 22Word 16

ZZählverfahren 105Zeitkonstante τ 84Zusatzplatine 28

Sachverzeichnis

Page 30: USB in der Elektronik - ciando.com · Vorwort USB hat sich in den letzten Jahren zu einer universellen Schnittstelle entwickelt. Neben der PC-Industrie bleibt kaum eine Elektronikbranche

FRANZISPC & ELEKTRONIKFRANZIS

P C + E L E K T R O N I K

Hulzebosch

Dipl.-Ing. Jürgen Hulzebosch

ISBN 978-3-7723-4089-5

Euro 29,95 [D]

Besuchen Sie uns im Internet: www.franzis.de

Aus dem Inhalt:• Messen, Steuern und Regeln

mit PC-Schnittstellen

• Frequenzen erzeugen und anwenden

• Temperatur mit einem NTC messen

• 8-Kanal-Logicanalyzer

• Steuerung von Schrittmotoren

• EEProm-Daten ändern

• und vieles mehr

FRANZISPC & ELEKTRONIK

USB hat sich in den letzten Jahren zu einer universellen Schnitt-stelle entwickelt. Keine Elektronik- und Computerbranche bleibtvon dieser Schnittstelle verschont.

Der in diesem Buch verwendete USB-Baustein ohne integriertenMikrocontroller wird Ihnen zeigen, wie interessante USB-Steuerungen aufgebaut werden können.

Das Buch startet mit einfachen „LED an/LED aus“-Beispielen. Experimente mit einer Alarmanlage, Wasserstandsüberwachung,LDRs und Fotodioden vertiefen das gelernte Wissen. Anschließendwerden die im Buch enthaltenen Beispiele komplexer: Messungenvon Helligkeit oder Temperatur mit einem selbst gebauten Analog-/Digital-Wandler vermitteln weitere Grundlagen.

Manch einer wird sich vielleicht wundern, wie einfach der selbstgebaute A/D-Wandler mit ein paar Zeilen in der Anwendungssoftwareüber USB behandelt werden kann. Ein Fernbedienungstester mitFotodiode, ein Voltmeter und Batterietester, ein Kennwortdaten-speicher mit einem EEProm, Schrittmotorsteuerungen und dieVerwendung als USB-Dongle sind weitere praktische Beispiele.

Da der verwendete Baustein auch als USB-Seriell-Konverter fürMikrocontroller-Anwendungen dienen kann, werden auch dieseAnwendungsmöglichkeiten aufgeführt.

Die Umsetzung einer USB-I2C-Schnittstelle wird zum Kinderspiel,da ein Software-Logikanalyzer das Daten- und Taktsignal imtatsächlich erzeugten Timingdiagramm visualisiert. Sie können infünf einfachen Schritten eine universelle USB-I2C-Schnittstelleentwickeln.

Die einzelnen Beispiele werden detailliert erläutert und sindumfangreich illustriert, damit die Zusammenhänge von der Visual-Basic-Software zur Hardware und mit dem verwendeten USB-Baustein nachvollzogen und für eigene Ideen genutzt werdenkönnen.

Der Autor verwendet den USB-Baustein in der Praxis als USB-Seriell-Konverter für industrielle Steuerungen, für USB-Schrittmotor-steuerungen und als Programmieradapter für die neue Atmel-AT89LP-8051-Familie.

USBinderElektronikDie USB-Schnittstelle für praktische Anwendungen am PC einsetzen

USBinderElektronikDie Schnittstelle für praktische Anwendungen am PC einsetzen

Dipl.-Ing. Jürgen Hulzebosch

Auf CD-ROM:• Beispielprogramme• Datenblätter• Manuals

Von einfachen Lichtspielen,

RS232 Anbindungen,

8 Bit I/O bis zu I2C und SPI

USB

inde

rEle

ktro

nik

4089-5 U1+U4 21.02.2008 16:54 Uhr Seite 1


Top Related