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