EasyHID and USB for Newbies??


Closed Thread
Page 1 of 2 12 LastLast
Results 1 to 40 of 69
  1. #1
    Join Date
    Oct 2003
    Location
    Australia
    Posts
    257

    Default EasyHID and USB for Newbies??

    Hi All,

    Any info to help a newbie would be greatfully received. How to use EasyHID software and program a USB microchip?

    Basically, I would love to replace my old 'mock-up' joystick (connected to rudder pedals) that use the PC game port and build a USB controller.... for starters I heard that USB has better accuracy than the game port.

    Cheers
    Oh, and Happy New Year too. :-)

  2. #2
    Join Date
    Jan 2005
    Location
    Montreal, Quebec, Canada
    Posts
    2,588

    Default

    Good luck getting it all together. I got myself a 18F4550, EasyHID and gave it my best shot, but it kinda came up a little short. I followed all the steps, but there are still 'things' missing.

    There's several threads here explaining the process, but I couldn't find one that spelled it ALL out (last time I looked was a few months ago, maybe new data out now).

    Please post a follow-up on your progress.

    Robert
    My Creality Ender 3 S1 Plus is a giant paperweight that can't even be used as a boat anchor, cause I'd be fined for polluting our waterways with electronic devices.

    Not as dumb as yesterday, but stupider than tomorrow!

  3. #3
    Join Date
    Oct 2003
    Location
    Australia
    Posts
    257

    Default Still waiting

    Hi Rob,

    Yep, I'm still waiting for (as you say) someone to spell it out. Hahaha.

    I'm a bit hesitent to buy one of these chips until I have all the facts and a pretty good 'How to' Guide.

    Thanks for your comments
    J

  4. #4
    Join Date
    Sep 2004
    Location
    montreal, canada
    Posts
    6,898

    Smile Why people are so afraid of???

    Since cash is involve and you don't want to loose any of these green crispy money bill, GOOD NEWS (not really a news but) YOU Don't need to buy them... Microchip offer Free demo... see their website and open an account. Free of charge, freee shipping and blah blah... yeah of course there's some limitation in the quantity but... it's still free.

    I'm a bit hesitent to buy one of these chips until I have all the facts and a pretty good 'How to' Guide.
    It will never hurt to try
    They will never bite you
    The worst case, you'll learn something new OR, also possible, waste your time.
    Steve

    It's not a bug, it's a random feature.
    There's no problem, only learning opportunities.

  5. #5
    Join Date
    Jan 2005
    Location
    Montreal, Quebec, Canada
    Posts
    2,588

    Default

    Hi J,

    Yup, as Steve said, MicroChips offer free samples. I've already ordered many chips from them that way; no hassle, no questions, fast shipping (from Malaysia I believe, took 3 days). I recommend the 18F4550, it looks a lot like the 16F877, but has more bells and whistles.

    As soon as I figure this out, I'll report back here with my findings like I did for the graphic LCD. So far I haven't been able to find all the pieces to the puzzle. It's not a matter of them being spread out over several threads or sites, I have no problem with searching. There's 'some' information that people are just not posting. I suspect it's the PC side that is incomplete in the examples I've seen so far.

    All I need is a working example of sending a keystroke, I can take it from there. But by the way things appear, I'll probably have to dish out $600 for that specialized software that is supposed to spit it all out; PIC and PC code. I just don't have that kind of money lying around...

    http://www.tracesystemsinc.com/usb_tools.ivnu

    Robert
    My Creality Ender 3 S1 Plus is a giant paperweight that can't even be used as a boat anchor, cause I'd be fined for polluting our waterways with electronic devices.

    Not as dumb as yesterday, but stupider than tomorrow!

  6. #6
    Join Date
    Jan 2005
    Location
    Montreal, Quebec, Canada
    Posts
    2,588

    Default

    The software is ordered here:
    http://cippsites.com/Merchant4/merch...re_Code=melabs

    Robert
    My Creality Ender 3 S1 Plus is a giant paperweight that can't even be used as a boat anchor, cause I'd be fined for polluting our waterways with electronic devices.

    Not as dumb as yesterday, but stupider than tomorrow!

  7. #7
    Join Date
    Apr 2003
    Location
    Cambridge - UK
    Posts
    1,030

    Default EasyHID is completely free

    EasyHID Wizard is completely free. It is not time limited in any way and it does not have any nag screens!

    http://www.mecanique.co.uk/products/usb/easyhid.html

  8. #8
    Join Date
    Jan 2005
    Location
    Montreal, Quebec, Canada
    Posts
    2,588

    Default

    Been there done that, still can't get it to work. It's like some stuff is still missing. I tried making a simple keyboard using the examples that are floating about in here and several other sites, couldn't get it happening after a lot of hours.

    So I gave up until I'll have enough money for the software, which ain't tomorrow...

    Robert
    My Creality Ender 3 S1 Plus is a giant paperweight that can't even be used as a boat anchor, cause I'd be fined for polluting our waterways with electronic devices.

    Not as dumb as yesterday, but stupider than tomorrow!

  9. #9
    Join Date
    Oct 2003
    Location
    Australia
    Posts
    257

    Default

    Hi Rob,

    That HIDMaker FS Software looks really good... but I would have to sell the House Cat in order to afford it!

    What we really want is a step by step guide how to write USB code in Picbasic Pro.

    Easy HID is a good start but as you say, there are too many blanks.

    I ordered my free chips from Micro chip... thanks for the Tip.

    Cheers
    Jared

  10. #10
    Join Date
    Jan 2005
    Location
    Montreal, Quebec, Canada
    Posts
    2,588

    Default

    Jared,

    I might be able to get it and still keep my 2 house cats, Garfield and Scotchtape. I have a cheque coming in for a yet unknown amount of money, hoping for a late Christmas present from the gods.

    I'll report back with a basic skeleton if I'm lucky; at least a simple transmission of one byte from the PIC to PC. Once you have a working sample running, it shouldn't be hard to increase bufer size to custom spec. My application is simulating a keyboard, so I only need one VB command to simulate a keystroke (or sequence of keystrokes).

    I'm still unsure on how much PC-side material this software will deliver. If I had been smart, I would have spent the last month or so putzing around with Visual Basic, getting myself familiar with its intricacies. I know BASIC, but VB has a lot more power to it, let alone all the Windows crap that goes along with it.

    But hey, procrastination is my middle name...

    Robert
    My Creality Ender 3 S1 Plus is a giant paperweight that can't even be used as a boat anchor, cause I'd be fined for polluting our waterways with electronic devices.

    Not as dumb as yesterday, but stupider than tomorrow!

  11. #11
    Join Date
    Oct 2003
    Location
    Australia
    Posts
    257

    Talking

    Robert,

    Garfield and ScotchTape, Let me guess, one cat is Fat and Lazy, the other is a Skinny Minnie and very loud?! haha

    Our cat is the later.

    I digress, Yep, I rekon if we can simulate a key press, it should be a sinch from there.

    Cheers
    J

  12. #12
    Join Date
    Aug 2005
    Posts
    42

    Default

    Using easyhid is not that bad.

    Basic steps are run up the easyhid program and set the basics like Pid/Vid and buffer size for bytes you want to send back and forth from PC to Pic.

    It then by default creates two folders under a top level folder called USBProject

    The first folder is PICBasicPRO

    This contains the basic code you will need for your pic chip and the include files, do not rename or move this directory once it is created, work from this location.
    It will create a example PBP file called USBProject.pbp

    So open this up and the main program loop you are interested in is:


    '****************************************
    usbinit ' initialise USB...

    ProgramStart:

    gosub DoUSBIn
    gosub DoUSBOut

    goto ProgramStart
    '*****************************************

    For receving and sending data you just need these two routines.

    If you wanted to receive say 10 bytes then it does matter that your buffer is set to 64 bytes because that is the packet size that is going to be received from the PC anyway, so do not worry about this. Just tell it to jump off to that routine and as soon as data is received it will come back from that routine with the usbbuffer(0) to usbbuffer(63) filled as such.
    So if your PC sent 10 bytes then the variables usbbuffer(0-9) will hold those 10 bytes, if your pc sent 20 bytes then usbbuffer(0-19) will hold those bytes.

    So say you wanted to send 4bytes from your PC to the Pic and then the Pic displays it on the LCD, you could do this:

    '*******************************************
    usbinit ' initialise USB...
    ProgramStart:

    gosub DoUSBIn

    LCDOUT $FE,1,usbbuffer(0),usbbuffer(1),usbbuffer(2),usbbu ffer(3)

    goto ProgramStart
    '*******************************************

    If you then wanted to send say two bytes back to the PC to say you received them, then just load up your usbbuffer variables and jump to the routine gosub DoUSBOut.

    So to send "OK" back to the PC add this to your code.

    '*******************************************
    usbinit ' initialise USB...
    ProgramStart:

    gosub DoUSBIn

    LCDOUT $FE,1,usbbuffer(0),usbbuffer(1),usbbuffer(2),usbbu ffer(3)

    usbbuffer(0)=79 'Ascii value for O
    usbbuffer(1)=75 'Ascii value for K
    gosub DoUSBOut

    goto ProgramStart
    '*******************************************

    And thats ya simple pic code to receive and send bytes back and forth. Now you know how to get your bytes in and out, you can use them just like any other variables.

    The Second Folder it creates is dependent on what you are developing in, I play with Visual Basic so it created me a Folder called VisualBasic and inside here is sample code and the files you will need, I aslo copy the file mcHID.dll from C:\Program Files\Mecanique\EasyHID\ into this folder as well to play safe.

    So again for the VB side of things to send data out to the Pic via the USB Port you simply load up the Bufferout(1-64) you always send Bufferout(0)=0 as a header.

    So to send 4 bytes from Visual Basic just use the following:

    '*******************************************

    BufferOut(0) = 0
    BufferOut(1) = 68 'Ascii Value for D
    BufferOut(2) = 65 'Ascii Value for A
    BufferOut(3) = 84 'Ascii Value for T
    BufferOut(4) = 65 'Ascii Value for A
    hidWriteEx VendorID, ProductID, BufferOut(0)

    '*******************************************

    To receive Data in VB, the sample code basically sits there and waits for a recieve event to happen and when it does, it jumps off to a routine called OnRead and populates the variables BufferIn(1-64).

    So you could do a simple loop to keep checking the value of BufferIn(1) and BufferIn(2) until they receive the "OK\2 back.
    To see it in action set up a object called Text1.Text on your VB Form and then in your code add the following:
    '*******************************************

    Text1.Text = Chr(Val(BufferIn(1)))
    Text1.Text = Text9.Text & Chr(Val(BufferIn(2)))

    '*******************************************

    Hope this helps.

    Regards Sean.
    Last edited by sean-h; - 6th February 2006 at 20:54.
    *********************
    http://www.cncdudez.co.uk
    *********************

  13. #13
    Join Date
    Jan 2005
    Location
    Montreal, Quebec, Canada
    Posts
    2,588

    Default

    Thanks Sean, but like I posted back on Jan 10th that's not quite it. There's gotta be more required on the PC side. That code just doesn't sit in a text file, it has to be compiled or something. That's where all the USB threads come up short. Either everyone is assuming a whole bunch about what we 'should' know, or I'm too dense and just not getting something obvious...

    Robert
    My Creality Ender 3 S1 Plus is a giant paperweight that can't even be used as a boat anchor, cause I'd be fined for polluting our waterways with electronic devices.

    Not as dumb as yesterday, but stupider than tomorrow!

  14. #14
    Join Date
    Aug 2005
    Posts
    42

    Default

    Hi Robert

    When you say more PC side, yep you are correct, you will need a copy of Visual Basic for the code example above and at least know the basics of creating a windows application.

    There are a number of different development packages out there for writing your own windows applications, such as Visual Basic, Delphi, Visual C++ or the newer .NET .

    The sample code created by easy HID is for the first 3 development platforms listed bove.

    So first you need to get a development package, then you need to learn how to use it. Visual Basic to me has always been the easiest, have played with Delphi a little.

    When you have your development package you can then start learning how to write your own applications, and there are literaly thousands of development websites where other guys have already came across any problems that you will encounter and also would of posted sample code to help you out.

    Regards

    Sean.

    Quote Originally Posted by Demon
    Thanks Sean, but like I posted back on Jan 10th that's not quite it. There's gotta be more required on the PC side. That code just doesn't sit in a text file, it has to be compiled or something. That's where all the USB threads come up short. Either everyone is assuming a whole bunch about what we 'should' know, or I'm too dense and just not getting something obvious...

    Robert
    Last edited by Demon; - 4th October 2016 at 17:39.
    *********************
    http://www.cncdudez.co.uk
    *********************

  15. #15
    Join Date
    Jan 2005
    Location
    Montreal, Quebec, Canada
    Posts
    2,588

    Default

    Thanks Sean, that explains it more.

    I'm also very interested in VB, I have VB Express installed already. What's the big difference between Visual Basic Express and uh, the 'regular' version?

    I keep seeing that .NET mentionned, but I have no idea what that implies. I don't want my application to be dependant on having .NET installed on a PC. I'm interested in a basic 'keyboard' type application that can be connected to a PC with minimal requirements.

    Is VB Express the proper tool for me?

    Robert
    My Creality Ender 3 S1 Plus is a giant paperweight that can't even be used as a boat anchor, cause I'd be fined for polluting our waterways with electronic devices.

    Not as dumb as yesterday, but stupider than tomorrow!

  16. #16
    Join Date
    Aug 2005
    Posts
    42

    Default

    Visual Basic Express is the cutdown version of VB.net or Visual basic 2005 as it is now called, I even struggle to keep up with the latest versions must admit, good old Mircosoft!!

    VB5 and VB6 have been very popular and used alot over the years, but as life moves on, like any other develpment tools they get upgraded to suit the latest operating systems.

    I have tried to migrate a few of my applications to Visual basic 2005 from VB6 but it falls over on a few bits of code and so personaly I stick to VB6 for now, but no dought I will have to find time and force myself to look at VB2005 in more depth one day.

    I have no idea what they have taken out of VB Express 2005 compared to what is in the full version.
    You are best to check the Microsoft site.

    Years ago VB6 came in several flavours and the low end version release did not include the Comm components, so for example you could not write applications that used the serial port, without either upgrading or getting the extra components from somewhere else.

    I know the sample code that gets produced with EasyHid is for VB5 but it works fine in VB6. It did not work in Visual Basic 2005 for me when trying to do a quick conversion, but I am sure with a bit of time and tweaking it hopefully will.

    Regards

    Sean.
    *********************
    http://www.cncdudez.co.uk
    *********************

  17. #17
    Join Date
    Jan 2005
    Location
    Montreal, Quebec, Canada
    Posts
    2,588

    Default

    Hmm, HIDmaker came in today. I checked through the user's manual and it says the code is made for VB6.

    So now I'm not really sure what I should do: risk that what I will develop will work on VBexpress, or buy VB6 (investing in something else that is already obsolete, which may very well be dropped by HIDmaker soon).

    VBexpress was free...

    Robert
    My Creality Ender 3 S1 Plus is a giant paperweight that can't even be used as a boat anchor, cause I'd be fined for polluting our waterways with electronic devices.

    Not as dumb as yesterday, but stupider than tomorrow!

  18. #18
    Join Date
    Oct 2005
    Posts
    28

    Default

    VB.net or whatever you want to call it is no doubt the next generation, but VB6 is still around and is very robust.I do quite a bit of work with it and I find it has very few shortcomings for what I do. Programs compile and run seamlessly on all versions of Windows from 98 to XP pro, NT and 2000, Have not tried it on 64 bit Windows as of yet.

    If you can get VB6 for a reasonable price I wouldn't hesitate to get started with it. Make sure you patch it with the latest service pack (6).

  19. #19
    Join Date
    Jan 2005
    Location
    Montreal, Quebec, Canada
    Posts
    2,588

    Default

    I found this auction on EBay, but something is fishy:

    http://cgi.ebay.ca/ws/eBayISAPI.dll?...tem=5865411973

    The price is WAAAAAY too good to be true compared to other auctions for VB6, and the PRO version too. Does that look like it's a copy? Since when are cd keys contained on the disk? Usually with MicroSoft they are on stickers.

    Robert
    My Creality Ender 3 S1 Plus is a giant paperweight that can't even be used as a boat anchor, cause I'd be fined for polluting our waterways with electronic devices.

    Not as dumb as yesterday, but stupider than tomorrow!

  20. #20
    Join Date
    May 2005
    Posts
    3

    Default

    hi

    dont buy this item , read the feedback of the seller and you will see that the seller has a bad reps.

    best regards,
    ferds

  21. #21
    Join Date
    Aug 2005
    Location
    Los angeles
    Posts
    39

    Default

    Quote Originally Posted by sean-h
    Using easyhid is not that bad.

    Basic steps are run up the easyhid program and set the basics like Pid/Vid and buffer size for bytes you want to send back and forth from PC to Pic.

    It then by default creates two folders under a top level folder called USBProject

    The first folder is PICBasicPRO

    This contains the basic code you will need for your pic chip and the include files, do not rename or move this directory once it is created, work from this location.
    It will create a example PBP file called USBProject.pbp

    So open this up and the main program loop you are interested in is:


    '****************************************
    usbinit ' initialise USB...

    ProgramStart:

    gosub DoUSBIn
    gosub DoUSBOut

    goto ProgramStart
    '*****************************************

    For receving and sending data you just need these two routines.

    If you wanted to receive say 10 bytes then it does matter that your buffer is set to 64 bytes because that is the packet size that is going to be received from the PC anyway, so do not worry about this. Just tell it to jump off to that routine and as soon as data is received it will come back from that routine with the usbbuffer(0) to usbbuffer(63) filled as such.
    So if your PC sent 10 bytes then the variables usbbuffer(0-9) will hold those 10 bytes, if your pc sent 20 bytes then usbbuffer(0-19) will hold those bytes.

    So say you wanted to send 4bytes from your PC to the Pic and then the Pic displays it on the LCD, you could do this:

    '*******************************************
    usbinit ' initialise USB...
    ProgramStart:

    gosub DoUSBIn

    LCDOUT $FE,1,usbbuffer(0),usbbuffer(1),usbbuffer(2),usbbu ffer(3)

    goto ProgramStart
    '*******************************************

    If you then wanted to send say two bytes back to the PC to say you received them, then just load up your usbbuffer variables and jump to the routine gosub DoUSBOut.

    So to send "OK" back to the PC add this to your code.

    '*******************************************
    usbinit ' initialise USB...
    ProgramStart:

    gosub DoUSBIn

    LCDOUT $FE,1,usbbuffer(0),usbbuffer(1),usbbuffer(2),usbbu ffer(3)

    usbbuffer(0)=79 'Ascii value for O
    usbbuffer(1)=75 'Ascii value for K
    gosub DoUSBOut

    goto ProgramStart
    '*******************************************

    And thats ya simple pic code to receive and send bytes back and forth. Now you know how to get your bytes in and out, you can use them just like any other variables.

    The Second Folder it creates is dependent on what you are developing in, I play with Visual Basic so it created me a Folder called VisualBasic and inside here is sample code and the files you will need, I aslo copy the file mcHID.dll from C:\Program Files\Mecanique\EasyHID\ into this folder as well to play safe.

    So again for the VB side of things to send data out to the Pic via the USB Port you simply load up the Bufferout(1-64) you always send Bufferout(0)=0 as a header.

    So to send 4 bytes from Visual Basic just use the following:

    '*******************************************

    BufferOut(0) = 0
    BufferOut(1) = 68 'Ascii Value for D
    BufferOut(2) = 65 'Ascii Value for A
    BufferOut(3) = 84 'Ascii Value for T
    BufferOut(4) = 65 'Ascii Value for A
    hidWriteEx VendorID, ProductID, BufferOut(0)

    '*******************************************

    To receive Data in VB, the sample code basically sits there and waits for a recieve event to happen and when it does, it jumps off to a routine called OnRead and populates the variables BufferIn(1-64).

    So you could do a simple loop to keep checking the value of BufferIn(1) and BufferIn(2) until they receive the "OK\2 back.
    To see it in action set up a object called Text1.Text on your VB Form and then in your code add the following:
    '*******************************************

    Text1.Text = Chr(Val(BufferIn(1)))
    Text1.Text = Text9.Text & Chr(Val(BufferIn(2)))

    '*******************************************

    Hope this helps.

    Regards Sean.


    Hi Sean,

    If i want to write a byte to the microncontroller can i say BufferOut(2)=%10011111 (" for example)
    In your code above:
    BufferOut(1) = 68 'Ascii Value for D
    BufferOut(2) = 65 'Ascii Value for A
    BufferOut(3) = 84 'Ascii Value for T
    BufferOut(4) = 65 'Ascii Value for A
    hidWriteEx VendorID, ProductID, BufferOut(0)
    and to send the info,
    are you sending BufferOut(2), BufferOut(3)....and so on?
    if i wanna send the values in bufferout(2) would the code look like this below?
    hidWriteEx(VendorID, ProductID, BufferOut(0),BufferOut(2) )


    Thanks much
    Last edited by rocky79; - 21st February 2006 at 04:55.

  22. #22
    Join Date
    Aug 2005
    Posts
    42

    Default

    Hi rocky

    When you call hidWriteEx(VendorID, ProductID, BufferOut(0)), what you are doing is sending a packet as such out to the USB port.
    So you can define the length of that buffer in your VB vode at the top of the code:
    Private Const BufferInSize = 64
    Private Const BufferOutSize = 64

    and in your PBP code:

    USBBufferSizeMax con 64 ' maximum buffer size
    USBBufferSizeTX con 64 ' input
    USBBufferSizeRX con 64 ' output

    I think min is 8 bytes and max 64.

    So just change these variables to cut down the amount of bytes you want to send.

    BufferOut(0) is a report ID and data starts at BufferOut(1)

    Regards

    Sean.




    Quote Originally Posted by rocky79
    Hi Sean,

    If i want to write a byte to the microncontroller can i say BufferOut(2)=%10011111 (" for example)
    In your code above:
    BufferOut(1) = 68 'Ascii Value for D
    BufferOut(2) = 65 'Ascii Value for A
    BufferOut(3) = 84 'Ascii Value for T
    BufferOut(4) = 65 'Ascii Value for A
    hidWriteEx VendorID, ProductID, BufferOut(0)
    and to send the info,
    are you sending BufferOut(2), BufferOut(3)....and so on?
    if i wanna send the values in bufferout(2) would the code look like this below?
    hidWriteEx(VendorID, ProductID, BufferOut(0),BufferOut(2) )


    Thanks much
    *********************
    http://www.cncdudez.co.uk
    *********************

  23. #23
    Join Date
    Aug 2005
    Posts
    42

    Default

    Hi Rocky

    Sorry forgot to answer this bit

    Quote Originally Posted by rocky79
    If i want to write a byte to the microncontroller can i say BufferOut(2)=%10011111 (" for example)
    In VB you will need to convert your Binary value to Decimal and then load your Bufferout(2) variable.

    Here is a nice feunction example for Visual Basic

    http://www.vb-helper.com/howto_decimal_to_binary.html

    Regards

    Sean.
    *********************
    http://www.cncdudez.co.uk
    *********************

  24. #24
    Join Date
    Aug 2005
    Location
    Los angeles
    Posts
    39

    Default

    Thanks Sean for the explanation, but there is still something i don't understand.
    Question#1:
    On the microcontroller side: How can i send the results of a 12 bits A2d Signal from the microcontroller to visual basic.net since USBBufferout is defined as a byte.
    Question#2
    on the Visual basic.net side when your ready to send data back to the controller:
    do you just include all the 64 bufferout bufferout(1) bufferout(2)....bufferout(63)
    HidWriteEx, VendorId, ProductID, BufferOut(0), BufferOut(1)....BufferOut(63)
    Or is there a shorter way to do it.

    Thanks Sean

  25. #25
    Join Date
    Aug 2005
    Location
    Los angeles
    Posts
    39

    Default One more question

    Question#2:
    On the visual studio.net side: In this code below that i got from EasyHid how do you fill in where it says: put your code here?
    I would appreciate Any examples:

    Public Sub OnPlugged(ByVal pHandle As Integer)
    If hidGetVendorID(pHandle) = VendorID And hidGetProductID(pHandle) = ProductID Then
    ' ** YOUR CODE HERE **
    End If
    End Sub

    '************************************************* ****************
    ' a HID device has been unplugged...
    '************************************************* ****************
    Public Sub OnUnplugged(ByVal pHandle As Integer)
    If hidGetVendorID(pHandle) = VendorID And hidGetProductID(pHandle) = ProductID Then
    ' ** YOUR CODE HERE **
    End If
    End Sub

    '************************************************* ****************
    ' controller changed notification - called
    ' after ALL HID devices are plugged or unplugged
    '************************************************* ****************
    Public Sub OnChanged()
    Dim DeviceHandle As Integer

    ' get the handle of the device we are interested in, then set
    ' its read notify flag to true - this ensures you get a read
    ' notification message when there is some data to read...
    DeviceHandle = hidGetHandle(VendorID, ProductID)
    hidSetReadNotify(DeviceHandle, True)
    End Sub

    '************************************************* ****************
    ' on read event...
    '************************************************* ****************
    Public Sub OnRead(ByVal pHandle As Integer)

    ' read the data (don't forget, pass the whole array)...
    If hidRead(pHandle, BufferIn(0)) Then
    ' ** YOUR CODE HERE **
    ' first byte is the report ID, e.g. BufferIn(0)
    ' the other bytes are the data from the microcontrolller...
    End If
    End Sub

    '************************************************* ****************
    ' this is how you write some data...
    '************************************************* ****************
    Public Sub WriteSomeData()
    BufferOut(0) = 0 ' first byte is always the report ID
    BufferOut(1) = 10 ' first data item, etc etc

    ' write the data (don't forget, pass the whole array)...
    hidWriteEx(VendorID, ProductID, BufferOut(0))
    End Sub
    End Class

  26. #26
    Join Date
    Aug 2005
    Posts
    42

    Default

    Quote Originally Posted by rocky79
    Thanks Sean for the explanation, but there is still something i don't understand.
    Question#1:
    On the microcontroller side: How can i send the results of a 12 bits A2d Signal from the microcontroller to visual basic.net since USBBufferout is defined as a byte.
    A byte is only 8 bits so you will have to store your result in a variable defined as a Word (16bits)
    Now you will need to split the word and send the highbyte and lowbyte out as two bytes.
    In your VB program you will then need to take the 2 bytes and joing them back as a word.

    Quote Originally Posted by rocky79
    Question#2
    on the Visual basic.net side when your ready to send data back to the controller:
    do you just include all the 64 bufferout bufferout(1) bufferout(2)....bufferout(63)
    HidWriteEx, VendorId, ProductID, BufferOut(0), BufferOut(1)....BufferOut(63)
    Or is there a shorter way to do it.
    Re-read what I wrote above regards data being sent from VB. when you call HidWriteEx, VendorId, ProductID, BufferOut(0) you are telling the USB port to send all the data in the BufferOut.
    So if you have defined your BufferOut as being 64 bytes long then when you call HidWriteEx it will send all 64 bytes, if you defined your BufferOut as being 8bytes long then it will send 8 bytes.

    So simply load all the buffers up with the bytes you want and call HidWriteEx when you want to send.

    Regards

    Sean.
    *********************
    http://www.cncdudez.co.uk
    *********************

  27. #27
    Join Date
    Aug 2005
    Posts
    42

    Default

    Hi Rocky

    I got compile errors in VB2005 so sticking with VB6, does it compile okay with ,net your end?

    The two main routines to worry about and get you going are receive and transmit Data Routines.

    Please scroll up on this post as I have given some VB examples already on what you have just asked.

    Regards

    Sean.
    *********************
    http://www.cncdudez.co.uk
    *********************

  28. #28
    Join Date
    Aug 2005
    Location
    Los angeles
    Posts
    39

    Default

    sean,
    Sorry for the late reply, my computer crashed so i was crippled for the past week. I will try your code as soon as i get things back in place.
    thank you much

  29. #29
    scorpion's Avatar
    scorpion Guest

    Default got it working.... kindof

    Hi
    I was wondering what I might be doing wrong...
    I used HIDMaker to make an input device. Im using the standard HID descriptors, so I am not writting any PC side software.
    Everything is working well, but I have two analog inputs. They are both set to words so i can use the 10bit a/d. but when I look at the input on the computer its only 8 bit. and if i right justify the results i am only getting a change of 3.... which is what i would expect if it was only sending 8 bits.

    hrm........
    if i do some math (invert one input) i can offset the output to 10 bits, so is my a/d conversion 8 bits?

    I have used 10 bit inputs on other projects with other pics and I have never ran into this problem before.

    I have everything set up.

    DEFINE adc_bits 10
    TRISA = 255
    TRISB = 255
    ADCON0 = 0
    ADCON1 = %00001101

    does anyone have any idea what im doing wrong?

  30. #30
    Join Date
    Jan 2006
    Location
    Toronto
    Posts
    109

    Default

    USB can only send bytes not words so divide your word into 2 bytes to send to the pc (Byte.HiByte & Byte.LowByte), on the PC side simply convert these 2 bytes back to a Long variable and everything should be fine.

    I hope this helps.

  31. #31
    scorpion's Avatar
    scorpion Guest

    Default

    I wish I could say it did help
    thank you though.

    I set the test data to 1000 and 580 and sent it to the pc and i received 1000 and 580.
    I think its the number from the ADC that is 8 bit.

    thanks for any help

  32. #32
    scorpion's Avatar
    scorpion Guest

    Default

    its working, but im still not sure why it wasnt working
    what I did was:
    variable.highbyte = adresh
    variable.lowbyte = adresl

    again. I dont know why, but I was only an 8 bit result from the adc.

    Im glad its working and Ill move along, but does anyone know why my
    adcin 0, variable
    didnt work?

    Other than that snag. my project went well.
    I liked hidmaker. It took me alot longer than the hour or whatever Dr. Bob says it should take, but most of my time was deciding which descriptors to use.

  33. #33
    Join Date
    Aug 2005
    Posts
    42

    Default

    Glad you got it working Scorpion, it is not too bad when you have all the elements in place.

    Regards

    Sean.
    *********************
    http://www.cncdudez.co.uk
    *********************

  34. #34
    Join Date
    Aug 2005
    Location
    Los angeles
    Posts
    39

    Unhappy Vb6 to Vb.net

    I am using easyHID sofware to generate a Visual basic code 6.0. I have the visual basic .net installed. So when i copy the file from vb.6 to vb.net , Vb.net upgrades the file to the .net configuration.Except for one thing that gave me an error:it's the upgrade warning about adding a delegate.

    Public Function ConnectToHID(ByVal pHostWin As Integer) As Boolean
    FWinHandle = pHostWin
    ConnectToHID = hidConnect(FWinHandle)
    'UPGRADE_WARNING: Add a delegate for AddressOf WinProc Click for more: 'ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="vbup1048"'
    FPrevWinProc = SetWindowLong(FWinHandle, GWL_WNDPROC, AddressOf WinProc)
    End Function

    I couldn't figure out how to fix it, Any idea?? here is what the help menu suggested :

    In Visual Basic 6.0, the AddressOf operator was used to pass the address in memory of a function to an API procedure that takes a function pointer as an argument.
    In Visual Basic .NET, the AddressOf operator must be used with a Delegate type. Delegates allow Visual Basic .NET to maintain a pointer to a function even if the function itself has already been garbage-collected.
    The following example illustrates how a callback function that uses AddressOf is upgraded:

    ' Visual Basic 6.0
    Declare Function SetWindowLong Lib "USER32.DLL" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal attr As Long, ByVal lVal As Long) As Long
    Sub SubClassWindow(ByVal hwnd As Long)
    If PrevProcPtr = 0 Then
    PrevProcPtr = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf SubClassProc)
    End If
    End Sub

    ' After upgrade to Visual Basic .NET
    Declare Function SetWindowLong Lib "USER32.DLL" Alias "SetWindowLongA"(ByVal hwnd As Integer, ByVal attr As Integer, ByVal lVal As Integer) As Integer
    Sub SubClassWindow(ByVal hwnd As Integer)
    If PrevProcPtr = 0 Then
    ' UPGRADE_WARNING: Add a delegate for AddressOf SubClassProc.
    PrevProcPtr = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf SubClassProc)
    End If
    End Sub
    What to do next

    Add a delegate for the AddressOf operator, and change the parameter of the function declaration to the Delegate type:
    Delegate Function SubClassProcDelegate(ByVal hwnd As Integer, ByVal msg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer
    Declare Function SetWindowLong Lib "USER32.DLL" Alias "SetWindowLongA" (ByVal hwnd As Integer, ByVal attr As Integer, ByVal lVal As SubClassProcDelegate) As Integer
    Sub SubClassWindow(ByVal hwnd As Integer)
    If PrevProcPtr = 0 Then
    PrevProcPtr = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf SubClassProc)
    End If
    End Sub


    Thank you in advance
    Last edited by rocky79; - 3rd March 2006 at 08:24.

  35. #35
    lentz's Avatar
    lentz Guest

    Default

    Hi, my name is Davide. i'm start to program the pic18f4550.
    This topic is very interesting!!

    Usually i program pic16c765 and i use VB6 and the HIDcomm component for comunicate by USB with my pic.
    Now, my question is: Have you got a simple example for turn on a led with pic18f4550 by vb6?

    Thank for your time.

    Regard, Davide

  36. #36
    Join Date
    Aug 2005
    Location
    Los angeles
    Posts
    39

    Default

    Quote Originally Posted by sean-h
    Hi Rocky

    I got compile errors in VB2005 so sticking with VB6, does it compile okay with ,net your end?

    The two main routines to worry about and get you going are receive and transmit Data Routines.

    Please scroll up on this post as I have given some VB examples already on what you have just asked.

    Regards

    Sean.
    Sean,
    I am just wondering if you know any good graphical widgets for Visual basic 6.0. Like meters, gauges, level indicators and so forth.

    Thanks

  37. #37
    Join Date
    Sep 2004
    Location
    montreal, canada
    Posts
    6,898

    Default

    http://www.picbasic.co.uk/forum/show...light=softwire

    Seems to have change now.. maybe there's still some free version for VB6 somewhere

    Ask them
    Last edited by mister_e; - 16th March 2006 at 04:40.
    Steve

    It's not a bug, it's a random feature.
    There's no problem, only learning opportunities.

  38. #38
    Join Date
    Mar 2006
    Location
    Gothenburgh, Sweden
    Posts
    18

    Default

    Hi.
    Im using EasyHID and a 18f4550 to communicate with VB6.
    I use MicroCode Studio Plus and PicBasic 2.46. I download my programs using Microchip USB bootloader. And this works just fine.
    Now I want to write a program that counts how long time an input pin is activated. Typical time will be in range form about 1ms - 120ms.
    Normaly I would use "Pulsin" but what I understand the USB commands must be polled every 1ms or so. Is there another way to solve it in Basic?
    Maybe to use the timers in 4550? If so, how shall that basic code be written?
    Im not skilled enough to write the code in asm so it would be great if it is possible to do it in PicBasic.

    Thanks in advance.

    /Stefan.

  39. #39
    Join Date
    Oct 2003
    Location
    Australia
    Posts
    257

    Lightbulb

    Just revisiting this topic again....

    It seems that HID is good enough to program and set up the PIC for USB use, but one really needs to generate a VB program to interface the PC to the USB device (aka PIC device)

    I don't have VB, and was considering downloading the 60MB VB express from Microsoft.

    Does anybody have experience with VB Express?

    Does it have COMM components included? Or can you get them from a 3rd party? Prefer if they were free.... hahaha

    I'm really interested in doing a bit of serial communications between the PIC(4550) and PC over the USB link, as most PC nowdays don't even come with Serial Com ports, USB interfacing is gonning to be the way of the future.

    I don't want to go down the path of using a pre built usb 2 serial converter when a USB pic should be good enough, right?

  40. #40
    Join Date
    Sep 2004
    Location
    montreal, canada
    Posts
    6,898

    Default

    interfacing a PIC to a pc is still easy.. the main problem is still that you have to keep the connection by send data to PC every 10mSec or so. Not so much problem but in some case, it's a pain. some conventionnal PIC and a RS232 to USB ic is still cheap and save the day when timing is critical.

    But i'm still new in USB, there's so much things to learn before be comfortable with everything. Yeah it's more complicated than just USBIN, USBOUT, USBINIT, and USBSERVICE.. Jan Axelson's book is more than enough.

    I use Visual C++, Visual Basic 6 and , beurk Delphi, so i'd never use the VB Express as now, it should have what you need. Case not, i guess you can use the API or DLL (i don't remind) of HID maker and play 'round it.
    Steve

    It's not a bug, it's a random feature.
    There's no problem, only learning opportunities.

Similar Threads

  1. Simple USB Comms Problem
    By awmt102 in forum mel PIC BASIC Pro
    Replies: 0
    Last Post: - 6th January 2010, 21:17
  2. EasyHID max usb buffer size
    By jizyjuice in forum USB
    Replies: 4
    Last Post: - 29th November 2007, 06:12
  3. Speed of USB EasyHID and Time problem
    By sjohansson in forum USB
    Replies: 10
    Last Post: - 18th January 2007, 23:21
  4. USB and EasyHID Problems
    By Rob in forum USB
    Replies: 8
    Last Post: - 6th January 2007, 19:19
  5. USB PIC without USB Connection
    By Tissy in forum mel PIC BASIC Pro
    Replies: 9
    Last Post: - 26th December 2005, 18:39

Members who have read this thread : 4

You do not have permission to view the list of names.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts