CCS C Software and Maintenance Offers
FAQFAQ   FAQForum Help   FAQOfficial CCS Support   SearchSearch  RegisterRegister 

ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

CCS does not monitor this forum on a regular basis.

Please do not post bug reports on this forum. Send them to CCS Technical Support

USB HID problem with CCS example ...

 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
kozlio05



Joined: 28 May 2010
Posts: 3

View user's profile Send private message

USB HID problem with CCS example ...
PostPosted: Fri May 28, 2010 7:14 am     Reply with quote

Hello,
I'm working with the example ex_usb_hid.c given by CCS for communication with HID device. I'm using PIC18F2550. This is the beginning of my source:
Code:

#include <18F2550.h>             // header file for the PIC18F2550
                                // includes built-in functions and constants
                                // for arguments/returns.
#FUSES HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN, NOXINST
#use delay(clock=48000000)


#include <pic18_usb.h>   //Microchip PIC18Fxx5x hardware layer   
#include <usb_desc_hid.h>   //USB Configuration and Device descriptors
#include <usb.c>        //handles usb setup tokens and get descriptor

    I have not made any changes in the descriptor files. After <usb.h> is called which looks like this:


#IFNDEF __USB_PROTOTYPES__
#DEFINE __USB_PROTOTYPES__

//// CONFIGURATION ////////////////////////////////////////////////////////////

#ifndef USB_CON_SENSE_PIN
 #define USB_CON_SENSE_PIN  0
#endif

#IFNDEF USB_HID_BOOT_PROTOCOL
   #DEFINE USB_HID_BOOT_PROTOCOL FALSE
#ENDIF

#IFNDEF USB_HID_IDLE
   #DEFINE USB_HID_IDLE FALSE
#ENDIF

//should the compiler add the extra HID handler code?  Defaults to yes.
#IFNDEF USB_HID_DEVICE
   #DEFINE USB_HID_DEVICE TRUE
#ENDIF

#IFNDEF USB_CDC_DEVICE
   #DEFINE USB_CDC_DEVICE FALSE
#ENDIF

//set to false to opt for less RAM, true to opt for less ROM
#ifndef USB_OPT_FOR_ROM
   #define USB_OPT_FOR_ROM TRUE
#endif

#IFNDEF USB_MAX_EP0_PACKET_LENGTH
  #DEFINE USB_MAX_EP0_PACKET_LENGTH 8
#ENDIF


////// USER-LEVEL API /////////////////////////////////////////////////////////

/**************************************************************
/* usb_enumerated()
/*
/* Input: Global variable USB_Curr_Config
/* Returns: Returns a 1 if device is configured / enumerated,
/*          Returns a 0 if device is un-configured / not enumerated.
/*
/* Summary: See API section of USB.H for more documentation.
/***************************************************************/
int1 usb_enumerated(void);

... and so on.
After the declaration of function int1 usb_enumerated(void) this mistake was shown: A #DEVICE required before this line. My apologies but my English is far from perfect.
Ttelmah



Joined: 11 Mar 2010
Posts: 19559

View user's profile Send private message

PostPosted: Fri May 28, 2010 8:37 am     Reply with quote

How are you trying to compile this?.
From CCS, or from MPLAB?.
The fault you describe, is what you see if you try from MPLAB, and usb.c is included in the project source files. MPLAB tries to compile this "on it's own", resulting in the error you describe.

Best Wishes
kozlio05



Joined: 28 May 2010
Posts: 3

View user's profile Send private message

PostPosted: Sat May 29, 2010 6:05 am     Reply with quote

I used MPLAB because i want to use pickit2 as debugger. Indeed, i tried with CCS compiler and there were no errors. Thanks for your help.
Ttelmah



Joined: 11 Mar 2010
Posts: 19559

View user's profile Send private message

PostPosted: Sat May 29, 2010 7:16 am     Reply with quote

You can make it work with MPLAB. The problem is basically that iif you define a .c file as part of the project, MPLAB, assumes it is meant to be compiled "on it's own". In your 'project', you only want your 'main' source file. If you right click on the other files, and remove them from the project, you'll find it'll then work.

Best Wishes
kozlio05



Joined: 28 May 2010
Posts: 3

View user's profile Send private message

PostPosted: Sat May 29, 2010 9:41 am     Reply with quote

Yes, you were right, my project was compiled with MPLAB. But I have another problem - my device is not recognized by the PC. I know the problem is not in the hardware because when I try with another USB HID example written in mikroC everything works fine. This is my source:
Code:

#include <18F2550.h>         
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL2,CPUDIV2,VREGEN
#use delay(clock=48000000)

 #include <pic18_usb.h>   //Microchip PIC18Fxx5x hardware layer for usb.c
 #include <usb_desc_hid.h>   //USB Configuration and Device descriptors for this UBS device
 #include <usb.c>        //handles usb setup tokens and get descriptor reports

#use fast_io(A)                 // all other ports default to 'standard_io'
#use fast_io(B)                 // fast_io means the tris bits only change
#use fast_io(C)                 // when we explicitly set them.

#byte   PORTA       = 0xF80
#byte   PORTB       = 0xF81
#byte   PORTC       = 0xF82
#byte   ADCON1      = 0xFC1
#byte   INTCON2      = 0xFF1


#bit    RS       =  PORTC.0
#bit   RW       =  PORTC.1
#bit   EN       =  PORTC.2
#bit   BUSY    =  PORTB.4
#bit   EXT_INT0 =  PORTB.0
#bit   INTEDG0 =  INTCON2.6


int digit = 0, count = 0;

void delay()
{
   int i,j;
   for(i = 0; i < 100; i++);
}


   
   

void init_io()
{
   
    SET_TRIS_A(0x00);   
   
    // set up PORTB so RB0 is an input for the switch SW1, RB1-RB7 are outputs
    SET_TRIS_B(0x01);   // RB0 0 = input
   ADCON1 = 0b00001111;   //AN0-AN12 digital I/O
    // set up remaining ports to be all outputs
    SET_TRIS_C(0x00);

}


   
void wait_lcd()
{
   RS   =   0;         //command
   RW   =   1;         //read
   EN   =   0;
 
   PORTA = 0x0F;
   PORTB = PORTB | 0b00011110;

   EN   =   1;         //Send the command
   
   SET_TRIS_B(0b00010000);

   while (BUSY == 1);      //check if LCD is still busy

   SET_TRIS_B(0x00);
   PORTB = PORTB & 0b00000001;
   RW   =   0;            //Turn to write commands
}

void init_lcd()
{
   EN     = 1;

   PORTA = 0x08;       //Communicate with 8-bit data bus, 5x8 character font
   PORTB = PORTB | 0b00000110;
   EN     = 0;

   wait_lcd();
   EN     = 1;

   PORTA = 0x0E;      //turn LCD and cursor on
   PORTB = PORTB & 0x01;
   EN    = 0;

   wait_lcd();
}

void clear_lcd()
{
   
   PORTA = 0x01;
   EN    = 1;
   EN    = 0;
   wait_lcd();
}

void write_text()
{
   EN     = 1;
   RS     = 1;
   PORTA = digit;
   PORTB = PORTB | 0b00000110;   
   EN    = 0;
   wait_lcd();
}

#INT_EXT
EXT_isr()
{
   int units, decs, flag = 0;
   delay();
   while(EXT_INT0);
   clear_lcd();
   count = count + 1;
   
   if (count > 10)
      flag = 1;
   
jump:      
   if (flag == 0)
   {
      digit = count;
      write_text();
   }

   if (flag == 1)
   {
      decs  = count / 10;
      digit = decs;
      write_text();
   
      units = count % 10;
      digit = units;
      write_text();
   }   

}

void main(void)
{
   int8 out_data[4];
   int8 in_data[4];
   int p = 0;
   usb_init_cs();
   init_io();
   init_lcd();
   clear_lcd();
   clear_interrupt(INT_EXT);
   ext_int_edge(0,L_TO_H);
   enable_interrupts(INT_EXT);
   enable_interrupts(GLOBAL); 
 
   while (TRUE)
   {
     
      if (p = usb_enumerated())
      {
         if (usb_kbhit(1))
         {
            usb_get_packet(1, in_data, 4);
         
         }
   

         delay_ms(1);
      }
   }
}

To the original example I have added communication with LCD and external interrupt on RB0. 8 MHz quartz is used. Can you tell me if my fuses are correct ? When I try with CPUDIV1 to provide 48 MHz for CPU clock my device is not working at all. With CPUDIV2 it is working without USB connection. If fuses are correct where can be the problem? I haven't made any changes in headers and descriptor file. The processor is 18F2550.
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Sat May 29, 2010 2:00 pm     Reply with quote

Look at this thread and the links in it for tips on the Ex_usb_hid.c example:
http://www.ccsinfo.com/forum/viewtopic.php?t=39878
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group