![]() |
Delphi-Version: XE5
USB Programmieren
Hi Leute,
Ich hab mir vor kurzem "Lernpaket Experimente mit USB" von Franzis gekauft, darin sind viele Beispiele um z.B. eine an den USB angeschlossene LED blinken zu lassen, allerdings alle ins VB, wollte mal fragen ob ich das ganze auch in delphi machen kann? Wenn ja wie? :) Kennt vielleicht jemand eine Seite bei der ich etwas in die Richtung finde? |
AW: USB Programmieren
Du kannst den Quellcode nach Delphi übersetzen...
|
AW: USB Programmieren
Natürlich kann man das auch mit Delphi machen .... es kommt nur darauf an, wie die Hardware angesprochen wird.
- eigener Treiber (hier vermutlich nicht) - Schnittstellen-DLL - Standardtreiber vom Windows (HID, Virtual-COM-Port, ...) - ... Wie machst du das denn in VB? Vermutlich wird das Ding wohl einen seriellen COM-Port aufmachen, über den man den Mikrocontroller auf dem USB-Stick ansprechen kann. Der USB-Stick sieht aus wie eine Art Serial-USB-Konverter und auf dem anderen Board ist wohl ein kleiner Mikrocontroller? ![]() [edit] Zitat:
Zitat:
Mit USB auseinandersetzen, wo es am Ende doch wieder auf Seriell hinaus geht und man scheinbar nichts direkt mit USB zu tun hat. :wall: Hast du schon den Punkt "USB-Dongle" behandelt? Worum geht es dabei denn? Würde mich mal interessieren, ob das wenigstens mit USB zu tun hat oder ob es nicht nur danach klingt. |
AW: USB Programmieren
Das USB Dingens sieht eigentlich ganz interessant aus, vllt. sollte ich mir das auch mal kaufen. Hätte mal Lust damit ein wenig rum zu experimentieren.
Edit: Als ich damals 11 oder 12 war, hatte ich von meinem Vater den Kosmos 3000 bekommen. Da hab ich Stunden dran verbracht, und kannte mich zu der Zeit definitiv besser mit der Materie aus als Heute. Man vergisst doch einiges mit der Zeit :D ![]() |
AW: USB Programmieren
uhm, ich hab eigentlich noch nie VB benutzt, bin auch eher noch ein Anfänger in Delphi :D
Der Treiber heißt "D2XX-Treiber". Der FTDI-USB-Controller heißt "FT232R". |
AW: USB Programmieren
|
AW: USB Programmieren
Zitat:
![]() |
AW: USB Programmieren
Zwischen serieller Schnittstelle und USB gibt es aus Programmierersicht einen gewaltigen Unterschied: Bei Seriell "spricht" man mit der Schnittstelle - man muß Signale setzen und Überwachen, Bytes in die richtigen Ports schieben usw... Bei USB spricht man direkt mit dem Gerät, der USB-Treiber dazwischen ist völlig transparent.
Wenn es mit nem FTDI 232R (oder 245) läuft, wird da ein serieller Port emuliert. Da ist nix mit USB. |
AW: USB Programmieren
Wenn der USB-Stick intern einen FT232 hat, kannst du ihn in Delphi mit jeder Seriell-Komponente ansprechen (oder sogar, wenn du es auf die "harte Tour" willst, eine eigene RS232-Komponente mit Windows- / Delphi-Boardmitteln schreiben :)).
Von FTDI gibt es für den FT232 einen generischen COM-Treiber, nach der Installation hast du einen neuen seriellen Port in deinem System, den du z.B. über Async Pro o.Ä. in Delphi ansprechen kannst. Der Treiber von FTDI ist im übrigen, wie auch der Chip selbst, ziemlich gut. Die FT232-basierten Adapter haben im Treiber viel mehr Einstellmöglichkeiten als die meisten billig-USB-zu-RS232-Adapter und der Chip hält sich an die USB- und RS232-Spezifikationen, was viele Adapter nicht tun. Der bei dir verbaute FT232R hat übrigens noch zwei nette Features, die die anderen FT232-varianten nicht haben: - Du kannst den Takt des internen Oszillators nach außen führen und damit externe Peripherie wie z.B. eine MCU takten, ohne dass sie selbst einen eigenen Quartzoszi braucht. - Der Chip hat intern eine festgebrannte, nicht veränderbare ID / Seriennummer, die man auslesen kann, so dass du mit deiner Software einen Chip identifizieren und ihn z.B. als Hardware-Dongle nutzen kannst. Damit ist wohl auch das "USB-Dongle" Experiment aus dem Kasten realisiert. Allerdings geschieht das Auslesen der Chip-ID nicht über einen Befehl an die serielle Schnittstelle (wäre auch irgendwie sinnlos, da man es leicht emulieren könnte), sondern über eine eigene FTDI-DLL, deren Export Functions Header aber auch auf der FTDI-Seite als Delphi-Code vorliegt. Mit USB-Programmierung an sich hat das Alles allerdings gar nichts zu tun, da man im Endeffekt mit der Software nur einen seriellen COM-Port mit RS232 oder RS485 ansteuert, sich um das komplizierte USB-Protokoll jedoch überhaupt nicht kümmert. (und folgedessen auch nichts über USB lernt) So einen FT232-basierten Adapter kann man sich im übrigen auch ziemlich leicht selbst zusammenlöten, den Chip bekommst du bei jedem größeren Elektronik-Bauteilladen und als externe Peripherie brauchst du nur die beiden Buchsen, ein paar Widerstände und Kondensatoren. Man muss nur aufpassen, dass man sich nicht die BGA-Variante kauft, denn die kann man dann doch schlecht daheim löten, ausser man hat ne alte Friteuse :) P.S. Zitat:
Das Teil fand ich damals faszinierend und ich hatte höllischen Respekt vor den großen Transistoren. (von denen ich nun ja weiss, dass es Pfennigartikel sind, die im Kosmos nur auf riesige Leiterplatten gelötet wurden, damit man sie besser stecken kann :)) Der Phototransistor war auch ned schlecht... :) |
AW: USB Programmieren
Wenn ich einen Transistor schalten wollen würde, wie mus ich den dann mit der Zusatzplatine verbinden und wie bekomme ich es hin das der Transistor nacher Strom bekommt? hab keinen Plan :D
|
AW: USB Programmieren
Du steuerst die Basis des Transistor einfach so an, wie die LED, in dem beiliegenden Beispiel ... nur den Vorwiederstand solltest du anpassen, nicht daß er noch abraucht.
Vermutlich: An einem IO-Port des µC, dessen Programm auf einen Befehl via COM-Port wartet und entsprechend den Ausgang und darüber den Transistor ansteuert. |
AW: USB Programmieren
Ich versuchs mal.
Wenn ich irgendwas rumprobier, kann es passieren das ich den USB oder den Computer dabei schrotte? :D Also muss ich aufpassen oder kann ich rumexperimentieren? :) |
AW: USB Programmieren
Wenn du irgendwie eine Überspannung da reinbringst oder gar Netzspannung, dann kann der Computer kaputgehn.
Wenn du den IO-Pin des Microcompters überlasstest, dann kann nur dessen Port durchbrennen. Aber wenn du nicht was wirklich Schlimmes mit dem Ausgang anstellst, dann ist der Computer eigentlich sicher. Immerhin liegen zwischen dem Anschluß und dem Compuer mehrere Microchips, die zuerst kaputtgehen müssen. |
AW: USB Programmieren
Und welcher ist der IO-Pinn? :/
|
AW: USB Programmieren
Keine Ahnung?
Hab ja keine Beschreibung der Komponenten. Aber du könntest ja das bestimmt in der Dokumentation nachlesen. :zwinker: |
AW: USB Programmieren
Zitat:
|
AW: USB Programmieren
Der kleine Kringel versteckt sich nun schon seit so vielen Jahren .... ich glaub langsam ist er durcheingebrannt.
![]() |
AW: USB Programmieren
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Ab Seite 50 sind Experimente beschrieben. Beispiel LED ein/aus |
AW: USB Programmieren
Also, ich hab jetzt mal die Platine so wie beschrieben besteckt und wenn ich den USB jetzt in den PC steck blinkt si ein paar mal :) so wie es auch normale USB-Sticks machen.
Aber wie mach ich das ganze in delphi? Der code in VB sieht so aus:
Delphi-Quellcode:
Der eigentliche Programmablauf erfolgt in dieser Funktion:
Private Sub Option1_Click(Index As Integer) 'bei LED AN
LED_Click (False) ,ruft Funktion LED_Click mit False auf End Sub Private Sub Option2_Click(Index As Integer) 'bei LED AUS LED_Click (True) 'ruft Funktion LED_Click mit True auf End Sub
Delphi-Quellcode:
das ganze geht ja mit D2XX, aber ich seh nirgends etwas das die Klasse importiert oder so?
Private Function LED_Click(AnAus As Boolean)
On Error GoTo LED_Click_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 Function Else LoggerList.AddItem ("Anzahl vorhandener USB-Geräte: " & lngNumDevices) End If Und wie importier ich eine Unit in delphi? (Hab noch nie mit mehreren Units gearbeitet :oops:) Einfach in die Uses geht irgendwie nicht, da meckert er rum das er die Unit nicht finden kann. Außerdem unterstreicht er ein paar Wörter in D2XX z.B. Dialogs, wenn ich ein neues Programm schreiben will nennt er das FMX.Dialogs? Hat sich was geändert? hab schon ewig nicht mehr rumprogrammiert. :D soll ich Dialogs in FMX.Dialogs umbenennen? |
AW: USB Programmieren
Bei Delphi-Version XE5 kann ich Dir leider nicht helfen.
|
AW: USB Programmieren
Zitat:
|
AW: USB Programmieren
Zitat:
egal ich lad mir jetzt einfach eine andre Version runter, bei der nicht alles was ich noch weiß geändert ist ^^ |
AW: USB Programmieren
Irgendwie habe ich hier den dringenden Verdacht, dass hier jegliche Grundlagen fehlen. Sowohl was E-Technik angeht, als auch Programmierung. Mit diesem Wissensstand würde ich mich bei sowas eher nicht an meinen Haupt-PC trauen, sondern lieber ein altes Testgerät nehmen, wo es nicht schade ist, wenn mal etwas anfängt rot zu glimmen.
Zudem kauft man Delphi, einfach so runterzuladen gibt es imho nur die jeweils aktuelle Trial. Und wenn es keine Header-Übersetzung für die offenbar benutzte DLL (LED_Click() ist zumindest keine Built-In Methode) für Pascal gibt, hilft auch eine ältere Version nicht weiter. Sondern nur eine solche finden, oder selber machen. Warum nimmst du eigentlich nicht VB, wenn dies die vom Hersteller am besten unterstützte Sprache ist? |
AW: USB Programmieren
Also, habs jetzt mal mit VB probiert, ich selbst verstehs zwar nicht so wirklich aber die Beispielsprogramme gehen. :/
![]() Warum brauch ich hier zum Beispiel die Verbindung zwischen DTR und D4? Ich kenn mich nur mit den Grundkenntnissen in der Elektronik aus +-, Parallel- und Reihenschaltung und die verschiedenen Bauteile.. Ich hab mir das eigendlich so vorgestellt das zum Beispiel DTR Plus und D4 Minus ist und ich einfach die Spannung bestimmen kann. Ich wollte eigendlich nur 4 Transistoren über USB schalten also den eigendlichen Stromkreis mit einer Baterie versoregen wie kann ich das machen? |
AW: USB Programmieren
"Ich wollte eigendlich nur 4 Transistoren über USB schalten..."
Transistoren sind Schalter. WAS willst Du schalten? Willst Du nur experimentieren oder willst Du konkret etwas zusammenbauen für einen bestimmten Zweck? |
AW: USB Programmieren
Zitat:
Einfach eine Spannung an einem Port "einzustellen" wird so einfach nicht gehen, die Digitalschaltung arbeitet auf einem bestimmten Logik-Level, meist 12V, TTL (5V) oder 3.3V :) Um Spannungen zu messen, brauchst du bei einer Schnittstelle zu einem PC einen A/D-Wandler. Das ist meist noch recht einfach, sofern es nicht allzu präzise sein muss. Und um analoge Spannungen auszugeben, einen D/A-Wandler. Da wirds dann schon komplexer :) Generell kennt die Digitaltechnik an sich keine Spannungen. Es gibt nur Strom an / Strom aus bzw. Spannung angelegt / Spannung nicht angelegt (1/0) und das mit dem entsprechenden Logikleveln der Bauteile / Schaltung. Transistoren schalten hat auch erstmal gar nichts mit RS232 und DTR o.Ä zu tun. Was sollen deine Transistoren überhaupt schalten? Weisst du überhaupt, wie ein Transistor funktioniert? Wenn nicht, ist das nichts, weswegen man sich schämen müsste, aber Einlesen musst du dich wohl oder Übel in die Materie schon. Ich empfehle dir z.B. das Elektronik Kompendium, einfach mal danach Googeln. Was willst du mit deiner Schaltung denn genau erreichen? Bzw. was stellst du dir überhaupt vor? Wenn wir das wissen, können wir dir vielleicht einen gedanklichen Rohbau liefern :) |
AW: USB Programmieren
Mit den Transistoren wollte ich eigentlich nur ein paar LEDs anschalten.. geht natürlich auch direkt an den USB aber ich wollts mit Baterie. Und ja eigentlich will ich nur ein bisschen rumexperimentieren :)
Wie Transistoren funktionieren weiß ich aber von Analog und Digital versteh ich nix, ich guck mal in Wikipedia :D Hab mir das ganze auch ein bisschen einfacher vorgestellt :D |
AW: USB Programmieren
Und ist mein USB digital oder analog? im Beispiel die LED leuchtet ja auch?
|
AW: USB Programmieren
Baum21: BITTE GIB ES AUF!!!
|
AW: USB Programmieren
USB ist die Anschluss- und Kommunikationsart. Was du meinst, wird wohl dein Board sein, wo der PIC drauf steckt, mit dem du dann via USB mit deinem PC kommunizierst. Wenn schon so dermaßen grundlegende Begrifflichkeiten so unklar sind, und verstehe das bitte nicht als Angriff, solltest du ganz dringend ein paar Wochen Lektüre (nicht nur kurz Wikipedia durchscrollen!), oder vielleicht einen VHS Kurs o.ä. in Betracht ziehen. Man lernst zwar durchaus spielerisch und durch einfach mal machen, aber so komplett ohne Grundlage halte ich das Vorhaben für nicht sinnvoll, und potenziell zerstörerisch ;)
|
AW: USB Programmieren
:(
hmm, trotzdem wenn ich anstelle der LED einen Transistor einbauen würde müsste es doch gehen? Und Wozu ist die Verbindung bei DTR und D4? (Nur noch die zwei fragen :) ) |
AW: USB Programmieren
D4 ist der Port 4, den du vom Programm ansteuerst und über den dann die LED gegen Masse gezogen wird.
Port im Programm = 0 >>> Anschluß AUS >>> LED an Also könnte man die LED auch "direkt" von da auf eine der beiden 5V legen und es würde eben so funktionieren. Die grauen Stiche dürften vermutlich eine Verbindung auf der Leiterplatte darstellen und bei dem roten Bogen mußt du eine Verbindung herstellen. |
AW: USB Programmieren
Liste der Anhänge anzeigen (Anzahl: 1)
Also in einem anderen Thread habe ich eine Frage zur Seriellen Communikation gestellt darin ist auch eine Unit die sehr einfach ist.
Die kannst du nehmen und die Register schalten ..
Delphi-Quellcode:
Dann hast du schon mal 2 Ausgänge
//===========================================
procedure TForm1.Button6Click( Sender: TObject ); begin ComPort1.SetRTS( true ); end; //=========================================== procedure TForm1.Button7Click( Sender: TObject ); begin ComPort1.SetRTS( false ); end; //=========================================== procedure TForm1.Button8Click( Sender: TObject ); begin ComPort1.SetDTR( true ); end; //============================================ procedure TForm1.Button9Click( Sender: TObject ); begin ComPort1.SetDTR( false ); end; end. Als Transistor würde ich einen NPN nutzen z.B. BC 546 die Grundschaltung ist einfach . Emitter nach Minus GND Basis über einen Widerstand ( 10 KOhm ) an den Ausgang positives Signal schaltet den Transistor durch Deine z.B. LED Schaltest du über plus und einen Vorwiederstand ca 1 KOhm an +5 Volt Siehe auch Bild . R2 ist Quasi die LED und der Vorwiderstand der LED. Auf die Richtige Polung der LED achten ! sonst geht sie nicht .. R_LED berechnet sich aus R = U/I = (UB -ULED)/ ILED = (5Volt-2Volt)/0,005 A = 600 Ohm ich nehme immer 1 KOHM das klappt dann schon ... Über den BS546 kannst du ca 200 mA schalten und PTOT ( maximale Verlustleistung am Transistor dann ist er TOT ;-)) sind 500 mWatt ... wenn du ein Relais damit betreiben möchtest dann muss da noch eine Schutzdiode über die Spule die dann in Sperrrichtung betrieben wird. Also Kathode an + und Anode an -. Die Schaltung kann man auch an einem µC ( Pic oder Microcontroller ) nutzen. Die Maximale Belastung eines USB Anschluss darf 500 mA nicht überschreiten. (USB 2.0 ) Sonst ist er futsch. Ich würde nicht mehr als 400 machen. Grüße Joachim ggf noch benötigte Links mit Delphi Beispielen wie schon jemand geschrieben der FT232R kann mehr ... ![]() Die benötigte Unit für die Serielle Kommunikation ist die TCOMPORT die habe ich schon mal hier hochgeladen. Diese ist jedoch nicht von mir ! |
AW: USB Programmieren
Ist ja lustig... Das Bild sieht dem Bild frappierend ähnlich, das ich vor Jahren mal für ein Transistor-Tutorial gebastelt habe ;)
|
AW: USB Programmieren
Um die ganze Sache mal TECHNISCH anzugehen: USB-Stecker einstecken kann ja wohl jeder. Was dranhängt? Sieht hier nach einem Wandler auf eine RS-232-Schnittstelle aus, wie RTS vermuten läßt. Eine software wird also die pins dieser Schnittstelle setzen oder abfragen. Dabei ist es dann schon egal, ob diese direkt in der PC-hardware vorhanden ist oder über einen USB-Wandler-Baustein "vorgegaukelt" wird. Das macht hier offensichtlich ein PIC (Mikrocontroller von microchip). Der bezieht seinen Strom über die USB-Schnittstelle, und für ein paar LEDs reicht dieser Strom allemal auch noch. Die Batterie ist also überflüssig. Die RS-232-pins können die LEDs möglicherweise dennoch nicht zum zufriedenstellenden Leuchten bringen. Das liegt daran, daß dort mit wesentlich höheren Spannungen gearbeitet wird als den 5 Volt vom USB. Die Energie ist demzufolge etwas schlapp, selbst für die 20mA für eine LED. Die Umsetzung per Transistor ist also keine schlechte Idee. Da die RS-232-Signale im Bereich -15..-3 (LO) und +3..+15 (HI) Volt liegen, reicht der schon erwähnte npn-Transistor (z.B. BC237) und ein Basis-Vorwiderstand im Bereich 10..47KOhm aus. Die LED sollte dann zwischen +5V (vom USB) und dem Kollektor liegen - Vorwiderstand nicht vergessen! - 150 Ohm für 20mA. Der Emitter liegt auf GND. So kann man durch setzen der RS-232-flags die LEDs einschalten. Mit der Batterie, z.B. 9-Volt-Block, geht's auch. Minus an GND, Plus an die LED (statt den +5V vom USB), Vorwiderstand anpassen (350 Ohm für 20mA bei 9V). Die Signale, die die Zustände der RS-232-Schnittstelle bestimmen, kommen aber mit Sicherheit aus dem PIC. Und da kann man die LEDs direkt dranzwacken, denn jeder PIC kann locker 20mA sink current liefern. Sol heißen, LED auf +5V, üer Vorwiderstand auf den entsprechenden PIC-port. Aber: die LED leuchtet dann bei LO-pegel. Das mit dem Transistor geht hier genauso. Für hellere LEDs, die mehr Strom brauchen, den Vorwiderstand anpassen. Außerdem muß der Transistor diesen Strom schalten können, und die Stromversorgung muß den Strom liefern können (USB: bei 500mA ist Schluß, und der PIC braucht auch noch Strom. Batterie: 9-Volt-Block ade, die ziehen NIX vom Teller). Da kann man dann über ein externes Netzteil nachdenken, weiterhin über eine PWM-Helligkeitsregelung für die LED (verringer die Verluste) usw., also nach oben offen. Viel Glück. LGU
|
AW: USB Programmieren
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:19 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz