pic 18f4550 en usb


Henry S.

Moderator

Dat is idd de device infosectie.
Je kan het ipv met 1300 regels proberen met een skeleton program.
Wie wat bewaart moet later veel weggooien. Word lid van de Benelux DX Club, Een ATX-voeding gebruiken?
met een skeleton program ?
je bedoelt zonder die 1300 regels ?

dat kan niet in proton.

Als je een device opgeeft gebruikt hij dat bestand.
Overigens doet hij hetzelfde bij de 18F2550 die ook usb heeft.

Ik heb er nog niks op gevonden.
Een zak tuinaarde opescheuren
Henry S.

Moderator

Ik dacht bij mezelf, ik kijk zelf ook even.

Helaas is EasyHID verwijderd uit Proton+ wegens gedonder met usb.org.
Maar ik heb op de laptop nog een oudere versie staan, EasyHID even overgezet naar de laatste betaversie.

Defaultwaarden genomen, dat levert 63 regels (inclusief header) op voor een 18F4550 en geen errors. Op de laptop idem dito.
Daarnaast nog een include file van 263 regels en bijna 10kB aan VB files.
Wie wat bewaart moet later veel weggooien. Word lid van de Benelux DX Club, Een ATX-voeding gebruiken?
De pic18F controller word netjes gevonden met de standaart vid en pid van easyhid.

Ik ben nu bezig met Visual Studio 2008 dus hij converteerd de VB file die easyhid uitspuugd.

Ik heb nu "een programma" maar ik krijg ene melding dat hij mcHID.dll niet vinden die toch echt in mijn system32 map staat.
Daardoor werkt alles waarschijnlijk niet en kan hij geen verbinding maken met de pic.

System.DllNotFoundException: Kan DLL mcHID.dll niet laden: Kan opgegeven module niet vinden. (Uitzondering van HRESULT: 0x8007007E)

Een zak tuinaarde opescheuren
hadv

Golden Member

Zoals ik de foutmelding lees betekent het dat de .dll niet wordt geregistreerd. De dll is dus al wel geladen volgens de foutmelding, maat dat is niet die in de system32 map. Kijk maar naar de melding, die wijst naar een heel ander pad. De foutmelding komt van RegSvr32, dat is het programma dat dll's registreert.
Ik zou die in dat pad staat even verplaatsen of renamen en vervolgens je project in VS opnieuw opbouwen. Wellicht dat VS dan op zoek gaat naar de correcte dll (weet ik niet zeker, ik ken VS niet goed genoeg).
Just find out what you like and let it kill you
ik zou gewoon even een volledig nieuw project aanmaken en zelf de API binnnen trekken van die mcHID.dll

heb zelf een VB08 app lopen met mchid.dll als onderdeel en werkt perfect.

declaratie's:
code:
 Declare Function hidConnect Lib "mcHID.dll" Alias "Connect" (ByVal pHostWin As Long) As Boolean
    Declare Function hidDisconnect Lib "mcHID.dll" Alias "Disconnect" () As Boolean
    Declare Function hidGetItem Lib "mcHID.dll" Alias "GetItem" (ByVal pIndex As Long) As Long
    Declare Function hidGetItemCount Lib "mcHID.dll" Alias "GetItemCount" () As Long
    Declare Function hidRead Lib "mcHID.dll" Alias "Read" (ByVal pHandle As Long, ByRef pData As Byte) As Boolean
    Declare Function hidWrite Lib "mcHID.dll" Alias "Write" (ByVal pHandle As Long, ByRef pData As Byte) As Boolean
    Declare Function hidReadEx Lib "mcHID.dll" Alias "ReadEx" (ByVal pVendorID As Long, ByVal pProductID As Long, ByRef pData As Byte) As Boolean
    Declare Function hidWriteEx Lib "mcHID.dll" Alias "WriteEx" (ByVal pVendorID As Long, ByVal pProductID As Long, ByRef pData As Byte) As Boolean
    Declare Function hidGetHandle Lib "mcHID.dll" Alias "GetHandle" (ByVal pVendoID As Long, ByVal pProductID As Long) As Long
    Declare Function hidGetVendorID Lib "mcHID.dll" Alias "GetVendorID" (ByVal pHandle As Long) As Long
    Declare Function hidGetProductID Lib "mcHID.dll" Alias "GetProductID" (ByVal pHandle As Long) As Long
    Declare Function hidGetVersion Lib "mcHID.dll" Alias "GetVersion" (ByVal pHandle As Long) As Long
    Declare Function hidGetVendorName Lib "mcHID.dll" Alias "GetVendorName" (ByVal pHandle As Long, ByVal pText As String, ByVal pLen As Long) As Long
    Declare Function hidGetProductName Lib "mcHID.dll" Alias "GetProductName" (ByVal pHandle As Long, ByVal pText As String, ByVal pLen As Long) As Long
    Declare Function hidGetSerialNumber Lib "mcHID.dll" Alias "GetSerialNumber" (ByVal pHandle As Long, ByVal pText As String, ByVal pLen As Long) As Long
    Declare Function hidGetInputReportLength Lib "mcHID.dll" Alias "GetInputReportLength" (ByVal pHandle As Long) As Long
    Declare Function hidGetOutputReportLength Lib "mcHID.dll" Alias "GetOutputReportLength" (ByVal pHandle As Long) As Long
    Declare Sub hidSetReadNotify Lib "mcHID.dll" Alias "SetReadNotify" (ByVal pHandle As Long, ByVal pValue As Boolean)
    Declare Function hidIsReadNotifyEnabled Lib "mcHID.dll" Alias "IsReadNotifyEnabled" (ByVal pHandle As Long) As Boolean
    Declare Function hidIsAvailable Lib "mcHID.dll" Alias "IsAvailable" (ByVal pVendorID As Long, ByVal pProductID As Long) As Boolean


werkt overgens perfect op windows xp en windows 7 op beide is er geen registervermelding aangemaakt.

voor event afhandeling van binnenkomende data, connecten en disconnecten van device's zul je wel even de stream moeten overriden in je applicatie zodat je de message's kan afvangen.
niet met me uitspraken(of opmerkingen) eens mail me.K8048 guide,site van mijn meisje
Oke ik zal een nieuw project maken.
Mischien heb je een werkende versie die je wilt delen ?

Ik heb een kleine basis van VB6 dus als ik iets werkends heb dan kan ik het op alle mogelijke manieren aanpassen en dat zal ik ook zeker doen.
probleem nu is die dll dus .. maar ik ga eerst even kijken wat een nieuw project uithaalt
Een zak tuinaarde opescheuren
ik heb wel werkende code zal zo eens wat posten hier.

dit is het argument wat je mee geeft aan hidConnect()
code:
 Dim appid As IntPtr = Me.Handle


stukje code wat nodig is voor voor de messagestream en de streamhandler:
code:
 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
hidConnect(appid)
End Sub


stukje code om de MessageStream af te vangen en terug te geven aan de KernelStream
1.er een device wordt ingeplugd
2.er een device wordt uitgeplugd
3.er een datapackage binnen komt.

code:
    Dim msg_id As Integer = 32968

    Const notify_plugged_device = 1
    Const notify_unplugged_device = 2
    Const notify_read = 4

    Private Event Unplugged_device()
    Private Event Plugged_device()
    Private Event Read()

 Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
        If m.HWnd = appid Then
            If m.Msg = msg_id Then
                Select Case m.WParam.ToInt32
                    Case notify_plugged_device
                        RaiseEvent Plugged_device()
                    Case notify_unplugged_device
                        RaiseEvent Unplugged_device()
                    Case notify_read
                        RaiseEvent Read()
                End Select
            End If
        End If

        MyBase.WndProc(m)
    End Sub
niet met me uitspraken(of opmerkingen) eens mail me.K8048 guide,site van mijn meisje
Kevin is het nog gelukt?

hier nog wat tips:


  • als je data gaat versturen zorg dan dat je als argment het eerste byte van de buffer mee geeft, let op die buffer moet je data+1 zijn het eerste byte is namelijk gereserveerd zie ook helpfile van mcHID.
  • als je een DeviceUnplugged event hebt check dan of je device er nog aan zit, zo niet close dan de handle.


als er nog vragen zijn hoor ik het graag.
niet met me uitspraken(of opmerkingen) eens mail me.K8048 guide,site van mijn meisje