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:
The test program in the PC is a simple VB6 routine: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
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.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
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




Bookmarks