View previous topic :: View next topic |
Author |
Message |
DragonPIC
Joined: 11 Nov 2003 Posts: 118
|
USB on PIC18F26J50 |
Posted: Mon May 10, 2010 9:28 am |
|
|
Just put some code together to use USB on the PIC18F26J50. It is basically just the ex_usb_serial2.c example code included with PCWH, but without the debug code and eeprom. I get a connection with my Windows 7 (64-bit) computer want will find the "SERIAL DEMO" in "Other devices" in my Device manager. No driver is being detected. The Example code indicates that Windows with detect a generic driver to use as a COM. I cannot find a compatible driver.
Here is my code.
Code: | #include <18F26J50.h>
#device adc=10
#FUSES NODEBUG
#FUSES NOXINST
#FUSES STVREN
#FUSES PRIMARY
#FUSES PLLDIV2
#FUSES NOWDT
//#FUSES CPUDIV6
#FUSES NOCPUDIV
#FUSES PROTECT
#FUSES NOIESO
#FUSES NOFCMEN
#FUSES NOLPT1OSC
#FUSES NOT1DIG
#FUSES INTRC_PLL_IO
//#FUSES INTRC_IO
#FUSES WDT128
#FUSES RTCOSC_T1
#FUSES DSWDTOSC_INT
#FUSES NODSWDT
#FUSES NODSBOR
#FUSES DSWDT2147483648
#FUSES MSSPMSK7
#FUSES NOIOL1WAY
#FUSES NOWPCFG
#FUSES WPFP
#FUSES WPEND
#FUSES WPDIS
#use delay(clock=48000000)
#ZERO_RAM
#include <stdio.h>
#include <stdlib.h>
#define USB_CON_SENSE_PIN PIN_C2 //Voltage level converted
#include <usb_cdc.h>
#include "defines.c" //all defines
#define a_dir 0x5B //directional running
#define a_dirs 0x5B //directional sleep
#define a_def 0x00
#define b_dir 0xF6 //directional running
#define b_dirs 0xF6 //directional sleep
#define b_def 0x00
#define c_dir 0x4E //directional running
#define c_dirs 0x4E //directional sleep
#define c_def 0x00
/************ Main ****************/
void main()
{
int i, j, address, value;
setup_adc(ADC_OFF); //disable ADC
setup_wdt(WDT_OFF);
setup_timer_0(RTCC_INTERNAL | RTCC_DIV_4);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
setup_oscillator(OSC_8MHZ|OSC_NORMAL|OSC_PLL_ON|OSC_IDLE_MODE);
set_tris_a(a_dirs); //settup port directions
set_tris_b(b_dirs);
port_b_pullups(FALSE); //Don't need pull ups
set_tris_c(c_dirs);
port_a = a_def; //default pin states
port_b = b_def;
port_c = c_def;
enable_interrupts(GLOBAL);
usb_init_cs();
while(1)
{
output_bit(sleepf,0); //sleep
usb_task();
if (usb_enumerated())
{
if (usb_cdc_kbhit())
{
/****do not want to divulge too much code*****/
}
}
}
}
|
I also tried using the following with no luck:
Code: | #FUSES CPUDIV2
#use delay(clock=24000000)
#define USB_USE_FULL_SPEED 0 |
If I try to look in the PICC CCS install directory, a USB to UART driver is found but cannot starts device (error code 10).
Any help would be appreciated.
-Matt _________________ -Matt
Last edited by DragonPIC on Mon May 10, 2010 9:46 am; edited 1 time in total |
|
|
DragonPIC
Joined: 11 Nov 2003 Posts: 118
|
|
Posted: Mon May 10, 2010 9:35 am |
|
|
Another look and the only difference between the high and low speed setting I listed above is that Windows device manager actually changed the name from SERIAL DEMO to "USB to UART" in low speed. So maybe something worked better in low-speed. Still have the exclamation point next to it though. _________________ -Matt |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19498
|
|
Posted: Mon May 10, 2010 3:00 pm |
|
|
INT_RC, _only_ supports low speed operation. It is not accurate enough for high speed (in the data sheet....). Section 2.4:
"The high accuracy of the INTOSC will allow the application to meet low-speed USB signal rate specifications.".
Note the use of 'low speed' here.
Then do a search here. Patches have been posted for the standard .inf file to make it work in W7 64bit. By default it won't.
Best Wishes |
|
|
DragonPIC
Joined: 11 Nov 2003 Posts: 118
|
Speed |
Posted: Mon May 10, 2010 4:40 pm |
|
|
Yes, I seen someone mention the speed issue in another post. I figure I'd give it a shot since it was listed as an option in table 2-5.
Windows did seem to at least kind of recognize it though.
Anyway, that's not a problem for me since I probably won't need all that speed. That is why I tried out the low speed configuration.
I also found the cdc_NTXPVista.inf and had no luck (unless Windows 7 isn't reading my updated file). Looking at the driver CCS gave (dated the same as the post with that fix) it seemed to have the support for it. My driver seems to be dated the same as that post (1/15/2010). Mine reads:
Code: |
[Manufacturer]
%CCS%=CCS,NTamd64
[CCS]
%CCS_CDC%=Reader, USB\VID_0461&PID_0033
%CCS_CDCBOOT%=Reader, USB\VID_0461&PID_0034
[CCS.NTamd64]
%CCS_CDC%=Reader, USB\VID_0461&PID_0033
%CCS_CDCBOOT%=Reader, USB\VID_0461&PID_0034
[Reader_Install.NTx86]
;Windows2000
|
I'll give it another shot though.
Thanks Ttelmah,
Matt _________________ -Matt |
|
|
DragonPIC
Joined: 11 Nov 2003 Posts: 118
|
|
Posted: Tue May 11, 2010 12:21 pm |
|
|
I got a chance to go back to a Windows 2000 32-bit computer and everything seems to be working fine on there if I use the low-speed configuration. There must be something wrong with the Windows 7 64-bit driver. _________________ -Matt |
|
|
|