EasyHID and USB for Newbies??


Closed Thread
Results 1 to 40 of 69

Hybrid View

  1. #1
    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

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

    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!

  3. #3
    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

  4. #4
    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 19:54.
    *********************
    http://www.cncdudez.co.uk
    *********************

  5. #5
    Join Date
    Jan 2005
    Location
    Montreal, Quebec, Canada
    Posts
    3,172

    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!

  6. #6
    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 16:39.
    *********************
    http://www.cncdudez.co.uk
    *********************

  7. #7
    Join Date
    Jan 2005
    Location
    Montreal, Quebec, Canada
    Posts
    3,172

    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!

  8. #8
    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 03:55.

  9. #9
    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
    *********************

  10. #10
    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

  11. #11
    Join Date
    Jan 2005
    Location
    Montreal, Quebec, Canada
    Posts
    3,172

    Default

    Quote Originally Posted by sean-h
    Hi rocky
    ...
    USBBufferSizeMax con 64 ' maximum buffer size
    USBBufferSizeTX con 64 ' input
    USBBufferSizeRX con 64 ' output

    I think min is 8 bytes and max 64.
    ...
    Sean.
    Nope, 1 to 64 bytes for both input and output buffers according to EasyHID help files under Configuration Details.

    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!

  12. #12
    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
    *********************

  13. #13
    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

  14. #14
    Join Date
    Jan 2005
    Location
    Montreal, Quebec, Canada
    Posts
    3,172

    Default

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

    ...

    If you wanted to receive say 10 bytes ... 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.

    ...

    Hope this helps.

    Regards Sean.

    (yup, I saw the correction in another post about byte 0 containing the endpoint and the data being in bytes 1 to 10.)


    So if I understand this properly, we don't have to worry about any of the USB registers when we receive data. I assume this is all done by the generated assembler code?

    The important thing is for us to know the exact length of our transferred data and that's it. We don't need any interrupt either, the USBIN command will execute until all the bytes are received (returning to the label DoUSBIn until complete).

    That leaves one thing, how do we handle an error? Are we to assume everything will always work? Are there flags provided by the assembler routines? Or are we supposed to use the USB error registors described in the PIC datasheet?

    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!

Similar Threads

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

Members who have read this thread : 1

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