USB CDC Communications for Dummies!


Closed Thread
Page 1 of 3 123 LastLast
Results 1 to 40 of 105
  1. #1
    Join Date
    Oct 2003
    Location
    Australia
    Posts
    257

    Talking USB CDC Communications for Dummies!

    Want to communicate with your PIC via USB?
    Want to install a virtual Commport on your PC?
    Want to send serial commands to your PIC?

    Its REALLY easy! Here's how.

    Get yourself a PIC18F2455/2550/4455 chips that has USB support. And connect the Usb to to your PIC as shown below.

    Note if using the USB bus power to power your pic remember that the max current your pic circuit can draw is 100ma! Anymore and you may blow your usb port! If in doubt stick in a fuse, or use external power.

    For this demo though you can safely use the Bus Power. Mecanique has a good circuit diagram you can follow here. http://www.mecanique.co.uk/products/...atic-large.gif

    Pin Name Cable color Description
    1 VCC Red +5 VDC (Vdd)
    2 D- White Data - (RC4)
    3 D+ Green Data + (RC5)
    4 GND Black Ground (Vss)

    Once your hardware is setup follow on....

    STEP ONE.

    In your PBP folder, copy the entire contents of the USB18 folder into a new folder where you store your pic programs;

    eg... copy c:\pbp\usb18\*.* c:\cdcdemo

    STEP TWO.

    Open the USB descriptors file (called USBDESC.asm)
    There are three lines of code in there, change the ; so that CDCDESC.ASM is used.

    Code:
    ;	include "MOUSDESC.ASM"		; USB descriptors for mouse demo
    ;	include "JADESC.ASM"		; USB descriptors for Jan Axelson's demo
    	include "CDCDESC.ASM"		; USB descriptors for CDC demo
    STEP THREE.

    Copy this code and save it into the c:\cdcdemo folder and then compile using pbp.

    Code:
    DEFINE    OSC 48
    
    Buffer    VAR BYTE[16]
    Cnt       VAR BYTE
    B0        VAR BYTE
    B1        VAR BYTE
    
    ADCON1 = 15               ' Set all I/Os to Digital      
    CMCON = 7                 ' Disable Comparators
    Cnt = 16
    
    USBInit                   ' Initialize USART
    
    for b0 = 0 to 15
        lookup b0,["USB CONNECTED!",10,13],B1 
        BUFFER(B0) = B1
        NEXT B0
    
    ' Main Program Loop
    Loop:
        USBService        ' Must service USB regularly
        USBOut 3, Buffer, Cnt, loop
        goto loop
    end
    When you compile the above program, PBP fuses the USB18 files in youe cdcdemo folder to generate the neccessary .HEX file. Viola!!
    run your progam.

    Windows will detect the PIC as a USB device and install the Microchip CDC driver.

    STEP FOUR.

    Open up Hyperteminal and select the virtual comport that was just installed. you should see USB CONNECTED! repeated.

    Congratulations, you can send data from the PIC to the PC via a quasi Serial connection.

    Ok How about sending and receiving data?

    Program this code below into your pic:

    Code:
    buffer	Var	Byte[16]
    cnt	Var	Byte
    LED	Var	PORTB.0
    
    Define  OSC     48
    
    	USBInit
    	Low LED		' LED off
    
    ' Wait for USB input
    idleloop:
    	USBService	' Must service USB regularly
    	cnt = 1	' Specify input buffer size
    	USBIn 3, buffer, cnt, idleloop
    
    ' Message received
    	Toggle LED
    
    outloop:
    	USBService	' Must service USB regularly
    	USBOut 3, buffer, cnt, outloop
    
    	Goto idleloop	' Wait for next buffer
    Again open Hyperterminal and the PIC will echo back the characters that you type (one byte at a time).

    Try sending a large text file. Does it keep up?

    Wow your becoming an expert now aren't you!

    Stay Tuned....
    Squib

  2. #2
    Join Date
    Jul 2003
    Posts
    2,405

    Default

    Nice work Squib...;o}
    Regards,

    -Bruce
    tech at rentron.com
    http://www.rentron.com

  3. #3
    T.Jackson's Avatar
    T.Jackson Guest

    Thumbs up Nicely done.

    Nicely done. Worth a vote...

    It would be great to see a lot more practical examples posted. Even better if there's an electrical schematic included as well.

    Best Regards,
    Trent Jackson

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

    Default

    Steve

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

  5. #5
    Join Date
    Apr 2006
    Location
    New Hampshire USA
    Posts
    298

    Thumbs up Bravo

    Beautiful, step by step “how to” piece of art. Thank you Squib. Nicely done.
    -Adam-
    Ohm it's not just a good idea... it's the LAW !

  6. #6
    Join Date
    Jan 2007
    Posts
    70

    Default

    thanks squib!

    you are great.

  7. #7
    Join Date
    Nov 2008
    Posts
    12

    Default Help

    Hi Squipcakes

    I've followed your instructions for this post and built the schematics attached which are very similar to yours posted (see attached). But once compiled and loaded onto the chip, the chip's power led lights up but the diagnostic led's don't and the PC doesn't even see a device attached to the system. I've checked my connections and they all seem fine. I have also attached the files used to make the hex and the hex (file is the mycdc.hex). I'm using a PIC18f2450 (not the same as in the schematics but same pinning)

    What could be the problem??

    Thanks
    Attached Images Attached Images  
    Attached Files Attached Files

  8. #8
    Join Date
    Dec 2008
    Posts
    48

    Default Figures.... A Response Would Be Nice...

    Hi All. Thanks in advance for the help.

    I am in a similar situation as the respondent above. Have setup everything with an 18F2550 and when plugged in, device not recognized error appears in XP. Where are the CDC drivers mentioned? A lot of the posts above applaud the project, but when a real implementation question is asked, it gets quiet.

    Please, throw the dog a bone!

    Regards,
    Kirt

  9. #9
    Join Date
    Dec 2008
    Posts
    48

    Default VID and PID

    Okay, I have got my problems down to matching VID and PID numbers in the mchpcdc.inf file and the VID and PID numbers burned on the PIC (18F2550).

    Have looked in cdcdesc.asm, but don't know where to find these values.

    Any help?

  10. #10
    Join Date
    Dec 2008
    Posts
    48

    Default Hmmm... Still Does Not Recognize Hardware

    Well.... I figured out the PID and VID stuff... The values in the cdcdesc.asm file and the values in the inf file of the driver (CDC this time) you are using must match.

    After confirming this, XP still recognizes that a USB device is attached, but when I go to install the CDC driver, an XP dialog that says hardware information cannot be found appears.

    Any help?

  11. #11
    Join Date
    Aug 2005
    Posts
    57

    Default

    Its been awhile since I went through the same project, but I don't think you need to modify those files.The pic config settings needs to be correct though.I have attached a project folder with files I did once I had it working.Look through the the files for possible clues,primarily the .bas for the config settings.
    It uses a 4mhz crystal.
    Good luck
    Attached Files Attached Files

  12. #12
    Join Date
    Jan 2009
    Posts
    6

    Default

    arniepj, I cannot get your code working either.

    There are no config fuses set in the code, and I do not know what they are supposed to be for this application.

    I cannot fing any hints in your code as to how to get it to work.

    Any help is much appreciated.

  13. #13
    Join Date
    Dec 2008
    Posts
    48

    Default 18F2550 w/ 4MHz

    Thanks alot. I popped a 4MHz clock (in place of 12 MHz) and compiled successfully. However, with the same result: the program compiles and the chip is programmed fine. I plug the USB cable into the test PC (and others) and windows will prompt as an unrecognized device. I go into the driver configuration and when I load the .inf file, windows again prompts that there is no hardware information available.

    Have gone through the data sheet and fuses very close ... but the same result, which has me wondering about the cdc drivers that I am using for the PC....

  14. #14
    Join Date
    Jul 2003
    Location
    Colorado Springs
    Posts
    4,959

    Default

    If it compiles ... The number one cause of USB failure, is improper Oscillator Configurations.

    For 4Mhz Crystal ...
    Code:
    @   __CONFIG   _CONFIG1L, _PLLDIV_1_1L & _CPUDIV_OSC1_PLL2_1L & _USBDIV_2_1L
    @   __CONFIG   _CONFIG1H, _FOSC_HSPLL_HS_1H
    For 8Mhz Crystal ...
    Code:
    @   __CONFIG   _CONFIG1L, _PLLDIV_2_1L & _CPUDIV_OSC1_PLL2_1L & _USBDIV_2_1L
    @   __CONFIG   _CONFIG1H, _FOSC_HSPLL_HS_1H
    For 20Mhz Crystal ...
    Code:
    @   __CONFIG   _CONFIG1L, _PLLDIV_5_1L & _CPUDIV_OSC1_PLL2_1L & _USBDIV_2_1L
    @   __CONFIG   _CONFIG1H, _FOSC_HSPLL_HS_1H
    For any of the above configurations, use ...
    Code:
    DEFINE OSC 48
    Number two reason ... improper capacitance on VUSB pin. (0.22uF or higher)

    #3, connecting +5V from USB port to +5V supply from powered project. (very bad)
    Ok, that's not really #3, but it is bad.

    Last edited by Darrel Taylor; - 1st January 2009 at 02:47. Reason: OSC 48
    DT

  15. #15
    Join Date
    Dec 2008
    Posts
    48

    Default

    This might sound like a crazy question but....

    Do I have to install a bootloader of some kind on the 18F2550? If so, where do I get hold of one compatible with the project(s) this thread is about?

    This is a great thread. When I get it all going, will package and contribute accordingly.

    --Kirt

  16. #16
    Join Date
    Dec 2008
    Posts
    48

    Default

    Thank you Darrel. Here are the configs from the code arnie posted earlier, which is very similar to the configs (except I used a 12 MHz oscillator) that I created earlier according to the data sheet and include file review.

    asm
    CONFIG_REQ
    CONFIG1L = _PLLDIV_1_1L & _CPUDIV_OSC1_PLL2_1L & _USBDIV_2_1L
    ; ; ; USB clock source comes from the 96 MHz PLL divided by 2
    ; ; [OSC1/OSC2 Src: /1][96 MHz PLL Src: /2] Determines cpu speed
    ; No prescale (4 MHz oscillator input drives PLL directly)
    CONFIG1H = _FOSC_XTPLL_XT_1H & _FCMEN_OFF_1H & _IESO_OFF_1H
    ; ; ; Oscillator Switchover mode disabled
    ; ; Fail-Safe Clock Monitor disabled
    ; XT oscillator, PLL enabled, XT used by USB
    CONFIG2L = _PWRT_ON_2L & _BOR_ON_2L & _BORV_2_2L & _VREGEN_ON_2L
    CONFIG2H = _WDT_OFF_2H
    CONFIG3H = _MCLRE_ON_3H & _LPT1OSC_OFF_3H & _PBADEN_OFF_3H & _CCP2MX_ON_3H
    CONFIG4L = _STVREN_ON_4L & _LVP_OFF_4L & _XINST_OFF_4L & _DEBUG_OFF_4L
    ; Removed ICPRT_OFF_4L used with 18F4550
    endasm


    Did not have the define statement included though.... try that and see soon.
    Also, noticed that your oscillator settings were HS instead of XT.

    --Kirt

  17. #17
    Join Date
    Jul 2003
    Location
    Colorado Springs
    Posts
    4,959

    Default

    If you're trying to use the new style CONFIG with PBP, you should be aware that it can't be placed in your program.
    It has to be the first thing loaded, which means it must be in a file that gets loaded before the PBP library. (Not fun)

    The original __CONFIG statements are still the way to set configs with PBP.
    In other words, please delete what you just posted from your program, and follow the suggested __CONFIG style.
    Also, noticed that your oscillator settings were HS instead of XT.
    HS mode will always drive a crystal that might qualify for XT mode. The reverse is not always true. I err on the Cautious side.
    DT

  18. #18
    Join Date
    Dec 2008
    Posts
    48

    Default

    Thank you Darrel.

    I was going through that the other day and the only way I could get code to compile is the way it is written now... but apparently not compiling correctly.

    When I use the __config statements, the following appears rather consistently.

    AUTO2550.ASM 72 : Overwriting previous address contents (0000)
    Error[118] C:\PROJECTS\KEYFER\AUTO2550\AUTO2550.ASM 72 : Overwriting previous address contents (0001)

    This doesn't require a CDC bootloader for the PIC, does it? Also noticed that the cdc windows drivers only have an .inf file and a .cat file, but no .sys file.

    --Kirt

  19. #19
    Join Date
    Jul 2003
    Location
    Colorado Springs
    Posts
    4,959

    Default

    There we go. That one must be #3

    What to do if i get "overwriting previous address content" error message? (mister_e)
    http://www.picbasic.co.uk/forum/show...75&postcount=5
    DT

  20. #20
    Join Date
    Dec 2008
    Posts
    48

    Default

    Awesome!! That was number 3! Still with the OSC define statement, but will put that in for completeness sake! All works. Will post a detailed 'my experience' in a few.

  21. #21
    Join Date
    Dec 2008
    Posts
    48

    Default On An 18F2550

    Okay.... I got this puppy working with a bit of help from Darrel through the posts that lead up to this.

    Attached is the MPLAB project file and supporting files. The biggest stickler has been getting the configurations correct for the oscillator selection. So the rule going forward for my projects is to comment out the configuration statements in the PBP devicexxxxx.inc files and declare them in the program.

    Enjoy! Will be looking at this often as now I am moving onto inputs and other device profiles.... hopefully!
    Attached Files Attached Files

  22. #22
    Join Date
    Jan 2009
    Posts
    6

    Default

    I know to look out for all of the above and im very careful with setting configs on any 18 series device as there is a lot to them, however none of the above is my problem.

    I cannot even get a confirmed working hex file to work without the dredded "Unknown Device" error, with EXACT hardware even.

    Ive tried many different cables, ports, PC's etc. to no avail.

    I always use .47uF caps on VUSB, as I have a hundreds of them.

    Im about done with trying to get USB working and just continue on with the FTDI solution.

  23. #23
    Join Date
    Dec 2008
    Posts
    48

    Default

    Are you getting it to recognize the device when you initially plug into your computer?

    This is the most straightforward and easiest to run so far. It is based on SquibbCake's code in the first posting.

    Arnie >> What was your code supposed to do? When I thought I got it working (which it does for the most part), it was blowing a bunch of "B" and special characters across the screen. But upon closer review of your code, it looks like it is looking for user input, then sending data out on USART TX pins. Can you tell us how it is supposed to function and include a link to a similar schematic?
    Attached Files Attached Files

  24. #24
    Join Date
    Dec 2008
    Posts
    48

    Default

    I have gone throught the microchip document fairly thoroughly but have a few questions about some of the PicBasic Pro commands. In the USBIN and USBOUT functions, the first argument is endpoint. What is this referring to? How is that number determined?

  25. #25
    Join Date
    Aug 2005
    Posts
    57

    Default

    The code is a test program and actually works with a VB6 interface and yes it is looking for commands.The usart output was initially just to let me know the code was running.You can have serial data simultaneously on the pc's comport and the virtual comport(usb).From a terminal program send MX8 to start the usb xmit and MX9 to stop.If you want the VB code http://www.picbasic.co.uk/forum/show....php?t=7372.If you think the CDC demo was fun,Hid is even better.

  26. #26

    Default Redefinition of VAR.

    Can sombody please give me a hint what i am do-ing wrong i keep getting the following error
    C:\PBP246\PIC18EXT.BAS ERROR Line 12: Redefinition of VAR.
    Here is the code i use


    Code:
    INCLUDE "MODEDEFS.BAS"
    INCLUDE "18F4550.BAS"		; USB descriptors for CDC demo
    
    DEFINE OSC 20				' Define crystal as 20Mhz
    
    'Define ACDIN parameters
    Define ADC_BITS 10 			' Set number of bits in result
    DEFINE ADC_CLOCK 3 			' Set clock source ( 3 = RC )
    DEFINE ADC_SAMPLEUS 50 		' Set sampling time to micro-seconds
    
    'This Part set PORTA 0-3 an analog inputs,4 as digital 
    TRISA = %00011111 			'set PORTA 0-5 as inputs
    ADCON1 = %00001010 			'ADC use vss and vdd as ref.
    ADCON2 = %10000111			'FRC (clock derived from A/D RC oscillator),Right justify output
    
    
    TRISD = %00001111			'Set port d 0-3 as inputs and 4-7 as outputs
    TRISB = %10011000
    
    '**************************************Variables*********************************************
    buffer	Var	Byte[16]
    cnt	Var	Byte
    LED	Var	PORTD.4
    
    USBInit
    Low LED		' LED off
    
    '**************************************Main Program******************************************
    ' Wait for USB input
    idleloop:
    	USBService	' Must service USB regularly
    	cnt = 1	' Specify input buffer size
    	USBIn 3, buffer, cnt, idleloop
    
    ' Message received
    	Toggle LED
    
    outloop:
    	USBService	' Must service USB regularly
    	USBOut 3, buffer, cnt, outloop
    
    	Goto idleloop	' Wait for next buffer
    
    
    END

  27. #27
    Join Date
    Aug 2005
    Posts
    57

    Default

    Comment out INCLUDE "18F4550.BAS and add the following files to the project folder.It compiled fine for me and connected to the pc usb,but your code only flashes an led.
    CDCDESC.ASM
    usb18.asm
    18F4550.BAS
    USBDESC.ASM
    usb18.inc
    usb18mem.asm

  28. #28

    Wink

    Thank you got it running, the problem seemed to be that my pic basic pro was installed in PBP246 and not PBP as one of the references needed it to be, Just fixing the path seemed to repaired everything

  29. #29
    Join Date
    Dec 2008
    Posts
    48

    Default USBIN Question

    Have a very basic question that I want to confirm before going forward...

    In the PBP manual, USBIN is described as:

    ++++++++++++++++++++++++++++++++++
    USBIN Endpoint, Buffer, Countvar, Label

    Get any available USB data for the Endpoint and places it in the Buffer. Buffer must be a byte array of suitable length to contain the data. Countvar will contain the number of bytes transferred to the buffer. Label will be jumped to if no data is available.
    ++++++++++++++++++++++++++++++++++

    It was my understanding that with or without data, that this function always went to Label. Then within Label we perform a test to see if Buffer has new data and route execution from there.

    However, the way that the PBP manual describes it is that if no data is input, then program execution jumps to Label.

    Which one is it? Does this function always go to Label after reading 8 bytes (or however many specified during HID config. and specified in CountVar) even if there was or was not any input? Or, does this function only jump to Label when no bytes are read from the bus?

  30. #30
    Join Date
    Jan 2009
    Posts
    6

    Default

    Do any of you have a working hex for a 2550 on a 20MHz crystal that I can try?

    I have tried everything I have found and still cannot get anything to work. I always get "Unknown Device" error no matter what.


    The vendors of the compilers really need to give more concise information on USB communications.

  31. #31
    Join Date
    Dec 2008
    Posts
    48

    Default

    I was consistently getting USB device recognition when I connected, but ended with an unknown device when I did not have the configuration directives set appropriately. Read the above thread between Darrel and myself. Or, you can put in a 4MHz chip and just use the code I posted a couple days ago...

  32. #32
    Join Date
    Jan 2009
    Posts
    6

    Default

    OK, I was finally able to get this working.

    I was using the USBTEST files above.

    I added the extra configs for the write protect stuff that was not in the code and VOILA!!!, it works now.

    It seems to be an issue with the PicKit2. It barks at you if those configs are not included, it usually isnt an issue as long as the important ones are defined. However in this case I assume since they were missing , the PicKit2 changed some of the needed configs to something incompatible for some reason.

    This should not be the issue, however it works. I removed the extra configs and it doesnt work, add them and its just fine!!!

    Now to figure out how to get data INTO the pic.

  33. #33
    Join Date
    Jan 2009
    Posts
    6

    Default

    Also, for 20mhz crystal/resonator, you MUST change the osc type to HS instead of XT.

    HS will not work on 4Mhz, and vise versa.


    SO,
    here is what to do to get it working, "for sure". It seems to work for some with different setting however.

    Ensure PPLDIV is 1 for 4Mhz, 5 for 20MHz
    Ensure osc type is XT for 4MHz and HS for 20MHz
    Include ALL config options.

    After experimenting fpr days on end these seem to be the things that affect it most, for me anyway.

  34. #34
    Join Date
    Jan 2009
    Posts
    6

    Default

    Quote Originally Posted by kirtcathey View Post
    Have a very basic question that I want to confirm before going forward...

    In the PBP manual, USBIN is described as:

    ++++++++++++++++++++++++++++++++++
    USBIN Endpoint, Buffer, Countvar, Label

    Get any available USB data for the Endpoint and places it in the Buffer. Buffer must be a byte array of suitable length to contain the data. Countvar will contain the number of bytes transferred to the buffer. Label will be jumped to if no data is available.
    ++++++++++++++++++++++++++++++++++

    It was my understanding that with or without data, that this function always went to Label. Then within Label we perform a test to see if Buffer has new data and route execution from there.

    However, the way that the PBP manual describes it is that if no data is input, then program execution jumps to Label.

    Which one is it? Does this function always go to Label after reading 8 bytes (or however many specified during HID config. and specified in CountVar) even if there was or was not any input? Or, does this function only jump to Label when no bytes are read from the bus?
    I have some of the same questions. What IS and endpoint anyway???


    In my findings the above example from the manual is backwards. It will only jump to the label if the buffer is FULL. It seems to sit and wait until the specified number of bytes have been received.

  35. #35
    Join Date
    Feb 2009
    Posts
    12

    Default

    Note if using the USB bus power to power your pic remember that the max current your pic circuit can draw is 100ma! Anymore and you may blow your usb port! If in doubt stick in a fuse, or use external power.
    As far as I know a USB 2.0 device can draw upto 500mA once communication is established and the host grants the request for drawing more power, otherwise the device is only able to get 100mA from the host. I doubt that you will blow the USB port if you draw more then 100mA.

  36. #36
    Join Date
    Nov 2008
    Posts
    12

    Default USB to Serial

    Hi Guys

    I'm pretty new to all of this, but here's my attempt.

    I've attached a schematic of the device i am using.

    What i am attempting to make here is some sort of USB to Serial Port Converter.

    The code i loaded onto the chip is as follows:

    Code:
    '****************************************************************
    '*  Name    : UNTITLED.BAS                                      *
    '*  Author  : [select VIEW...EDITOR OPTIONS]                    *
    '*  Notice  : Copyright (c) 2009 [select VIEW...EDITOR OPTIONS] *
    '*          : All Rights Reserved                               *
    '*  Date    : 2009/01/02                                        *
    '*  Version : 1.0                                               *
    '*  Notes   :                                                   *
    '*          :                                                   *
    '****************************************************************
    @   __CONFIG	_CONFIG1L, _PLLDIV_5_1L & _CPUDIV_OSC1_PLL2_1L & _USBDIV_2_1L
    @	__CONFIG	_CONFIG1H, _FOSC_HSPLL_HS_1H & _FCMEN_OFF_1H & _IESO_OFF_1H
    '_CONFIG1H, _FOSC_XTPLL_XT_1H 
    @	__CONFIG	_CONFIG2L, _PWRT_ON_2L & _BOR_ON_2L  & _BORV_28_2L  & _VREGEN_ON_2L
    @	__CONFIG	_CONFIG2H, _WDT_OFF_2H
    @	__CONFIG	_CONFIG3H, _MCLRE_ON_3H & _LPT1OSC_OFF_3H & _PBADEN_OFF_3H & _CCP2MX_ON_3H
    @	__CONFIG	_CONFIG4L, _STVREN_ON_4L & _LVP_OFF_4L & _XINST_OFF_4L & _DEBUG_OFF_4L
    
    ' ****************************** Configure Hardware *********************************************
    trisb = %11111100
    trisc = %10111111       	' Set TX (PortC.6) to out, rest in
    spbrg = 25            		' Calculate ((CPU speed mhz/Baud)/16)- 1  25 = 115200 baud  EX:((48000000/115200)/16)-1
    rcsta = %10010000       	' Enable serial port and continuous receive
    txsta = %00100000       	' Enable transmit and asynchronous mode/brgh = 0 bit 2
    baudcon =%00001000			' Bit3 = 1: High speed usart 16 bit  
    
    '***************************** Variables ******************************************
    USBBufferTX Var Byte[1]
    USBBufferRX var Byte[1]
    USBBufferCount Var Byte
    SerBufferTX Var Byte
    SerBufferRX var Byte[1]
    BufferRX var Byte
    SerBufferCount Var Byte
    Indexer var byte
    Xmit_Start var bit									' Start serial data transmission
    Status_Bits var byte								' Status bits to Pc
    Data_Delay var word									' Delay for dataout
    Data_Out var word									' Data 
    
    Status_Bits = 0
    
    LED	Var	PORTB.1
    
    Define  OSC     48
    
    	USBInit
    	high led
    	pause 1000
    	Low LED		' LED off
        USBService
    
        for Indexer = 0 to 0
    	   USBBufferRX[Indexer]= 0
        next
    
        usbbuffercount = 1
        
        
    main:
        goSUB usb_rx
        goSUB com_rx
    goto main    
    
    	' Transmit USB Data     
    USB_TX:
    					' TX buffer size
    USBService 
    USBOut 3, serBufferrX, USBBufferCount, main 			' Transmit data		
    RETURN
    
    	' Receive USB Data 
    USB_RX: 
    USBService 											
    USBIn 3, USBBufferRX, USBBufferCount, exitsub 		' Receive data if available,then exit
    serbuffertx=usbbufferrx[0]
    goSUB com_tx
    return
    'GOSUB Main
    
    
    'Serial Receive
    
    COM_RX:
    hserin 1, exitsub, [bufferrx]
    serbufferrx[0]=bufferrx
    goSUB usb_TX
    goSUB main
    
    'Serial Transmit
    COM_TX:
    hserout [serbuffertx]
    RETURN
    
    exitsub:
    return
    Now this code compiles and i can connect via a hyperterminal to both the USB virtual and the physical Serial port. However if i enter anything in either of hyperterminals, it gives nothing and after a while of constant typing the hyperterminals start freezing on me. So i take it i've done something horrifically wrong.

    Any suggestions?
    Attached Images Attached Images  

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

    Default

    this section
    Code:
    COM_RX:
    hserin 1, exitsub, [bufferrx]
    serbufferrx[0]=bufferrx
    goSUB usb_TX
    goSUB main
    I guess you want a Return there.

    And when you deal with HSEROUT/HSERIN, you should use DEFINEs, unless, it will use default 2400 Bauds baudrate.

    AND you must add DEFINE OSC 48 at the top of your code as well.

    That should be enough to start
    Last edited by mister_e; - 15th February 2009 at 10:53.
    Steve

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

  38. #38
    Join Date
    Nov 2008
    Posts
    12

    Default

    Hi Mister_e

    Thanks for the response. I did already have a DEFINE OSC 48 already near start of the code, i have changed it to be return instead of GoSub Main. Thanks. As for your quote below

    Quote Originally Posted by mister_e View Post
    this section
    you should use DEFINEs, unless, it will use default 2400 Bauds baudrate.
    Would you be able to provide a bit more detail as regards the DEFINEs you mention, i have no clue what you mean by that.

    Thanks
    Last edited by ricgar; - 15th February 2009 at 17:57.

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

    Default

    DEFINE for HSEROUT are explained in the PBP manual
    The serial parameters and baud rate are specified using DEFINEs:

    ' Set receive register to receiver enabled
    DEFINE HSER_RCSTA 90h

    ' Set transmit register to transmitter enabled
    DEFINE HSER_TXSTA 20h

    ' Set baud rate
    DEFINE HSER_BAUD 2400

    ' Set SPBRG directly (normally set by HSER_BAUD)
    DEFINE HSER_SPBRG 25

    HSEROUT assumes a 4MHz oscillator when calculating the baud rate. To maintain the proper baud rate timing with other oscillator values, be sure to DEFINE the OSC setting to the new oscillator value.
    In your case, the DEFINE list would look something like
    Code:
    DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive
    DEFINE HSER_TXSTA 24h ' Enable transmit, BRGH = 1
    DEFINE HSER_SPBRG 25  ' 115200 Baud @ 48MHz, 0.16%
    DEFINE HSER_CLROERR 1 ' Clear overflow automatically
    HTH
    Steve

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

  40. #40
    Join Date
    Jun 2009
    Posts
    8

    Unhappy when i have delay nothing is working...!!!! WHY

    DEFINE OSC 48

    Buffer VAR BYTE[16]
    Cnt VAR BYTE
    B0 VAR BYTE
    B1 VAR BYTE
    led var porta.3

    ADCON1 = 15 ' Set all I/Os to Digital
    CMCON = 7 ' Disable Comparators
    Cnt = 16

    USBInit ' Initialize USART
    start:
    for b0 = 0 to 15
    lookup b0,["USB CONNECTED!",10,13],B1
    BUFFER(B0) = B1
    NEXT B0
    gosub send
    ledl:
    high led
    pause 1000'(when i have delay nothing is working)
    low led

    afterled:
    for b0 = 0 to 15
    lookup b0,["closed led",10,13],B1
    BUFFER(B0) = B1
    NEXT B0
    gosub send
    goto start

    send:
    USBService ' Must service USB regularly
    USBOut 3, Buffer, Cnt,send
    return
    end

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. One USB keyboard to Two USB Ports
    By picnaut in forum mel PIC BASIC Pro
    Replies: 1
    Last Post: - 11th June 2009, 00:04
  3. USB CDC help..
    By jchandir in forum USB
    Replies: 6
    Last Post: - 22nd November 2008, 21:23
  4. Replies: 4
    Last Post: - 5th November 2008, 16:21
  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 : 2

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