|
|
View previous topic :: View next topic |
Author |
Message |
jaikumar
Joined: 15 Dec 2006 Posts: 109
|
help! cdc example - 18f2450 problem. |
Posted: Wed Dec 24, 2008 2:00 am |
|
|
What do I have to modify to make cdc example work in 18F2450 ?
The chip is able to send data but not receiving data.
Example works with 18F2550.
Code: |
do {
usb_task();
if (usb_enumerated()) {
printf(usb_cdc_putc, "\r\nHello World !");
RcvUSB = usb_cdc_getc(); !!!!THIS IS NOT WORKING!!!!
if (RcvUSB=='b') {
printf(usb_cdc_putc, "\r\nSee how I blink 20 times on Port A.0 !");
for (i=1;i<=20;i++) {
output_bit( PIN_B0, 1);
delay_ms(250);
output_bit( PIN_B0, 0);
delay_ms(250);
};
}
else
printf(usb_cdc_putc, "\r\nI just received : %c",RcvUSB);
}
} while (TRUE);
} |
Thanks and regards,
Jai. |
|
|
FvM
Joined: 27 Aug 2008 Posts: 2337 Location: Germany
|
|
Posted: Wed Dec 24, 2008 2:49 am |
|
|
Did you also examine the CCS provided CDC examples? Generally, they use a construct like this:
Code: | if (usb_cdc_kbhit()) {
c=usb_cdc_getc();
//....
} |
If you call usb_cdc_getc() without a character available, the program will wait for a character, pausing service of the USB interface. This may cause the host to suspend the device.
As another point, I experienced a problem with the CCS USB driver, that apparently failed to reenable global interrupts in some situation. I didn't further investigate the issue, but added an additional reenable at the end of the main loop:
Code: | enable_interrupts(GLOBAL); |
It can't do any harm, cause global interrupts are enabled at that program level anyway, but effectively removed my problem.
Best regards and Merry Christmas
Frank |
|
|
capnmattttt Guest
|
help! cdc example - 18f2450 problem. |
Posted: Mon Jan 05, 2009 11:06 pm |
|
|
I am having a similar problem with the 18F2450. I can send characters from the PIC, but I don't seem to receive characters.
Here is my code.
Code: | #include <18F2450.h>
#device adc=8
#fuses ECPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL1,CPUDIV4,VREGEN
#use delay(clock=16000000)
#include <usb_cdc.h>
#define led1 pin_c6
#define led2 pin_c7
#define LED_ON output_high
#define LED_OFF output_low
int8 DATA_RX[1];
//int8 byte1;
void main(){
//int8 i;
LED_OFF(led1);
LED_OFF(led2);
usb_init();
while (true) {
if (usb_enumerated()){
led_on(led1);
if(usb_cdc_kbhit()){
//for (i=0;i<31;++i){
DATA_RX[0] = usb_cdc_getc();
LED_ON(led2);
Delay_ms(200);
LED_OFF(led2);
//}
//for (i=0;i<32;++i){
usb_cdc_putc(DATA_RX[0]);
//}
Delay_ms(200);
LED_ON(led2);
Delay_ms(200);
LED_OFF(led2);
}
}
}
enable_interrupts(GLOBAL);
} |
|
|
|
jaikumar
Joined: 15 Dec 2006 Posts: 109
|
Give it up. Use the 18F2550. |
Posted: Thu Jan 08, 2009 2:12 am |
|
|
My Advice,
Give it up. Don't waste time. The cdc uses about 65% of RAM and believe me
you need a lot of them.
I wonder even if the 18F2550 is Good enough for a bit large app. This cdc example and all other do work on 18F2550 so Change your chip.
Any way here in india we don't save too much money any way.
Regards,
Jai. |
|
|
FvM
Joined: 27 Aug 2008 Posts: 2337 Location: Germany
|
|
Posted: Thu Jan 08, 2009 2:54 am |
|
|
You're right, that RAM capacity is critical with PIC2450. I don't have it and can't check, if basic CDC is working there, but I suppose it does. The present code however can't work without an usb_task() call. |
|
|
|
|
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
|