PDA

View Full Version : Send data to PC USB



konter
- 13th December 2009, 07:26
Hi,
I'm doing a program for viewing data from PC to PIC and vice versa.
When filling the fields of TextBox in VB6 application and press the "Send" button I see on the display the data correctly.
But when it comes to receiving the data to be invented in the Subroutine "EnviarDatos" the Pic not visualize anything in the TextBox.
Here I leave the program for the PIC and the subroutine VB6 "OnRead" for you dig where you're going to have a look at the ruling.

in this line means: USBIn 1, USBBuffer, USBBufferSizeRX, DoUSBIn
The USB 1 it means?

Thanks again ....


______PIC_________________________________________ _________________________

Device = 18F4550
Xtal = 48

USB_Descriptor = "Pruebas.inc"
Declare LCD_Type Samsung
Declare LCD_Interface 8
Declare LCD_DTPort = PORTB
Declare LCD_CS1Pin = PORTD.5
Declare LCD_CS2Pin = PORTD.4
Declare LCD_RWPin = PORTD.6
Declare LCD_RSPin = PORTD.7
Declare LCD_ENPin = PORTC.7
Declare GLCD_CS_Invert On
All_Digital = TRUE

'SIZES OF USB BUFFER
Symbol USBBufferSizeMax = 10
Symbol USBBufferSizeTX = 10
Symbol USBBufferSizeRX = 10
Dim USBBuffer[USBBufferSizeMax] As Byte
Dim USBBufferCount As Byte



Symbol LED = PORTC.1 'LED will PORTC.1 CALL OUT
Dim LEDUSB As Bit 'STATUS LED (OFF or ON) 1
Dim A As Word 'MULTI-VARIABLE
Dim B As Bit 'Biester VARIABLE IN WHICH RECEIVE THE BUTTON

'REGISTROS Y BANDERAS
Dim PP0 As Byte System ' EGISTRATION STATUS WITHIN THE PIC USBPOLL
Symbol CARRY_FLAG = STATUS.0 ' IF HIGH IN STATE HAS NO PIC
'CONTROL ON THE BUFFER
Symbol ATTACHED_STATE = 6 'IF USB IS CONNECTED

Cls 'CLEAN START TO DISPLAY
Clear 'CLEAN THE RAM TO START

Internal_Font = On
Font_Addr = 1

Print Cls,"Connecting ..."
GoSub AttachToUSB
High LED
Print Cls,"OK"
USBBuffer[0]= 0 'Flag data 0=Receive (PC>PIC)
' 1=Send (PIC>PC)
ProgramLoop:
GoSub DoUSBIn 'I will read the input buffer
If USBBuffer[0]= 1 Then
Print At 0,9, "Sending ..."
GoSub EnviarDatos
Else
Print At 0,9, "Reading ..."
Print At 0,8,Dec USBBuffer[0] 'I read the data from the PC and displayed on the GLCD
Print At 2,1, Dec USBBuffer[2]
Print At 3,1, Dec USBBuffer[3]
Print At 4,1, Dec USBBuffer[4]
Print At 5,1, Dec USBBuffer[5]
Print At 2,8, Dec USBBuffer[6]
Print At 3,8, Dec USBBuffer[7]
Print At 4,8, Dec USBBuffer[8]
Print At 5,8, Dec USBBuffer[9]
DelayMS 1
GoSub DoUSBIn
End If
Toggle LED
GoTo ProgramLoop 'Closes the loop AFTER ALL THE WORK



' ************************************************** **********
' * RECEIPT OF DATA ROUTINE *
' ************************************************** **********
DoUSBIn:
USBBufferCount = USBBufferSizeTX
USBSERVICE
USBIn 1, USBBuffer, USBBufferSizeRX, DoUSBIn
Return

' ************************************************** **********
' * DATA TRANSFER ROUTINE *
' ************************************************** **********
DoUSBOut:
USBBufferCount = USBBufferSizeTX
USBSERVICE
USBOut 1, USBBuffer, USBBufferSizeTX, DoUSBOut
Return

' ************************************************** **********
' * Wait until the USB connects*
' ************************************************** **********
AttachToUSB:
Repeat
USBPoll
Until PP0 = ATTACHED_STATE
Return

EnviarDatos:
USBBuffer[2] = 1
USBBuffer[3] = 2
USBBuffer[4] = 3
USBBuffer[5] = 4
USBBuffer[6] = 5
USBBuffer[7] = 6
USBBuffer[8] = 7
USBBuffer[9] = 8
DelayMS 1 'GIVE A TIME OF DELAY
GoSub DoUSBOut 'Sending data in the buffer for the PC
Return

End
Include "FONT.INC"

_______ VB6 __________________________________________________

Public Sub OnRead(ByVal pHandle As Long)

' read the data (don't forget, pass the whole array)...
If hidRead(pHandle, BufferIn(0)) Then
' ** YOUR CODE HERE **
' first byte is the report ID, e.g. BufferIn(0)
' the other bytes are the data from the microcontrolller...
Text1(1).Text = BufferIn(2)
Text1(2).Text = BufferIn(3)
Text1(3).Text = BufferIn(4)
Text1(4).Text = BufferIn(5)
Text1(5).Text = BufferIn(6)
Text1(6).Text = BufferIn(7)
Text1(7).Text = BufferIn(8)
Text1(8).Text = BufferIn(9)
End If
End Sub

jonewoo
- 17th December 2009, 07:41
Right so...What I am doing in my project is as follows:
1. I am using the LM35 temperature sensor and converting the analog output into digital using PIC's A/D
2. Then I want to send this output to the PC

Now here are my series of doubts after making lots of efforts on the internet and google.
1. How do I transfer the bits of the digital output which is produced by the A/D and stored in the ADRESH and ADDRESL registers?
2. Will it come out of a port serially?(Do I have to code it that way?)
3.How do I get the readings on the PC side in Hyper Terminal?

Thanks in advance,

konter
- 18th December 2009, 21:57
Sorry, But I´m working with USB not Hyper Terminal (Serial).
THX.