View previous topic :: View next topic |
Author |
Message |
ntgcp_08
Joined: 21 Feb 2008 Posts: 24
|
USB problem connecting to PC with 18F87J50 |
Posted: Tue Sep 30, 2008 2:20 pm |
|
|
I'm using Microchips demo board PIC18F85J50 PIM as a stand along module. All I want to do is print debug information out the USB port. However, I can not get the demo board to be recognized by my PC. I get the same message every time... "USB Device Not Recognized - One of the USB devices attached to this computer has malfunctioned, and Windows does not recognize it. For assistance in solving this problem, click this message."
Since I'm using the demo board, it can't be hardware... can it?
I'm following ex_usb_serial2.c. But here is my code...
Code: |
#include <18F87J50.h>
#FUSES NOWDT //No Watch Dog Timer
#FUSES WDT128 //Watch Dog Timer uses 1:128 Postscale
#FUSES H4_SW //High speed osc with SW enabled 4x PLL
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOXINST //Extended set extension and Indexed Addressing mode disabled (Legacy mode)
#FUSES STVREN //Stack full/underflow will cause reset
#FUSES NOPROTECT //Code not protected from reading
#FUSES FCMEN //Fail-safe clock monitor enabled
#FUSES IESO //Internal External Switch Over mode enabled
#FUSES MSSPMSK7 //#FUSES RESERVED //Used to set the reserved FUSE bits
#FUSES NOCPUDIV
#FUSES PLL3 //PLL PreScaler
#use delay(clock=12000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6, rcv=PIN_C7, bits=8,restart_wdt,STREAM=DEBUG232,errors)
#define USB_CON_SENSE_PIN PIN_B5
#define LED1 PIN_E1
#define LED2 PIN_E0
#define LED3 PIN_E2
#DEFINE BUTTON PIN_B4
#define LED_ON output_low
#define LED_OFF output_high
// Includes all USB code and interrupts, as well as the CDC API
#include <usb_cdc.h>
void main() {
int i=0;
delay_ms(3000);
fprintf(DEBUG232, "\f\r\nWe are On\r\n");
if(input(USB_CON_SENSE_PIN)) fprintf(DEBUG232, "And USB is Connected\r\n");
usb_cdc_init();
usb_init();
//while(!usb_cdc_connected()) {}
while(TRUE){
usb_task();
if (usb_enumerated()) {
printf(usb_cdc_putc, "\r\n\nUSB device connected\r\n"); // Display contents of the first 64
delay_ms(1000);
}
else{
fprintf(DEBUG232, "usb device not installed\r\n");
}
if(i++%2==0){ LED_ON(LED1); LED_OFF(LED2); }
else{ LED_OFF(LED1); LED_ON(LED2); }
delay_ms(500);
}
}
|
I'm using compiler version PCH V4.066. The demo board has a 12Mhz crystal. |
|
![](templates/subSilver/images/spacer.gif) |
ntgcp_08
Joined: 21 Feb 2008 Posts: 24
|
|
Posted: Tue Sep 30, 2008 2:47 pm |
|
|
Well, as soon as I posted, I found the issue...
I needed the following line:
setup_oscillator(OSC_PLL_ON);
and I needed to change my clock speed to 48Mhz.
After searching through the forum, I found a few times where people said if using a clock greater than 8Mhz you need to have an external oscillator, rather than a crystal. However, the demo board I have has a 12Mhz crystal and it works. Why is it recommended to not use a crystal above 8Mhz? When I make my own PCB, shoule I put a 6 or 8Mhz crystal rather than the 12Mhz? Will it be more reliable?
Thanks |
|
![](templates/subSilver/images/spacer.gif) |
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Tue Sep 30, 2008 3:01 pm |
|
|
Quote: |
I found a few times where people said if using a clock greater than
8Mhz you need to have an external oscillator, rather than a crystal.
|
Post links for these claims. |
|
![](templates/subSilver/images/spacer.gif) |
ntgcp_08
Joined: 21 Feb 2008 Posts: 24
|
|
![](templates/subSilver/images/spacer.gif) |
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Tue Sep 30, 2008 3:18 pm |
|
|
Download the 18F87J50 data sheet and look at page 39 (page 41 in
the Acrobat reader). Look at Table 2-5.
http://ww1.microchip.com/downloads/en/DeviceDoc/39775b.pdf
The first column is the crystal or external oscillator frequency. The 2nd
column is the multiplier. The 3rd column is the required fuse setting.
What Ttelmah was talking about was that for multipliers of 10 and 12,
you must use the "ECPLL" fuse. "EC" means external clock, which
means an external oscillator (not a crystal).
All the rest of the multiplier settings can use a crystal. You can tell this
because they allow a fuse of "HSPLL". That's a crystal fuse setting.
The crystals can be up to 24 MHz in frequency. A crystal of 12 MHz is
shown in the table and therefore it's OK to use. |
|
![](templates/subSilver/images/spacer.gif) |
|