USB CDC Communications for Dummies!


Closed Thread
Results 1 to 40 of 105

Hybrid View

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

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

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

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

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

  6. #6
    Join Date
    Jun 2009
    Posts
    8

    Default

    everything is working perfect i have connect it with labview but when i am using PAUSE 1000 nothing is working !!!!!!!

  7. #7
    Join Date
    Feb 2006
    Location
    Gilroy, CA
    Posts
    1,530

    Default

    Its the:

    Code:
    USBService ' Must service USB regularly
    part. It must be serviced every 10 ms, or your communication will drop. So your pause 1000 is about 100 times too long. Some people have used Darrel's interrupt routines for the service interval. Here is one link:

    http://www.picbasic.co.uk/forum/show...5302#post45302
    http://www.scalerobotics.com

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