[Spezial] USB-Gerät ansprechen

  • Hi,

    ich habe ein USB-Gerät (http://www.ftdichip.com/Products/Evalu…TL-232R-PCB.htm) das von USB auf Serial umsetzt. An diesem ist eine LED angelötet. Diese möchte ich nun via. Programm ein und ausschalten.

    Wie ich das Programm aufbaue weiß ich. Ich weiß nur nicht wie ich mit AutoIT das Geräte anspreche. Also ein/aus. Kann mir evtl. wer helfen?

    Ich code mla derweil das Programm sowiet wie ich komme.

    Michi26206

    Einmal editiert, zuletzt von Michi26206 (16. März 2009 um 20:14)

  • Wie eine LED anschalten?

    Du brauchst doch erst mal eine Schnittstelle die du ansprechen kannst.
    Da das ja nun Hardware ist und keine Software gehe ich mal nicht davon aus das es funktioniert.
    Sei denn der Hersteller hat eine DLL mitgeliefert in der das eine "Speicheradresse" steht die man ansprechen kann.

    MfG
    Der_Doc

  • Hi,

    sry vergessen. Der Hersteller hat einen Treiber auf seiner Seite und ne DLL kann man sich auch runterladen. Und hier ist ne Anleitung: http://www.ftdichip.com/Documents/Prog…(FT_000071).pdf.

    Aber da ich noch nicht ganz so fit in AutoIt bin weiß ich nicht wie ich das in AutoIt übersetzen soll. Moment da kommt mir ne Ide... DllCall oder so gibts da irgendwo.

    Hier mal das Programm wo das ganze nacher machen soll:

    Spoiler anzeigen
    [autoit]


    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Res_Comment=Ein Programm von HDW-Computer-Forum http://www.hdw-computer-forum.de
    #AutoIt3Wrapper_Res_Description=by Michi26206
    #AutoIt3Wrapper_Res_Fileversion=1.0.0.0
    #AutoIt3Wrapper_Res_LegalCopyright=by HDW-Computer-Forum
    #AutoIt3Wrapper_Res_Language=1031
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #cs -----------------------------------------------------------------------------------------------------------------------------

    USB-LED.exe (C) by Michi26206 - Programm zu, schalten einer LED über Computer

    #ce -----------------------------------------------------------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Opt("GUICloseOnESC", 1) ; ESC drücken beendet Programm nicht
    ;Opt("TrayAutoPause", 0) ; das Script nicht pausieren, wenn auf das Tray-Icon geklickt wird
    ;Opt("TrayMenuMode", 1) ; kein Defaul-Tray-Menu
    Opt("MustDeclareVars", 1) ; Variablen müssen deklariert werden

    [/autoit] [autoit][/autoit] [autoit]

    Global $Maindialog, $title="USB-LED", $version="1.0.0.0", $nMsg
    Dim $LED[3][3]

    [/autoit] [autoit][/autoit] [autoit]

    $Maindialog = GUICreate($title & " " & $version, 200, 200, -1, -1)
    GUISetBkColor(0xFFFFFF)
    $LED[1][1] = GUICtrlCreateButton("LED ein", 70, 140, 60, 25, 0)
    $LED[1][2] = GUICtrlCreateLabel("LED ein", 65, 60, 100, 25)
    GUICtrlSetState($LED[1][2], $GUI_HIDE)
    GUICtrlSetfont($LED[1][2], 15)
    GUICtrlSetColor($LED[1][2], 0x006600)
    $LED[2][1] = GUICtrlCreateButton("LED aus", 70, 140, 60, 25, 0)
    GUICtrlSetState($LED[2][1], $GUI_HIDE)
    $LED[2][2] = GUICtrlCreateLabel("LED aus", 65, 60, 100, 25)
    GUICtrlSetFont($LED[2][2], 15)
    GUICtrlSetColor($LED[2][2], 0xCC0000)
    GUISetState(@SW_SHOW, $Maindialog)

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $LED[1][1]
    manage_view("ein")
    Case $LED[2][1]
    manage_view("aus")
    EndSwitch
    Sleep(10)
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func manage_view($art)
    Switch $art
    Case "ein"
    GUICtrlSetState($LED[2][1], $GUI_SHOW)
    GUICtrlSetState($LED[2][2], $GUI_HIDE)
    GUICtrlSetState($LED[1][1], $GUI_HIDE)
    GUICtrlSetState($LED[1][2], $GUI_SHOW)
    Case "aus"
    GUICtrlSetState($LED[1][1], $GUI_SHOW)
    GUICtrlSetState($LED[1][2], $GUI_HIDE)
    GUICtrlSetState($LED[2][1], $GUI_HIDE)
    GUICtrlSetState($LED[2][2], $GUI_SHOW)
    EndSwitch
    EndFunc ;==>mange_view

    [/autoit]

    edit: progandy war schneller mist ;)

  • Hey ihr seid echt spitze. Ich arbeite mich da mal durch wenn Problem auftreten melde ich mich.

    Michi26206

  • Sorry wegen doppelpost bin aber gerade etwas verwirrt.

    Also damit die LED leuchtet muss ich via Software ne elektrische Verbindung herstellen oder?

    Muss ich dann die LED ziwschen VCC und TXD löten? Datenbaltt mit den bezeichnungen der Kontakte hier: http://www.ftdichip.com/Documents/Data…2R_PCB_V100.pdf Punkt 4 und 4.1.

    Wenn das soweit stimmt mit welchem Befehl muss ich arbeiten. Und wo bekomme ich die oben genannte ftd2xx.dll?

    edit:

    Vergesset mal das obere wenn das stimmt:

    was anderes was mir gerade kam: ich löte es auf GND und RTS# zum auschalten schalte ich dan Handshaking bei Output aus. Datenbaltt mit den bezeichnungen der Kontakte hier: http://www.ftdichip.com/Documents/Data…2R_PCB_V100.pdf Punkt 4 und 4.1.

    Das geht normal auch mit FT_ClrRts

    Michi26206

    4 Mal editiert, zuletzt von Michi26206 (13. März 2009 um 16:36)

    • Offizieller Beitrag

    Und wo bekomme ich die oben genannte ftd2xx.dll?


    Die wird automatisch installiert, wenn du die Treiberinstallation für den Adapter durchführst. Ist also auf der Treiber-CD zum Adapter dabei. Solltest du die verschlampt haben :D, melde dich, dann schick ich sie dir.
    FTDI produziert die einzigen Chips, die ich entdeckt habe, die tatsächlich bidirektional arbeiten und somit wirklich eine RS232-Schnittstelle emulieren (daher auch der Preisunterschied bei den Adaptern, Billgschrott ab 3 €; gute FTDI ca. 50 €).

  • Die musst du auch nicht sehen... die DLL sollte im System32 zu finden sein oder so.
    Was kommt denn Raus, wenn du das machst:

    [autoit]

    MsgBox(0,"",DLLOpen("ftd2xx.dll") )

    [/autoit]


    -1 ist Fehler, alles >= 0 ist OK

  • Achso. Naja ka. hab mciht bis jetz noch nciht mit DLL´s beschäftigt.

    Und jetz was Lustiges: es kommt weder -1 noch 0 raus, sonder 1 xD.

    Aber wie du sicher weißt heißt das auch das sie das ist.

    Gut.

    Funktioniert dann meine oben genannte Theorie mit der Handshakeleitung? Würd es nämlich ungerne zerstören ;)

    Michi26206

    Einmal editiert, zuletzt von Michi26206 (13. März 2009 um 17:09)

  • Denke schon:
    http://informatik.bildung-rp.de/fileadmin/user…df/MA-RS232.pdf

    Zitat

    Man verbindet eine beliebige Ausgangsleitung und GND mit einer Leuchtdiode (LED).
    Durch Button klick schaltet man den Ausgang an oder aus. Die LED leuchtet, wenn der
    Ausgang positive Spannung hat. Ist die LED umgekehrt angeschlossen, leuchtet sie, wenn
    der Ausgang negative Spannung liefert.


    Du kannst auch eine andere Ausgangsleitung nehmen ;) Aber pass auf die Spannung auf, vielleicht brauchst du noch einen Widerstand.

  • Hi,

    ja brauche ich. spannung ist einmal 4,6 und 1x 4,9 und hab ne Diode mit ka. Aber mein "Ausbilder" hat mir nen passenden Wiederstand mitgegeben und gesagt das passt.

    Michi26206

    Ich mach das dann mal soweit wenn was nicht geht melde ich mich.

  • Hi,

    so hab gerade getestet.

    Code:

    Spoiler anzeigen
    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    ;#AutoIt3Wrapper_Icon=shutdown.ico
    #AutoIt3Wrapper_Res_Comment=Ein Programm von HDW-Computer-Forum http://www.hdw-computer-forum.de
    #AutoIt3Wrapper_Res_Description=by Michi26206
    #AutoIt3Wrapper_Res_Fileversion=1.0.0.0
    #AutoIt3Wrapper_Res_LegalCopyright=by HDW-Computer-Forum
    #AutoIt3Wrapper_Res_Language=1031
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #cs -----------------------------------------------------------------------------------------------------------------------------

    USB-LED.exe (C) by Michi26206 - Programm zu, schalten einer LED über Computer

    #ce -----------------------------------------------------------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Opt("GUICloseOnESC", 1) ; ESC drücken beendet Programm nicht
    ;Opt("TrayAutoPause", 0) ; das Script nicht pausieren, wenn auf das Tray-Icon geklickt wird
    ;Opt("TrayMenuMode", 1) ; kein Defaul-Tray-Menu
    Opt("MustDeclareVars", 1) ; Variablen müssen deklariert werden

    [/autoit] [autoit][/autoit] [autoit]

    Global $Maindialog, $title="USB-LED", $version="1.0.0.0", $nMsg, $COMopen
    Dim $LED[3][3]

    [/autoit] [autoit][/autoit] [autoit]

    $COMopen = DllCall("ftd2xx.dll", "int", "FT_OPEN", "hwnd", 0)

    [/autoit] [autoit][/autoit] [autoit]

    $Maindialog = GUICreate($title & " " & $version, 200, 200, -1, -1)
    GUISetBkColor(0xFFFFFF)
    $LED[1][1] = GUICtrlCreateButton("LED ein", 70, 140, 60, 25, 0)
    $LED[1][2] = GUICtrlCreateLabel("LED ein", 65, 60, 100, 25)
    GUICtrlSetState($LED[1][2], $GUI_HIDE)
    GUICtrlSetfont($LED[1][2], 15)
    GUICtrlSetColor($LED[1][2], 0x006600)
    $LED[2][1] = GUICtrlCreateButton("LED aus", 70, 140, 60, 25, 0)
    GUICtrlSetState($LED[2][1], $GUI_HIDE)
    $LED[2][2] = GUICtrlCreateLabel("LED aus", 65, 60, 100, 25)
    GUICtrlSetFont($LED[2][2], 15)
    GUICtrlSetColor($LED[2][2], 0xCC0000)
    GUISetState(@SW_SHOW, $Maindialog)

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $LED[1][1]
    manage_view("ein")
    Case $LED[2][1]
    manage_view("aus")
    DllCall("ftd2xx.dll", "int", "FT_ClrRts", "hwnd",0)
    EndSwitch
    Sleep(10)
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func manage_view($art)
    Switch $art
    Case "ein"
    GUICtrlSetState($LED[2][1], $GUI_SHOW)
    GUICtrlSetState($LED[2][2], $GUI_HIDE)
    GUICtrlSetState($LED[1][1], $GUI_HIDE)
    GUICtrlSetState($LED[1][2], $GUI_SHOW)
    Case "aus"
    GUICtrlSetState($LED[1][1], $GUI_SHOW)
    GUICtrlSetState($LED[1][2], $GUI_HIDE)
    GUICtrlSetState($LED[2][1], $GUI_HIDE)
    GUICtrlSetState($LED[2][2], $GUI_SHOW)
    EndSwitch
    EndFunc ;==>mange_view

    [/autoit]

    Messe aber mit dem Multimeter immer noch 4,9 V zwischen GTS# und GND wenn ich im Programm auf LED aus geklickt habe.

    Für alle neueunsteiger: die DLL beschriebung ist hier: http://www.ftdichip.com/Documents/ProgramGuides/D2XXPG34.pdf

    Gruß Michi26206

    2 Mal editiert, zuletzt von Michi26206 (13. März 2009 um 18:29)

    • Offizieller Beitrag

    Aber mein "Ausbilder" hat mir nen passenden Wiederstand mitgegeben und gesagt das passt.


    Einen, der für alles paßt ?
    Also du brauchst bei 4,6V einen Widerstand von 150 Ohm (für grüne LED würde 125 reichen - aber den gibts nicht).
    Bei 4,9V brauchst du für rote LED: 220 Ohm, für grüne LED 150 Ohm. ;)

  • Hi,

    hab nur eine rote LED (die bei niedriger Spannung leuchten, mir fällt der Name nicht mehr ein ?( ) und nen 5k6 xD (5,6k) Ohm Wiederstand (im Keller habe ich noch andere da passt dan schon einer).

    Aber um das gehts im moment gar nicht. Ich möchte erstmal das Programm hinbekommen. Ob Spannung da ist, messe ich vorerst mit nem Multimeter.

    Michi26206