View previous topic :: View next topic |
Author |
Message |
memo
Joined: 13 Jan 2018 Posts: 3
|
PIC18F4550 USB HID using CCS PIC C |
Posted: Sun Jan 14, 2018 12:30 am |
|
|
Hi everyone I am Memo.
Can you help me please ?
I am trying to connect between pic18f4550 and pc by usb.
and i connect the pic with lcd. (The LCD is used to display the data received by the microcontroller). In this project the an external oscillator (8MHz) is used.
and this is the program:
Code: |
// PIC18F4550 USB HID Examlpe CCS C code
// http://ccspicc.blogspot.com/
// electronnote@gmail.com
// Use at your own risk
//LCD module connections
#define LCD_RS_PIN PIN_D0
#define LCD_RW_PIN PIN_D1
#define LCD_ENABLE_PIN PIN_D2
#define LCD_DATA4 PIN_D3
#define LCD_DATA5 PIN_D4
#define LCD_DATA6 PIN_D5
#define LCD_DATA7 PIN_D6
//End LCD module connections
#define USB_CONFIG_HID_TX_SIZE 16 // Transmit packet size (bytes)
#define USB_CONFIG_HID_RX_SIZE 16 // Receive packet size (bytes)
#define USB_CONFIG_PID 1 //Chnage Product Id
#define USB_CONFIG_VID 1234 //Chnage Vendor Id
#define USB_STRINGS_OVERWRITTEN
#include <18F4550.h>
#fuses HSPLL PLL2 CPUDIV1 USBDIV VREGEN NOMCLR
#use delay(clock = 48000000)
#include <lcd.c>
#define USB_STRING(x) (sizeof(_unicode(x))+2), 3, _unicode(x) // line 27
rom char USB_STRING_DESC[]={
//string 0 (must always provide this string)
//4(length of string index),3(desciptor type is string),9&4(Microsoft Defined for US-English)
4, 3, 9, 4,
//string 1 - vendor (this is optional, but we specified it's use in the device descriptor)
USB_STRING("CCS"),
//string 2 - product (this is optional, but we specified it's use in the device descriptor)
USB_STRING("USB HID Example"),
//string 3 - serial number (this is optional, but we specified it's use in the device descriptor)
USB_STRING("123456789")};
#include <usb_desc_hid.h>
#include<pic18_usb.h>
#include<usb.c>
char data[16];
void main(){
lcd_init(); // Initialize LCD module- line 43
lcd_putc('\f'); // LCD clear
lcd_gotoxy(1, 1);
lcd_putc("USB HID Example");
usb_init_cs(); // Initialize USB hardware
delay_ms(1000);
while(TRUE){
usb_task();
if(usb_enumerated()){ // If the device has been enumerated by the PC
if(usb_kbhit(1)){ // If endpoint1 has data in it's receive buffer
lcd_gotoxy(1, 2);
lcd_putc(" "); // Clear 2nd line
// Read up to 16 bytes from endpoint1 buffer and save it to variable data
usb_get_packet(1, data, 16);
lcd_gotoxy(1, 2);
printf(lcd_putc, data); // Display the received bytes on LCD
delay_ms(1000); // Wait 1 second
// Return the received bytes back
usb_put_packet(1, data, 16, USB_DTS_TOGGLE);
}
}
}
}
|
When I compile this program
the message show:
error in line 27 Expression must evaluate to a constant uncode
error in line 43 Expecting a declaration
What is the problem? |
|
![](templates/subSilver/images/spacer.gif) |
empty
Joined: 13 Jan 2018 Posts: 15
|
|
![](templates/subSilver/images/spacer.gif) |
Ttelmah
Joined: 11 Mar 2010 Posts: 19381
|
|
Posted: Sun Jan 14, 2018 4:08 am |
|
|
The key point (which is why the 'what version' question), is this relies on the _unicode macro.
Quote: |
5.033 Added new macro _unicode(), see readme.txt for details
|
So as posted will not work before V5.033. |
|
![](templates/subSilver/images/spacer.gif) |
memo
Joined: 13 Jan 2018 Posts: 3
|
|
Posted: Sun Jan 14, 2018 5:48 am |
|
|
the version is CCS 5.015 |
|
![](templates/subSilver/images/spacer.gif) |
empty
Joined: 13 Jan 2018 Posts: 15
|
|
Posted: Sun Jan 14, 2018 5:59 am |
|
|
As Ttelmah said you need version 5.033 or higher.
Actually it was tested with version 5.051. |
|
![](templates/subSilver/images/spacer.gif) |
memo
Joined: 13 Jan 2018 Posts: 3
|
|
Posted: Sun Jan 14, 2018 6:07 am |
|
|
How can I get these version ? |
|
![](templates/subSilver/images/spacer.gif) |
temtronic
Joined: 01 Jul 2010 Posts: 9177 Location: Greensville,Ontario
|
|
Posted: Sun Jan 14, 2018 6:42 am |
|
|
updates are free for awhile when you buy the compiler |
|
![](templates/subSilver/images/spacer.gif) |
Ttelmah
Joined: 11 Mar 2010 Posts: 19381
|
|
Posted: Sun Jan 14, 2018 10:00 am |
|
|
or you would have to modify the code to the older way of doing it. The usb_hid example supplied with the compiler shows how to format the descriptor without this macro. |
|
![](templates/subSilver/images/spacer.gif) |
|