que es el CDC por que yo comunique mi Pic 4550 con usb pero en modo Com y no tengo ningumproblema con el Seven De FResaUna de las 4 clases de comunicación que se puede establecer con USB (USB CDC o USB communications device class), en si emula el puerto serial, osea que al conectar el dispositivo USB se genera un puerto serial con el cual se establece comunicación.-
El problema es que windows vista no soporta la comunicación cdc, si windows 7 es igual, me da que tienes que hacer un usb completo.
Por eso sacaron el winusb, para que resultase más fácil hacer programas con el usb
[Version]
Signature="$Windows NT$"
Class=Ports
ClassGuid={4D36E978-E325-11CE-BFC1-08002BE10318}
Provider=%PRVDR%
LayoutFile=layout.inf
DriverVer=01/01/2010,6.0.2600.1
[Manufacturer]
%MFGNAME%=VirComDevice,NT,NTamd64
[DestinationDirs]
DefaultDestDir = 12
[VirComDevice.NT]
%DESCRIPTION%=DriverInstall,USB\VID_0461&PID_0001
;%DESCRIPTION%=DriverInstall,USB\VID_04D8&PID_0001
[VirComDevice.NTamd64]
%DESCRIPTION%=DriverInstall,USB\VID_0461&PID_0001
;%DESCRIPTION%=DriverInstall,USB\VID_04D8&PID_0001
[DriverInstall.NT]
Include=mdmcpq.inf
CopyFiles=FakeModemCopyFileSection
AddReg=DriverInstall.NT.AddReg
[DriverInstall.NT.AddReg]
HKR,,DevLoader,,*ntkern
HKR,,NTMPDriver,,usbser.sys
HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider"
[DriverInstall.NT.Services]
AddService=usbser, 0x00000002, DriverServiceInst
[DriverServiceInst]
DisplayName=%SERVICE%
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
StartType = 3 ; SERVICE_DEMAND_START
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
ServiceBinary= %12%\usbser.sys
LoadOrderGroup = Base
[Strings]
PRVDR = "www.microingenia.com"
MFGNAME = "Microingenia Electronics"
DESCRIPTION = "MiEUSBCDC"
SERVICE = "MiEUSBCDC driver"
primero darte las gracias por lo que he aprendido con PICUSB.
Lo que quiero es aprender a conectar por comunicacion CDC un pic18F2550 con vista 32, pero el problema lo tengo al instalar los driver, como trabajo con vista32, uso el programa de Palitroquez, introduzco los archivos correspondientes: usb_desc_scope.h, usb_desc_cdc.h(generado con el programa), usb_cdc.h en la carpeta del ejemplo ex_usb_serial2, con sus "includes" correspondientes.
Y tambien introduzco los archivos mchpcdc.cat y mchpcdc.inf(generado con el programa).
Compilo con CCS version 4.093, que incluye el driver cdc_NTXPVista.inf en C:\Program Files\PICC\Drivers, y programo el PIC.
Pero al conectar el PIC al PC salta una instalacion directa del driver que instala uno que no corresponde, entonces actualizo el driver manualmente.
Pruebo con ambos drivers, pero nada, con el generado por el programita de Palitroquez me reponde directamente que en la carpeta determinada no existe ningun controlador compatible con dicho dispositivo.
Y con el cdc_NTXPVista.inf me deja llegar a instalarlo, pero al final me dice que windows encontro un problema al instalar el software de controlador de dispositivo al intentar instalar el "USB to RS232".
He leido en el foro de CCS, que existe conflicto entre cdc_NTXP.inf y cdc_NTXPVista.inf y que mueva este ultimo a otra ubicacion a donde apuntar durante la instalacion del driver, pero entonces tambien directamente me dice que que en la carpeta determinada no existe ningun controlador compatible con dicho dispositivo.
Puede que la primera vez que aparecio el instalador automatico no seleccione bien la instalacion y se haya instalado ese driver por defecto (un tal C:\Windows\System32\Drivers\klfltdev.sys del antivirus Karpesky) ahora soy incapaza de desinstalardo ni con el USBdeview se como hacerlo, asi que no se por donde seguir.
#include <18F2550.h>
#device adc=8 //Usa resolución de 8 bits
#FUSES HSPLL //High Speed Crystal/Resonator with PLL enabled
#FUSES NOWDT //No Watch Dog Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NODEBUG //No Debug mode for ICD
#FUSES USBDIV //USB clock source comes from PLL divide by 2
#FUSES PLL5 //Divide By 5(20MHz oscillator input)
#FUSES CPUDIV1 //System Clock by 1
#FUSES VREGEN //USB voltage regulator enabled
#FUSES NOPBADEN //PORTB pins are configured as digital I/O on RESET
#use delay(clock=48000000)
//#use delay(clock=20000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
#include "usb_cdc.h"
#use delay(clock=48000000)
/////////////////////////////////////////////////////////////////////////////
//
// Configure the demonstration I/O
//
/////////////////////////////////////////////////////////////////////////////
#define LED1 PIN_B7
#define LED2 PIN_B6
#define LED3 PIN_B5
#DEFINE BUTTON PIN_A4
#define LED_ON output_low
#define LED_OFF output_high
/////////////////////////////////////////////////////////////////////////////
//
// usb_debug_task()
//
// When called periodically, displays debugging information over serial
// to display enumeration and connection states. Also lights LED1 based upon
// enumeration and status.
//
/////////////////////////////////////////////////////////////////////////////
void usb_debug_task(void) {
static int8 last_connected;
static int8 last_enumerated;
int8 new_connected;
int8 new_enumerated;
static int8 last_cdc;
int8 new_cdc;
new_connected=usb_attached();
new_enumerated=usb_enumerated();
new_cdc=usb_cdc_connected();
if (new_enumerated)
LED_ON(LED1);
else
LED_OFF(LED1);
if (new_cdc)
LED_ON(LED2);
else
LED_OFF(LED2);
if (usb_cdc_carrier.dte_present)
LED_ON(LED3);
else
LED_OFF(LED3);
if (new_connected && !last_connected)
printf("USB connected, waiting for enumaration...\r\n\n");
if (!new_connected && last_connected)
printf("USB disconnected, waiting for connection...\r\n\n");
if (new_enumerated && !last_enumerated)
printf("USB enumerated by PC/HOST\r\n\n");
if (!new_enumerated && last_enumerated)
printf("USB unenumerated by PC/HOST, waiting for enumeration...\r\n\n");
if (new_cdc && !last_cdc) {
printf("Serial program initiated on USB<->UART COM Port\r\n\n");
printf(usb_cdc_putc, "\r\n\nCCS CDC (Virtual RS232) Example\r\n\n");
}
last_connected=new_connected;
last_enumerated=new_enumerated;
last_cdc=new_cdc;
}
void main(void)
{
char c;
LED_OFF(LED1);
LED_OFF(LED2);
LED_OFF(LED3);
usb_init_cs();
while (TRUE)
{
usb_task();
usb_debug_task();
if (usb_cdc_kbhit())
{
c=usb_cdc_getc();
if (c=='\n') {usb_cdc_putc('\r'); usb_cdc_putc('\n');}
else if (c=='\r') {usb_cdc_putc('\r'); usb_cdc_putc('\n');}
else if (c=='!') {printf(usb_cdc_putc,"HELLO-WORLD-HELLO-WORLD-HELLO-WORLD-HELLO-WORLD-HELLO-WORLD-HELLO-WORLD-HELLO-WORLD-HELLO-WORLD-DONE");}
else {usb_cdc_putc(c);}
}
}
} Hola, en tal proyecto usé el código del excelente ejemplo de J1M en el que él usó un driver especial, no el que traen los ejemplos de MPLAB o CCS.
Me parece que ese driver encasilla el VID y PID original en modo bulk y si se cambia la clase usb a CDC o HID el driver los sigue viendo como bulk... de esto no estoy muy seguro.
Te recomiendo que uses un PID para modo bulk y otro PID para los otros modos.
PLL5 por PLL1; esto por que utilizo un cristal de 20MhzSi usas un cristal de 20 MHz y el divisor PLL entonces PLL5 es lo correcto.
hice unas pequeñas modificaciones en el código como muestro a continuación:
#include <18F4550.h> por #include <18F2550.h>
PLL5 por PLL1; esto por que utilizo un cristal de 20Mhz
ahora hay unos conceptos basicos que no comprendo como modo bulk etc
Preguntas:
1___ A la hora de utilizar el enumerador de palitroquez debo hacer algunas modificaciones a la configuración predeterminada? esto para que se comunique el pic con mi compu?
2___ En el diagrama mostrado en la pagina, en el conector USB para que es la conección de Vdd, es decir yo alimento el PIC con otra fuente, entonces para que debo usar ese voltaje?
_____________________
la version del compilador de ccs que utilizo es la 4.084