PIC18F2550 USB HID IO

PIC18F2550 USB HID IOAfter completing the PIC18F2550 USB HID Oscilloscope, I decided to expand upon the project and firmware to include multiple analog inputs and digital i/o. The base firmware for this project is the same as the PIC18F2550 USB HID Oscilloscope‘s; however, more features have been added that allow the user to access the PIC18F2550′s Port B for digital i/o. In addition, the firmware now allows the user to access the AN0-AN4 analog pins for monitoring and data acquisition.

Full Circuit
PIC18F2550 USB HID IOThe source and firmware for the circuit can be found at the bottom of the page. Each section of the circuit is labeled in the schematic. All of the sections and their components are described and discussed below. The part numbers for the components are linked to websites for data and more information when available.

Analog Inputs
PIC18F2550 USB HID IO Analog InputsThe 5 analog inputs are connected to pins A0, A1, A2, A3, and A5, which are configured to be analog inputs. Please note that “The source impedance affects the offset voltage at the analog input (due to pin leakage current). The maximum recommended impedance for analog sources is 2.5 kΩ.” (PIC18F2550, p.260)

Digital Inputs/Outputs
PIC18F2550 USB HID IO Analog InputsThe digital inputs and outputs share Port B. Please note that:
Maximum output current sunk by any I/O pin = 25 mA
Maximum output current sourced by any I/O pin = 25 mA
Maximum current sunk by all ports = 200 mA
Maximum current sourced by all ports = 200 mA

Microcontroller
PIC18F2550 USB HID IO MicrocontrollerThe microcontroller used is a Microchip PIC18F2550. I modified the PIC18F2550 Tiny PIC Bootloader assembly file so I could use a 20MHz crystal/resonator at 115,200 baud (the modified bootloader can be found at the bottom of the page). The PIC18F2550 runs at 48MHz using the internal PLL. R1 is a pull-up resistor necessary for operation. C1 is a stabilizing capacitor that is used for the onboard USB voltage regulator, which is used in this project. The component marked ‘RES’ is a 20MHz resonator.

RS232 Level Converter
PIC18F2550 USB HID Oscilloscope RS232 Level ConverterThe microcontroller USART pins need to be connected to a RS-232 Level Converter to connect to a PC for firmware updates using the Tiny PIC Bootloader. Otherwise, after initial programming they can be left disconnected.

USB I/O
PIC18F2550 USB HID IO USB I/OThe PIC is connected to the computer through a USB port and is bus-powered.

Source and Firmware
The PIC must initially programmed with the ‘SAC_tinybld18F2550usb _20MHz_115200_48MHz’ hex file to program the bootloader on the PIC. Then, using Tiny PIC Bootloader, the hex file can be placed on the chip using the Tiny PIC Bootloader frontend with ’12h 34h 56h 78h 90h’ in the ‘List of codes to send first:’ in the ‘Options’ menu. Please feel free to contact me if you have any problems.

Update (November 15, 2006)
Here is the firmware without the bootloader code:

Update 2 (December 18, 2006)
Here are untested PIC18F4550 firmwares:

Responses to “PIC18F2550 USB HID IO”

  1. Carlos Says:

    Hi
    Looks a very nice code.
    So could you send me the full code for this i/o in C for Pic18f4550 so i can study as I am learning PICs, but without boot loader .
    Thanks
    Carlos Palma

    ReplyReply
  2. Steve Says:

    Ask and you shall receive! :-) I’ve appended the post with the bootloader-less firmware source code and compiled hex file.

    ReplyReply
  3. Carlos Says:

    Hi steve
    Thanks for the code but still couldnt put it working.I use de MCC18 compiler and i get errors.
    I think still files missing. So can you help me sending me all the files in a zip mode.
    Thanks a lot
    Carlos Palma

    ReplyReply
  4. Maurizio Says:

    Hi Steve,
    with which kind of compiler have you build your firmware?
    Thanks, Maurizio.

    ReplyReply
  5. Carlos Says:

    Hi steve
    At least i can make it working, just change the compiler.
    But stops a lot of times i will study it better than i will tell you about my evolution.
    Any away have you some other code than make the ADC read more in real time, i mean faster with out stoping.
    TKS
    Carlos Palma

    ReplyReply
  6. Maurizio Says:

    Hi Maurizio.
    I have used de CCS PCWH compiler and works but i have to coment 3 lines of code. The VB6 stops lot of times i dont know why yet.

    ReplyReply
  7. Steve Says:

    Carlos: I use CCS PCWH 3.249. The compiler provides a number of built-in USB functions and header files, which are likely the files that you are missing. Due to copyright restrictions I cannot share the source code for these header files. I look forward to hearing how you modified the source code. The PIC captures in storage mode (to RAM) to facilitate fast and reliable measurements. You can do real-time measurements by repeatedly sending the usbReadADC HID instruction.

    Maurizio: As I said to Carlos, I use CCS PCWH 3.249. Which three lines of code do you have to comment out? For non-bootloader operation I comment out:
    #build(reset=0×1, interrupt=0×8) // Necessary for Bootloader
    #ORG 0x0F00,0x0FFF {} // Necessary for Bootloader
    Also, if you could send me a message (http://www.semifluid.com/?page_id=6) with the errors that VB6 stops on, I can try to help.

    ReplyReply
  8. Maurizio Says:

    Hi Steve,
    thanks for reply.
    I’m trying to program the host with C# language. I will contact you as soon as I have some good results.

    ReplyReply
  9. Jeff Says:

    #include //Microchip 18Fxx5x hardware layer for usb.c

    Where can I find this header file in the source code you had provided?

    I’m trying to search everywhere but I still couldn’t find this header file. Please help me and guide me along.

    Thanks.

    Jeff

    ReplyReply
  10. Steve Says:

    The includes are included with the CCS libraries. I can’t send or post the files because they are copyrighted. Sorry, buy you will have to compile the source code with a CCS C compiler to take advantage of the USB includes.

    ReplyReply
  11. YJ Says:

    can u compile the codes for PIC18F4550 and upload the hex file ?
    i want to try it on my picdem fs usb board.
    i don have ccs compiler, im using Microchip C18.
    thanks !

    ReplyReply
  12. Rasmus Says:

    I’m doing a similar project using the PIC18F4550. I already got the hardware up and running (using the Microchip C18-compiler and the examples from microchip.com). I don’t have access to the CSS-compiler, but I’ll try to port your code to C18. If you have some hints or if you could post a 18F4550-version of the hex I’ll be grateful. I’ll get back to you all, when I have a working sample.

    ReplyReply
  13. Steve Says:

    YJ and Rasmus – I’ve attached untested PIC18F4550 code to the post. Please let me know if it works! (I don’t have a PIC18F4550 on-hand to test)

    ReplyReply
  14. Rasmus Says:

    Thank you for doing a 18f4550-version. As far as I can see it works! I used the no-bootload-hex-version.
    I tried with the oscilloscope software as well and it’s all fine. very nice actually :)
    I’ll try to port it to the C18-compiler, but I’m not sure if it’s out of my league.

    ReplyReply
  15. Andrey Says:

    Greetings, Steve!
    All my attempts to start this project also success have not crowned. :-(
    PIC also it is identified by a computer as the HID-device, descriptors accepts, and with the program of display does not work.
    Program SnoopyPro shows, that after reception of descriptors the stop occurs on 7 and 8 segments (I shall try to result a copy of the report here):
    Seq Direct Endpoint Time Function
    7 ??? down n/a 0.040 BULK_OR_INTERRUPT_TRANSFER –
    URB Header (length: 72)
    SequenceNumber: 7
    Function: 0009 (BULK_OR_INTERRUPT_TRANSFER)
    TransferFlags: 0×00000003
    No TransferBuffer

    8 ??? down n/a 0.040 BULK_OR_INTERRUPT_TRANSFER –
    URB Header (length: 72)
    SequenceNumber: 8
    Function: 0009 (BULK_OR_INTERRUPT_TRANSFER)
    TransferFlags: 0×00000003
    No TransferBuffer

    And attempt to look in PIC at debugging MPLAB ICD2 has shown a course of the program that the code turns not further the operator if (usb_kbhit (1)), on a site:

    set_adc_channel (0);
    delay_ms (1);

    while (TRUE) {
    usb_task ();
    usb_debug_task ();
    if (usb_enumerated ()) {
    if (usb_kbhit (1)) {
    usb_get_packet (1, in_data, 8);

    usb_kbhit () I could not find the description of function neither in files пректа, nor in Help on CCS. Your ideas?
    To make sure, that a problem not of the controller, I have tried one more similar project (HID джойстик, 8 resistors and 12 buttons). :-) http://artjoy.narod.ru/ru/index_ru.html
    To you it can be to be very interesting. The truth it on MCC18, but the version for students for 60 days is accessible on site Microchip. I therefrom also have loaded it. And so it was started practically without problems. Only in a configuration has replaced quartz with 4MHz on 20MHz.
    Almost ready 8-channel oscillograph with controls! To tell the truth, a site Russian-speaking, but comments in software in English.
    P.S. In general for me there is not clear your choice. Devices HID by definition slow – 800 bytes per one second.The virtual COM-port is much faster, and functionality you not теряшь, and examples of such realization at Microchip too are.
    Yours faithfully, Andrey. Moscow.

    ReplyReply
  16. Andrey Says:

    Steve, and can try or in your project to substitute descriptors from joystik, or in his(its) project your descriptors? At me while it, I am afraid will fail. Many mistakes I shall do… Or it is not interesting to you in such variant?
    Yours faithfully, Andrey. Moscow.

    ReplyReply
  17. Steve Says:

    Andrey – usb_kbhit() is defined in usb.c It returns true when the endpoint contains data from the USB host. Thank you for pointing me to that other website, it looks very interesting! Another project you might want to look at is the CREATE USB interface. I used the HID descriptor because it does not require drivers. To be honest, this project is slower than I would like. I’m updating the code to use 64-byte packets and have found a significant increase in speed (theoretically this would be 1 64-byte packet every ms, which is 62.5 kilobytes/second). This project could easily be ported to a virtual COM port, but then it would require the COM port driver. I could also change the descriptors to joystick, but I used a custom device type so that it would not interfere with other applications (hopefully!).

    ReplyReply
  18. Eric H Says:

    Hi Steve, I was wondering if the RS-232 input in the device can be used for serial communications (and not just firmware upgrades) ?

    If so, does the interface support bulk transfer so that I can continuously feed data on the RX pin and read this in the software without missing any data…The input is a 19600 bps data…
    Does the program require modifications ?

    ReplyReply
  19. steve Says:

    do we have a vb.NET version of this yet?

    ReplyReply
  20. Steve Says:

    #18 (Eric) – Right now the serial port is only used for the bootloader. The code can be easily modified to accept USB or serial input, but I have not done that unfortunately. What it would need is a circular buffer on the serial input and then a loop in main() to process the commands (which is what is currently being done with the USB communication).

    #19 (steve) – I actually have a copy of .Net that I purchased here at Purdue (it’s a steal with the educational discount!), but I have yet to install it. I am living in the past and still using VB 6.0, so I haven’t taken the time to upgrade.

    ReplyReply
  21. JeJobas Says:

    hello PIC ers

    Bravo to steve, great site , and great developments for a complete beginner like me.
    Did you succeed in building a faster working firmware for 4550 than the CUI creat usb interface one ?
    thank you if you can post your last researches, and post the links of eventual new firmware

    Jejobas

    ReplyReply
  22. jignesh Says:

    Hi
    Looks a very nice code.
    So could you send me the full code for this i/o in C for Pic18f4550 so i can study as I am learning PICs.

    ReplyReply
  23. jignesh Says:

    hi.
    please send me the full code for this i/o in C for Pic18f4550 .

    ReplyReply
  24. sally Says:

    hello steve,your applications looks very nice and useful.i have seen this project and i think i will use it for my graduation project, servo control of a pm dc motor via usb port.In the beginning i thought controlling rs 232 port would be more simpler but using usb is more useful specially laptop user like me.i have begun recently i hope you will help me soon to develop.i will send you my schematic as soon as it is ok.

    ReplyReply
  25. yang Says:

    Hi!I am a chinese friend,thanks so much for your article,could you send me the full code for this i/o in C for Pic18f4550 so i can study as I am learning PICs.
    yang

    ReplyReply
  26. Steve Says:

    #22, #23 (jignesh), & #25 (yang) – Please see the bottom of the post. I have included code for the PIC18F4550 for you to experiment with. Good luck!

    #24 (sally) – Thank you! I’d love to see how your project turns out!

    ReplyReply
  27. Edgar E. Says:

    Hi!!!

    Very cool article, could you help me to my proyect. I need to do a I/O interfase only digitla inputs and outputs, description of the proyect:

    all port A as inputs
    all port B as outputs
    all port C as inputs
    all port D as outputs

    I need the PIC seed the info. of port A to the PC everytime( a gonna put a sensor in the inputs of the port A and C), and depending of the states of port A is gonna be my outputs of port B and D such a turn
    on/off something, can you help me please.

    I need to understand how I can interpretate the informacion the PIC send to me, the configuracion of the I/O of the PIC and how I can
    do to send info. to the states of the inputs everytime to the pc and send info of the pc to the pic to change the states of the outputs

    Edgar E.

    ReplyReply
  28. Edgar E. Says:

    Ohhh sorry I confuse PIC18f4550 with PIC18f2550, but always all port A could be all inputs and port B all outputs.

    Could be read port A send the info to the PC, i process the info of port A in the PC and then send the info to the PIC and show in the port B could be turn off/on the pins of port B or put the same states of the pins of port A into the port B but sending info trought the PC.

    ReplyReply
  29. Joseph Says:

    HI,

    which compiler is being used here??? IS there any way the software can be written in the MPLAB software instead??? DOnt have CSS and cant afford it either…

    Thanks

    Regards
    Joseph

    ReplyReply
  30. Modassar Says:

    hay can any one tell me code & circuit diagram of 8 input switchs circut diagram
    a circuit which can take 8 diffrent reagings from 8 different switches at the same time and send the data to the ps through the usb port
    Please help
    Please can some one give the the compleate circuit diagram & code of this circuit

    Please HELP

    ReplyReply
  31. Ahmet Tiryaki Says:

    I have one project control and measure pins of pic 18f4550 by using usb . And there is no so much information about it. could you send me the full code for this i/o in C for Pic18f4550 or pic 18f2550 so i can modify for my project

    Thanks & Best Regards
    Ahmet Tiryaki

    ReplyReply
  32. sujatha Says:

    sir,
    I need the coding for rf using usb in pic (18fseries) controller

    ReplyReply
  33. Will Says:

    Hello all, this question is open to anyone. My question is I have the PICDEM FS USB board and it uses the PIC18F4550. I have put the 18F4550 hex with no bootloader on the board. When I run the program it is not responding aka the device is connected, and it says USB Device: Disconnected. Does anyone know what else needs to be done?

    ReplyReply
  34. Will Says:

    Hey Steve,

    I am trying to use your project with my PICDEM FS USB DEMO board and its not working. I kind of know what the problem is. I need to changed the location of where the code starts and ends because my bootloader uses certain sections of memory. To edit the code I need CCS PCH compiler, I assume you already have it. I am trying options besides buying the compiler because I am a hobbyist and its expensive. Is there to use the C18 compiler through MPLAB to compile the c file instead of PCH compiler?

    P.S. This question is open to anyone who knows the answer.

    ReplyReply
  35. park Says:

    very nice Code..

    ReplyReply
  36. Eric Says:

    I have built the circuit with the 18F4550, however it does not function properly. The device is detected by the VB app however it does not function when trying to send or receive data. I have looked over the entire device and cannot find what might be the problem.

    Also, for those who have had trouble with the 18F4550, just in case you did not notice, but you can not use the schematic on this page for the 4550, the pin-out is different as the 4550 is a 40 pin device. Look at the 4550 datasheet to get the correct pin numbers to use.

    ReplyReply
  37. haresh Says:

    i have made a demo usb board with pic18f4550,then i downloaded firmware from microchip site,which i will program in pic MPLABICD2,but problem is this when i build this project in MPLAB,build is getting failed and telling error some c018i.o file is out of date. plese suggest the solution.
    thanking you
    haresh

    ReplyReply
  38. natp Says:

    I Want to used VB6 Control LED By HScroll Bar in VB6. LED has Bright when Drag Mouse at HScroll Bar on Max Value.and Drag Mouse at HScroll Bar on Low Value LED has low Bright.I dont know to write This source code.Thank you very much for an instruction

    ReplyReply
  39. Ewan Says:

    Hello Steve,

    I’m interested in Sally’s project regarding USB control of a permanent magnet DC motor (PMDC) – see comment #24. Would you mind passy my e-mail address on to her?

    Thanks,

    Ewan

    ReplyReply
  40. Sam Says:

    Hi Steve..
    That’s really cool. Just what I need to start my new “adventure” into USB world. Mind sharing the PIC source code with me, steve? I’d like to do the experiment myself too. Thanks in advanced.

    Regards,
    Sam

    ReplyReply
  41. vizitibi Says:

    Hi!

    Thanks this nice code.
    I use your ccs code with delphi application, with my software interface.
    Please help me, where can I modify your usb_desc_hid_8_byte.h, if I want to receive 255 byte in pocket. I want to read all the eeprom memori in 18f4550 in one step.
    Thanks Tibor

    ReplyReply
  42. Andres Says:

    Hi, i was just trying a few things with your code and couldn’t get the usb device enumerated when I enabled the INT_EXT. Do you know how to solve this? I’ve been trying a lot of different ways and can’t make it work.

    Thx a lot.
    Andrés

    ReplyReply
  43. Bruce Says:

    I am interested in building a circuit like this to add analog inputs an digital I/O for Microsoft Flight Simulator. Is there a way to make this circuit appear as a USB joystick, so that I can easily use it with MSFS?

    Also, what would I need to do if I want to use multiple circuits like this on one PC? Would I need to change something in usb_desc_hid 8-byte.h for each circuit, so that Windows could tell them apart?

    Do you know of any projects that use PICs to simulate USB joysticks?

    ReplyReply
  44. unni Says:

    Can you publish code for PIC18f4550, programmer ICD2 and MPLAB in C — HID implementation

    ReplyReply
  45. cagh Says:

    I am having trouble connecting the module to windows vista, do not recognize this and I could not find a driver that work, you can give any suggestion.
    Regards
    cagh

    ReplyReply
  46. diogoc Says:

    Hi! i want use this code with delphi but i cant receive data. i send data but delphi program dont detect a packet received. anyone can help me? Thanks

    ReplyReply
  47. ziha Says:

    Hi, Steve
    Good day to u, im trying your project, but im got problem with header file…pic18_usb.h How to get/find this file. I hope u can guide me.
    Thanks.

    ReplyReply
  48. Vladimir Says:

    Hi Steve, very nice project, but I’ have a problem with c compiler. Every time have make errors. Please send my the compiled (hex) file.

    Thanks & Best Regards
    Vladimir Barakov.

    vladi_78@abv.bg

    ReplyReply
  49. minal Says:

    I’m doing a project using the PIC18F4550. I already got the hardware up and running (using the Microchip C18-compiler and the examples from microchip.com). I don’t have access to the CSS-compiler, but I’ll try to port your code to C18.Where can I find source code you had provided?

    how can i start to write code??

    TNK

    ReplyReply
  50. Eric Says:

    I am doing a project using a 18F4550 board from Modtronix (SBC44UC).
    I would like to use a jumper/switch to either run the provided bootloader or something inspired by your code.
    I am not a pro yet regarding USB, so I am seeking your advice to see if it is possible.

    The goal is not to use RS232 for programming.

    Your site is great!

    ReplyReply
  51. Jack Says:

    Just found your page and it is very interesting project. Just wondering if you have any update on this project? pls have a look of mines at http://myscope.gpregonline.com. any comment is welcome.

    ReplyReply
  52. Jack Says:

    Hi Steve, thanks very much for puting this up. I understand that it has been a few years since you have first made this project, I am wondering if you have any update in this regards. I think you are more interested in more exciting project, however your insight regarding to a signal conditioner is much appreciated!!
    Once again your site is top notch, very educational, and gives me a lot of inspiration!!

    ReplyReply
  53. Haryo Says:

    Can you help me to make a simple multiple switching use USB port and use visual basic.
    Use PIC18F2550.
    Please help me, give me a schematic and sourch code. Thank u before.

    U can reply in my mail hryroses@yahoo.com

    ReplyReply
  54. Orlin Says:

    Hi everyone. I make one of this wonderful device and i can say it is briliant, but i have a question for Steve. Can you build an I2C host port for this device it will be very helpful for the lab for everyone, because there is many I2C devices like PCF8574 for example. I know VB and I can build one very simple form for direct control, so I think that the other will agree with me. Thank you.
    P.P. Do not forget that sort of device is very expensive.

    ReplyReply
  55. Orlin Says:

    If anyone want to discus the problem please feel free to send me a e-mail on this addres
    “orlin369@abv.bg”

    ReplyReply
  56. wulei Says:

    Hi!
    Can you give me some information about ‘usb.c’.

    ReplyReply
  57. wulei Says:

    And ,can you give me more explanations about the code you have given before

    ReplyReply
  58. Dimy Says:

    This work fine to.
    Thanks a lot steve!!!
    This was the best way to learn about USB of pic 18F2550.
    Sucess

    ReplyReply
  59. jose Says:

    very nice and educational, keep it up

    ReplyReply
  60. amith Says:

    I’ve purchased a kit with a preprogrammed micro controller and ready made GUI (has 8 buttons- press one corresponding led will light up…it has provision to control upto 8 ac devices – triac and optocoupler based). I soldered the components together, installed the setup file and found everything to work perfectly. But now i’m in need of the code pf the interface and micro controller code and procedure for ‘documentation’ purposes (and also to understand better). Please give me an idea, the code etc…. deadline is july 20.

    USING PIC18F2550!
    SIMPLE CODE AND SCHEME NEEDED…

    ReplyReply
  61. Tuna Says:

    Thanks for the softwares,
    I want to connect 2 18f4550 to one computer, how can I change the address of the pics in the software?
    Thanks;
    Tuna

    ReplyReply
  62. Alexander Buchon Says:

    Mstr.

    Sorry for my very bad english….

    I have make two quest. about your extremme generous publication.

    1.- when I compile your source “18F4550 USB HID CRC IO – no bootloader.c” appear a error about this: “device need here” or “sintax error” when write same like this: “#device adc=8″ but don´t resolve anything please can you tell me how resolv. ?

    2.- how read in visual basic 6 when pulse a digital buttons defined in the your firmware and how make the circuit for read a button (digital)

    Thank You very very apreciate help me.

    Alex

    ReplyReply
  63. Nursultan Says:

    Hi! Please who can help me? What is it bootloader? for what? What kind of function it do?? Can I just use The programmator for Pic microcontrollers and flash? I want to flash pic18f2550 and dont use bootloader. should use what file to stitch? 18F4550 USB HID CRC IO.c (hex) And here this file for what?
    »18F4550 USB HID CRC IO – no bootloader.c (hex) And here this file for what? Whether I can simply stitch the microcontroller? For the converter of level RS-233 is necessary? What of these two files I should use to stitch? I was simply tangled.. Sorry my English

    ReplyReply
  64. Nicolas Says:

    Good day,
    Have you realise the vb.net version of your project?
    Best regards, Nicolas.

    ReplyReply
  65. ms Says:

    device not recognized! what will be do at PC side?

    ReplyReply
  66. ms Says:

    Hi dear Steve,
    thanks for reply.

    where find we which inf file?

    ReplyReply
  67. Mark Aren Says:

    Thanks for publishing this work – most useful.

    Have you had problems with the channel being unreliable – why did you include the CRC checking?

    Regards,

    Mark

    ReplyReply
  68. Alin Ipatescu Says:

    Hi,

    I was studied the datasheet of PIC18F 2455/2550/4455/4550, at page 26 of 438
    http://ww1.microchip.com/downloads/en/DeviceDoc/39632e.pdf
    I am asking about the oscillator. If I want to use one that is 8MHz:
    PLLDIV=0b001 (PLL Prescaler /2) ->4MHz
    using the PLL -> 4*24=96MHz
    divide by 2 -> 48MHz
    USBDIV=0b1
    FSEN=0b1

    So I will have 48MHz so full speed. Is this possible? I heard it is only in ideal cases. I’m not interested in full speed, but I have a board made by someone and it has a quartz of 8MHz. I have read that low speed requires 6MHz clock.

    I want to use on the PC side a C# terminal, that use a class SerialPort (I want my uC be seen as a VCP – virtual COM port). Are you familiar with my choice?

    Thanks in advance.

    ReplyReply
  69. Alin Ipatescu Says:

    I was not specific. Your project using 20MHz
    PLLDIV=0b100 (PLL Prescaler /5) ->4MHz
    using the PLL -> 4*24=96MHz
    divide by 2 -> 48MHz
    USBDIV=0b1
    FSEN=0b1

    Full speed? your project is similar to my calculations?

    ReplyReply

Leave a Reply

Trackbacks/Pingbacks to “PIC18F2550 USB HID IO”