USBDemo, something to learn USB a little bit


Results 1 to 40 of 279

Threaded View

  1. #11
    Join Date
    Dec 2010
    Location
    Tokyo
    Posts
    3


    Did you find this post helpful? Yes | No

    Default USBout sends garbage byte ahead of message

    Hi,
    I am new and this is my first posting, please don't shoot me in case of mistakes.

    Today I started to use PicPasic Pro 2.6 with MPLAB IDE 8.60 and tried out the usb_demo.bas sample immediately.

    MPLAB file list:
    CDC_DEMO.BAS
    CDC_DESC.BAS
    USB_CDC.ASM
    USB_CDC.INC
    USB_MEM.ASM
    USB_DEV.ASM
    USB_DEV.INC


    CDC_DEMO.BAS Code:
    Code:
    ' USB sample program for PIC18F4550 CDC serial port emulation
    '  Requires PBP 2.60 or later
    
    '  Compilation of this program requires that specific support files be
    '  available in the source directory.  For detailed information, see
    '  the file PBP\USB18\USB.TXT.
    
    	Include	"cdc_desc.bas"	' Include the HID descriptors
    
    Define  OSC     48
    
    buffer	Var	Byte[16]
    cnt	Var	Byte
    
    
    	OSCTUNE.6 = 1		' Enable PLL for 18F87J50 family
    	Pause 10
    
    	USBInit			' Get USB going
    
    ' Wait for USB input
    idleloop:
    	USBService		' Must service USB regularly
    	cnt = 16		' Specify input buffer size
    	USBIn 3, buffer, cnt, idleloop
    
    ' Message received
    	buffer[0] = "H"
    	buffer[1] = "e"
    	buffer[2] = "l"
    	buffer[3] = "l"
    	buffer[4] = "o"
    	buffer[5] = " "
    	buffer[6] = "W"
    	buffer[7] = "o"
    	buffer[8] = "r"
    	buffer[9] = "l"
    	buffer[10] = "d"
    	buffer[11] = 13
    	buffer[12] = 10
    	buffer[13] = 0
    
    outloop:
    	USBService		' Must service USB regularly
    	USBOut 3, buffer, 14, outloop
    
    	Goto idleloop		' Wait for next buffer
    The test program in the PC is a simple VB6 routine:
    Code:
    ;---------------- Write to PIC --------------------------
    Private Sub Out3Byte(bus As Byte, adr As Byte, data As Byte)
    Dim Com(2) As Byte
    Com(0) = bus: Com(1) = adr: Com(2) = data
        '3 byte send
        MSComm1.Output = Com
    End Sub
    ;----------------- Receive from PIC ----------------------
    Private Sub MSComm1_OnComm()
    Dim data As String, ende As Boolean
    ende = False: Text1.Text = ""
        Static IsActive As Boolean
        MSComm1.RThreshold = 0
        If IsActive Then
            Label4.Caption = "OnComm Ueberschneidung"
           Exit Sub
        End If
            Do Until ende
                If MSComm1.InBufferCount > 1 Then     'min 1byte recvd
                data = MSComm1.Input
                Text1.Text = Text1.Text + Hex$(AscB(data)) + " "
                Else
                ende = True
                End If
            DoEvents
            Loop
    IsActive = False
    MSComm1.RThreshold = 1
    End Sub
    In general it works fine but, for one little but crucial problem I cant find the reason, so I suspect the problem to be with the PBP compilation.

    The 3 bytes from the PC are always received properly, but the "Hello World" message arrives in the PC correctly only the first time immediately after Com Port Open statement. When continuously sending and receiving, at the beginning of the messages there is always one garbage byte ahead of "Hello World". The value is always the same, but depends one actual memory location in PIC RAM of "buffer Var Byte[16]"

    Can anyone help?

    CDC_DEMO_transmission_log:
    Code:
    35	VB6.EXE	IOCTL_SERIAL_SET_BAUD_RATE	USBSER000	SUCCESS	Rate: 115200	
    36	VB6.EXE	IOCTL_SERIAL_CLR_RTS	USBSER000	SUCCESS		
    37	VB6.EXE	IOCTL_SERIAL_SET_DTR	USBSER000	SUCCESS		
    38	VB6.EXE	IOCTL_SERIAL_SET_LINE_CONTROL	USBSER000	SUCCESS	StopBits: 1 Parity: NONE WordLength: 8	
    39	VB6.EXE	IOCTL_SERIAL_SET_CHAR	USBSER000	SUCCESS	EOF:1a ERR:0 BRK:0 EVT:0 XON:11 XOFF:13	
    40	VB6.EXE	IOCTL_SERIAL_SET_HANDFLOW	USBSER000	SUCCESS	Shake:1 Replace:0 XonLimit:8000 XoffLimit:8000	
    41	VB6.EXE	IOCTL_SERIAL_GET_COMMSTATUS	USBSER000	SUCCESS		
    42	VB6.EXE	IRP_MJ_WRITE	USBSER000	SUCCESS	Length 3: A1 A9 AF	<3 bytes send 	
    43	VB6.EXE	IOCTL_SERIAL_GET_COMMSTATUS	USBSER000	SUCCESS		
    44	VB6.EXE	IOCTL_SERIAL_SET_WAIT_MASK	USBSER000	SUCCESS	Mask: RXCHAR TXEMPTY CTS DSR RLSD BRK ERR RING 	
    45	VB6.EXE	IOCTL_SERIAL_GET_COMMSTATUS	USBSER000	SUCCESS		
    46	VB6.EXE	IOCTL_SERIAL_WAIT_ON_MASK	USBSER000	SUCCESS		
    47	VB6.EXE	IOCTL_SERIAL_GET_COMMSTATUS	USBSER000	SUCCESS		
    48	VB6.EXE	IRP_MJ_READ	USBSER000	SUCCESS	Length 1: 48 	   <----- Starts with "H"
    49	VB6.EXE	IOCTL_SERIAL_GET_COMMSTATUS	USBSER000	SUCCESS		
    50	VB6.EXE	IOCTL_SERIAL_GET_COMMSTATUS	USBSER000	SUCCESS		
    51	VB6.EXE	IRP_MJ_READ	USBSER000	SUCCESS	Length 1: 65 	
    52	VB6.EXE	IOCTL_SERIAL_GET_COMMSTATUS	USBSER000	SUCCESS		
    53	VB6.EXE	IOCTL_SERIAL_GET_COMMSTATUS	USBSER000	SUCCESS		
    54	VB6.EXE	IRP_MJ_READ	USBSER000	SUCCESS	Length 1: 6C 	
    55	VB6.EXE	IOCTL_SERIAL_GET_COMMSTATUS	USBSER000	SUCCESS		
    56	VB6.EXE	IOCTL_SERIAL_GET_COMMSTATUS	USBSER000	SUCCESS		
    57	VB6.EXE	IRP_MJ_READ	USBSER000	SUCCESS	Length 1: 6C 	
    58	VB6.EXE	IOCTL_SERIAL_GET_COMMSTATUS	USBSER000	SUCCESS		
    59	VB6.EXE	IOCTL_SERIAL_GET_COMMSTATUS	USBSER000	SUCCESS		
    60	VB6.EXE	IRP_MJ_READ	USBSER000	SUCCESS	Length 1: 6F 	
    61	VB6.EXE	IOCTL_SERIAL_GET_COMMSTATUS	USBSER000	SUCCESS		
    62	VB6.EXE	IOCTL_SERIAL_GET_COMMSTATUS	USBSER000	SUCCESS		
    63	VB6.EXE	IRP_MJ_READ	USBSER000	SUCCESS	Length 1: 20 	
    64	VB6.EXE	IOCTL_SERIAL_GET_COMMSTATUS	USBSER000	SUCCESS		
    65	VB6.EXE	IOCTL_SERIAL_GET_COMMSTATUS	USBSER000	SUCCESS		
    66	VB6.EXE	IRP_MJ_READ	USBSER000	SUCCESS	Length 1: 57 	
    67	VB6.EXE	IOCTL_SERIAL_GET_COMMSTATUS	USBSER000	SUCCESS		
    68	VB6.EXE	IOCTL_SERIAL_GET_COMMSTATUS	USBSER000	SUCCESS		
    69	VB6.EXE	IRP_MJ_READ	USBSER000	SUCCESS	Length 1: 6F 	
    70	VB6.EXE	IOCTL_SERIAL_GET_COMMSTATUS	USBSER000	SUCCESS		
    71	VB6.EXE	IOCTL_SERIAL_GET_COMMSTATUS	USBSER000	SUCCESS		
    72	VB6.EXE	IRP_MJ_READ	USBSER000	SUCCESS	Length 1: 72 	
    73	VB6.EXE	IOCTL_SERIAL_GET_COMMSTATUS	USBSER000	SUCCESS		
    74	VB6.EXE	IOCTL_SERIAL_GET_COMMSTATUS	USBSER000	SUCCESS		
    75	VB6.EXE	IRP_MJ_READ	USBSER000	SUCCESS	Length 1: 6C 	
    76	VB6.EXE	IOCTL_SERIAL_GET_COMMSTATUS	USBSER000	SUCCESS		
    77	VB6.EXE	IOCTL_SERIAL_GET_COMMSTATUS	USBSER000	SUCCESS		
    78	VB6.EXE	IRP_MJ_READ	USBSER000	SUCCESS	Length 1: 64 	
    79	VB6.EXE	IOCTL_SERIAL_GET_COMMSTATUS	USBSER000	SUCCESS		
    80	VB6.EXE	IOCTL_SERIAL_GET_COMMSTATUS	USBSER000	SUCCESS		
    81	VB6.EXE	IRP_MJ_READ	USBSER000	SUCCESS	Length 1: 0D 	
    82	VB6.EXE	IOCTL_SERIAL_GET_COMMSTATUS	USBSER000	SUCCESS		
    83	VB6.EXE	IOCTL_SERIAL_GET_COMMSTATUS	USBSER000	SUCCESS		
    84	VB6.EXE	IRP_MJ_READ	USBSER000	SUCCESS	Length 1: 0A 	
    85	VB6.EXE	IOCTL_SERIAL_GET_COMMSTATUS	USBSER000	SUCCESS		
    86	VB6.EXE	IOCTL_SERIAL_GET_COMMSTATUS	USBSER000	SUCCESS		
    87	VB6.EXE	IOCTL_SERIAL_GET_COMMSTATUS	USBSER000	SUCCESS		
    88	VB6.EXE	IOCTL_SERIAL_GET_COMMSTATUS	USBSER000	SUCCESS		
    89	VB6.EXE	IOCTL_SERIAL_GET_PROPERTIES	USBSER000	SUCCESS		
    90	VB6.EXE	IRP_MJ_WRITE	USBSER000	SUCCESS	Length 3: A1 A9 AF	<3bytes send 	
    91	VB6.EXE	IOCTL_SERIAL_GET_COMMSTATUS	USBSER000	SUCCESS		
    92	VB6.EXE	IOCTL_SERIAL_SET_WAIT_MASK	USBSER000	SUCCESS	Mask: RXCHAR TXEMPTY CTS DSR RLSD BRK ERR RING 	
    93	B6.EXE	IOCTL_SERIAL_WAIT_ON_MASK	USBSER000	SUCCESS		
    94	VB6.EXE	IOCTL_SERIAL_GET_COMMSTATUS	USBSER000	SUCCESS		
    95	VB6.EXE	IOCTL_SERIAL_GET_COMMSTATUS	USBSER000	SUCCESS		
    96	VB6.EXE	IRP_MJ_READ	USBSER000	SUCCESS	Length 1: 00		<----- starts with "0x00"
    97	VB6.EXE	IOCTL_SERIAL_GET_COMMSTATUS	USBSER000	SUCCESS		
    98	VB6.EXE	IOCTL_SERIAL_GET_COMMSTATUS	USBSER000	SUCCESS		
    99	B6.EXE	IRP_MJ_READ	USBSER000	SUCCESS	Length 1: 48 		<----- "H" is 2nd byte
    100	VB6.EXE	IOCTL_SERIAL_GET_COMMSTATUS	USBSER000	SUCCESS		
    101	VB6.EXE	IOCTL_SERIAL_GET_COMMSTATUS	USBSER000	SUCCESS		
    102	VB6.EXE	IRP_MJ_READ	USBSER000	SUCCESS	Length 1: 65 	
    103	VB6.EXE	IOCTL_SERIAL_GET_COMMSTATUS	USBSER000	SUCCESS		
    104	VB6.EXE	IOCTL_SERIAL_GET_COMMSTATUS	USBSER000	SUCCESS		
    105	VB6.EXE	IRP_MJ_READ	USBSER000	SUCCESS	Length 1: 6C 	
    106	VB6.EXE	IOCTL_SERIAL_GET_COMMSTATUS	USBSER000	SUCCESS		
    107	VB6.EXE	IOCTL_SERIAL_GET_COMMSTATUS	USBSER000	SUCCESS		
    108	VB6.EXE	IRP_MJ_READ	USBSER000	SUCCESS	Length 1: 6C 	
    109	VB6.EXE	IOCTL_SERIAL_GET_COMMSTATUS	USBSER000	SUCCESS		
    110	VB6.EXE	IOCTL_SERIAL_GET_COMMSTATUS	USBSER000	SUCCESS		
    111	VB6.EXE	IRP_MJ_READ	USBSER000	SUCCESS	Length 1: 6F 	
    112	VB6.EXE	IOCTL_SERIAL_GET_COMMSTATUS	USBSER000	SUCCESS		
    113	VB6.EXE	IOCTL_SERIAL_GET_COMMSTATUS	USBSER000	SUCCESS		
    114	VB6.EXE	IRP_MJ_READ	USBSER000	SUCCESS	Length 1: 20 	
    115	VB6.EXE	IOCTL_SERIAL_GET_COMMSTATUS	USBSER000	SUCCESS		
    116	VB6.EXE	IOCTL_SERIAL_GET_COMMSTATUS	USBSER000	SUCCESS		
    117	VB6.EXE	IRP_MJ_READ	USBSER000	SUCCESS	Length 1: 57 	
    118	VB6.EXE	IOCTL_SERIAL_GET_COMMSTATUS	USBSER000	SUCCESS		
    119	VB6.EXE	IOCTL_SERIAL_GET_COMMSTATUS	USBSER000	SUCCESS		
    120	VB6.EXE	IRP_MJ_READ	USBSER000	SUCCESS	Length 1: 6F 	
    121	VB6.EXE	IOCTL_SERIAL_GET_COMMSTATUS	USBSER000	SUCCESS		
    122	VB6.EXE	IOCTL_SERIAL_GET_COMMSTATUS	USBSER000	SUCCESS		
    123	VB6.EXE	IRP_MJ_READ	USBSER000	SUCCESS	Length 1: 72 	
    124	VB6.EXE	IOCTL_SERIAL_GET_COMMSTATUS	USBSER000	SUCCESS		
    125	VB6.EXE	IOCTL_SERIAL_GET_COMMSTATUS	USBSER000	SUCCESS		
    126	VB6.EXE	IRP_MJ_READ	USBSER000	SUCCESS	Length 1: 6C 	
    127	VB6.EXE	IOCTL_SERIAL_GET_COMMSTATUS	USBSER000	SUCCESS		
    128	VB6.EXE	IOCTL_SERIAL_GET_COMMSTATUS	USBSER000	SUCCESS		
    129	VB6.EXE	IRP_MJ_READ	USBSER000	SUCCESS	Length 1: 64 	
    130	VB6.EXE	IOCTL_SERIAL_GET_COMMSTATUS	USBSER000	SUCCESS		
    131	VB6.EXE	IOCTL_SERIAL_GET_COMMSTATUS	USBSER000	SUCCESS		
    132	VB6.EXE	IRP_MJ_READ	USBSER000	SUCCESS	Length 1: 0D 	
    133	VB6.EXE	IOCTL_SERIAL_GET_COMMSTATUS	USBSER000	SUCCESS		
    134	VB6.EXE	IOCTL_SERIAL_GET_COMMSTATUS	USBSER000	SUCCESS		
    135	VB6.EXE	IRP_MJ_READ	USBSER000	SUCCESS	Length 1: 0A 	
    136	VB6.EXE	IOCTL_SERIAL_GET_COMMSTATUS	USBSER000	SUCCESS		
    137	VB6.EXE	IOCTL_SERIAL_GET_COMMSTATUS	USBSER000	SUCCESS		
    138	VB6.EXE	IOCTL_SERIAL_GET_COMMSTATUS	USBSER000	SUCCESS		
    139	VB6.EXE	IOCTL_SERIAL_GET_COMMSTATUS	USBSER000	SUCCESS		
    140	VB6.EXE	IOCTL_SERIAL_GET_PROPERTIES	USBSER000	SUCCESS		
    141	VB6.EXE	IRP_MJ_WRITE	USBSER000	SUCCESS	Length 3: A1 A9 AF	<3 bytes send	
    142	VB6.EXE	IOCTL_SERIAL_GET_COMMSTATUS	USBSER000	SUCCESS		
    143	VB6.EXE	IOCTL_SERIAL_SET_WAIT_MASK	USBSER000	SUCCESS	Mask: RXCHAR TXEMPTY CTS DSR RLSD BRK ERR RING 	
    144	VB6.EXE	IOCTL_SERIAL_WAIT_ON_MASK	USBSER000	SUCCESS		
    145	VB6.EXE	IOCTL_SERIAL_GET_COMMSTATUS	USBSER000	SUCCESS		
    146	VB6.EXE	IOCTL_SERIAL_GET_COMMSTATUS	USBSER000	SUCCESS		
    147	VB6.EXE	IRP_MJ_READ	USBSER000	SUCCESS	Length 1: 00 <garbage again
    148	VB6.EXE	IOCTL_SERIAL_GET_COMMSTATUS	USBSER000	SUCCESS		
    149	VB6.EXE	IOCTL_SERIAL_GET_COMMSTATUS	USBSER000	SUCCESS		
    150	VB6.EXE	IRP_MJ_READ	USBSER000	SUCCESS	Length 1: 48 
    
    
    Last edited by sjm2000; - 3rd December 2010 at 12:03.

Similar Threads

  1. Bits, Bytes Words and Arrays
    By Melanie in forum FAQ - Frequently Asked Questions
    Replies: 24
    Last Post: - 14th June 2016, 07:55
  2. How to receive stream of bytes using PIC USART
    By unifoxz in forum mel PIC BASIC Pro
    Replies: 34
    Last Post: - 20th June 2009, 10:38
  3. Replies: 9
    Last Post: - 31st July 2008, 08:56
  4. PICBasic newbie problem
    By ELCouz in forum mel PIC BASIC Pro
    Replies: 32
    Last Post: - 12th February 2008, 00:55
  5. USART interrupt not interrupting right
    By Morpheus in forum mel PIC BASIC Pro
    Replies: 12
    Last Post: - 6th March 2005, 01:07

Members who have read this thread : 1

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

Tags for this Thread

Posting Permissions

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