Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

06/10/2012 #2101


Añado informacion;
He estado estudiando el tema VID y PID,

dentro del archivo "inf" tengo la siguiente informacion :
Código:
;------------------------------------------------------------------------------
;  Vendor and Product ID Definitions
;------------------------------------------------------------------------------
; When developing your USB device, the VID and PID used in the PC side
; application program and the firmware on the microcontroller must match.
; Modify the below line to use your VID and PID.  Use the format as shown below.
; Note: One INF file can be used for multiple devices with different VID and PIDs.
; For each supported device, append ",USB\VID_xxxx&PID_yyyy" to the end of the line.
;------------------------------------------------------------------------------
[SourceDisksFiles]
[SourceDisksNames]
[DeviceList]
%DESCRIPTION%=DriverInstall, USB\VID_04D8&PID_000B

[DeviceList.NTamd64] 
%DESCRIPTION%=DriverInstall, USB\VID_04D8&PID_000B


;------------------------------------------------------------------------------
;  String Definitions
;------------------------------------------------------------------------------
;Modify these strings to customize your device
;------------------------------------------------------------------------------
[Strings]
MFGFILENAME="mchpcdc"
DRIVERFILENAME ="usbser"
MFGNAME="MoyaPIC_USB"
INSTDISK="Microchip Technology, Inc. Installation Disc"
DESCRIPTION="MoyaPIC_USB28_CDC"
SERVICE="USB RS-232 Emulation Driver"
Hasta ahi todo correcto.
Supuestamente el archivo usb_desc_cdc.h contiene la informacion del VID y el PID,
Código:
   const char USB_DEVICE_DESC[USB_DESC_DEVICE_LEN] ={
      //starts of with device configuration. only one possible
         USB_DESC_DEVICE_LEN, //the length of this report   ==0
         0x01, //the constant DEVICE (DEVICE 0x01)  ==1
         0x10,0x01, //usb version in bcd  ==2,3
         0x02, //class code. 0x02=Communication Device Class ==4
         0x00, //subclass code ==5
         0x00, //protocol code ==6
         USB_MAX_EP0_PACKET_LENGTH, //max packet size for endpoint 0. (SLOW SPEED SPECIFIES 8) ==7
         USB_CONFIG_VID & 0xFF, ((USB_CONFIG_VID >> 8) & 0xFF), //vendor id       ==9, 10
         USB_CONFIG_PID & 0xFF, ((USB_CONFIG_PID >> 8) & 0xFF), //product id, don't use 0xffff       ==11, 12
         USB_CONFIG_VERSION & 0xFF, ((USB_CONFIG_VERSION >> 8) & 0xFF), //device release number  ==13,14
         0x01, //index of string description of manufacturer. therefore we point to string_1 array (see below)  ==14
         0x02, //index of string descriptor of the product  ==15
         0x00, //index of string descriptor of serial number  ==16
         USB_NUM_CONFIGURATIONS  //number of possible configurations  ==17
   };


//////////////////////////////////////////////////////////////////
///
///   start string descriptors
///   String 0 is a special language string, and must be defined.  People in U.S.A. can leave this alone.
///
///   You must define the length else get_next_string_character() will not see the string
///   Current code only supports 10 strings (0 thru 9)
///
//////////////////////////////////////////////////////////////////

#if !defined(USB_STRINGS_OVERWRITTEN)
//the offset of the starting location of each string.  offset[0] is the start of string 0, offset[1] is the start of string 1, etc.
char USB_STRING_DESC_OFFSET[]={0,4,12};

// Here is where the "CCS" Manufacturer string and "SERIAL DEMO" are stored.
// Strings are saved as unicode.
// These strings are mostly only displayed during the add hardware wizard.
// Once the operating system drivers have been installed it will usually display
// the name from the drivers .INF.
char const USB_STRING_DESC[]={
   //string 0
         4, //length of string index
         USB_DESC_STRING_TYPE, //descriptor type 0x03 (STRING)
         0x09,0x04,   //Microsoft Defined for US-English
   //string 1
         8, //length of string index
         USB_DESC_STRING_TYPE, //descriptor type 0x03 (STRING)
         'C',0,
         'C',0,
         'S',0,
   //string 2
         24, //length of string index
         USB_DESC_STRING_TYPE, //descriptor type 0x03 (STRING)
         'C',0,
         'D',0,
         'C',0,
         '_',0,
         'U',0,
         'S',0,
         'B',0,
         '_',0,
         'P',0,
         'I',0,
         'C',0,
};
por mas que lo cambio, lo trasteo, lo compilo y lo cargo al pic 18f4550 del proteus, cuando inicio la simlacion me detecta un dispositivo con el nombre "serial demo", que era el que trae por defecto la libreria de proteus, y no consigo instalar el driver de ninguna manera.

Sabeis por donde pueden ir los tiros??
06/10/2012 #2102


hola, mira el driver que instalas por pimrraves es el que siempre va a buscar el pc, yo lo que hice fue irme al administrador de dispositivos y desinstalar el equipo y reinicie el pc después conecte el pic nuevamente y le di la ruta manual de donde tenia el nuevo controlador. pero todo con pic físico
07/10/2012 #2103


No se como ni porque, pero acabo de encontrar un driver que si me reconoce el usb del proteus.
Código:
[Version]
Signature="$Windows NT$"
Class=Ports
ClassGuid={4D36E978-E325-11CE-BFC1-08002BE10318}
Provider=%CCS%
LayoutFile=layout.inf
CatalogFile=cdc_NTXPVista.cat
DriverVer=01/15/2010

[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

[DestinationDirs]
DefaultDestDir=12
Reader.NT.Copy=12

;------------------------------------------------------------------------------
;  Windows 2000/XP/Vista-32bit Sections
;------------------------------------------------------------------------------
[Reader.NT]
Include=mdmcpq.inf
CopyFiles=Reader.NT.Copy
AddReg=Reader.NT.AddReg

[Reader.NT.Copy]
usbser.sys

[Reader.NT.AddReg]
HKR,,DevLoader,,*ntkern
HKR,,NTMPDriver,,usbser.sys
HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider"

[Reader.NT.Services]
AddService = usbser, 0x00000002, Service_Inst.NT

[Service_Inst.NT]
DisplayName = %Serial.SvcDesc%
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
StartType = 3 ; SERVICE_DEMAND_START
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
ServiceBinary = %12%\usbser.sys
LoadOrderGroup = Base
07/10/2012 #2104


holas estoy haciendo un proyecto donde tengo que mandar datos desde una aplicacion de escritorio (estoy usando Visual studio) hacia el PIC 18f4550, en el programa del PIC estoy usando la clase CDC, todo me funciona bien, la PC reconoce al pic mi programa VB se conecta al puerto sin problema, pero al momento de enviar un dato no pasa absolutamente nada ya hice varios programas y vi varios tutoriales y no encontre cual es el problema , si alguien sabe como solucionarlo estaria muy agradecido
07/10/2012 #2105


Si pones un archivo con el proyecto de visual y otro con el circuito y el Ccs se puede echarte una mano. Un saludo
07/10/2012 #2106


Gracias netma
bueno aqui te dejo el archivo con los codigos y el circuito que saque de varios foros y tutoriales para hacer la prueba talves hasta se te haga conocido, estaria muy agradecido ya voy una semana en esto y ya me pisa el tiempo, es basicamente un circuito que prende y apaga leds,y desde el visual envia numeros al pic para prender cierto led , pero el pic no recive estos numeros
Archivos Adjuntos
Tipo de Archivo: rar controldeleds.rar (188,5 KB (Kilobytes), 148 visitas)
08/10/2012 #2107


El codigo a mi me da muchos errores, lo mejor es que lo programes entero.

Yo veo fallos en el vb como por ejemplo nombres de variables mal escritos y todo, es normal que no lo hagas funcionar.


Aprovechando la respuesta, tengo una duda tonta.

Estoy enviando un "1" desde el VB, el pic lo recive perfectamente con un getc y por ejemplo, hago un toggle_b(1), la cosa está en que si vuelvo a mandar un "1", no me hace el toggle.

Puede ser debido a los Timer? (no los he configurado)
08/10/2012 #2108


bueno mil disculpas, ya arregle lo del VB esque elimine dos botones y me olvide borrar el codigo por eso salia error, pero bueno me sigue sin funcionar
Archivos Adjuntos
Tipo de Archivo: rar controldeleds.rar (187,4 KB (Kilobytes), 87 visitas)
08/10/2012 #2109


el dia de hoy me use ha hacer lo de netma de simular CDC desde proteus y me funciono ero había un problema el ic enviaba caracteres sin problema ero no recibía nada del pc después de darle un rato decidí compilar con la versión 4.108 de ccs y listo me comenzó a recibir las teclas que tecleaba en la terminal del PC.
la versión con la que compilaba era la 104
08/10/2012 #2110


A mi si que me transmite. El problema es que a los 10 segundos aproximadamente deja de hacer nada. Lo he probado en el pic directamente y hace lo mismo. Creo que el problema esta en el firmware. Mañana lo colgare para que lo veáis.
08/10/2012 #2111


aqui esta mi circuito en isis y el achivo de ccs
Archivos Adjuntos
Tipo de Archivo: zip 18f4550 compilador 108.zip (136,3 KB (Kilobytes), 164 visitas)
Tipo de Archivo: zip 18f4550_USB_CDC.zip (24,1 KB (Kilobytes), 141 visitas)
09/10/2012 #2112


Holas
Bueno pues ya solucione mi problema, utilice el driver que publico netma y asi ya me envia los datos, muchas gracias!, ahora ya puedo empezar con mi proyecto.

y bueno ahora se me viene otra duda , para mi proyecto necesito enviar numeros grandes como 4000 del pic al pc y viceversa y yo me imagino enviar esto como string , entonces mi pregunta es si se puede enviar strings con cdc, por q veo en muchos ejemplos q solo envian caracteres
09/10/2012 #2113


Os paso el codigo de mi ccs, funciona perfectamente durante 5 segundos o asi, luego no responde a los envios de datos.

Código:
#include <18f4550.h>
#fuses HSPLL,MCLR,NOWDT,NOLVP,NOPROTECT,NODEBUG,USBDIV,PLL1,CPUDIV1,VREGEN,NOPBADEN
#use delay(clock=48000000)
#include "usb_cdc.h"
#include "usb_desc_cdc_mod.h"

void usb_conectado(void){
output_high(PIN_A0);
output_low(PIN_A1);}

void usb_desconectado(void){
output_high(PIN_A1);
output_low(PIN_A0);
}

void usb_enumerated(void){
output_high(PIN_A2);}


void main()

{
disable_interrupts(global);   // desactivando interrupciones globales
setup_adc_ports (NO_ANALOGS|VSS_VDD); // desactivando puertos analogicos    
set_tris_a(00000000);
set_tris_b(00000000);
output_low(PIN_B0);
output_low(PIN_B1);
output_low(PIN_B2);
output_low(PIN_B3);
output_low(PIN_B4);
output_low(PIN_B5);
output_low(PIN_B6);
output_low(PIN_B7);
setup_adc(ADC_OFF);
setup_spi(SPI_SS_DISABLED);
setup_wdt(WDT_OFF);
/*setup_timer(RTCC_INTERNAL);
setup_timer1(T1_DISABLED);
setup_timer2(T2_DISABLED,0,1);
setup_timer3(T3_DISABLED|T3_DIV_BY_1);*/
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);


usb_cdc_init();
usb_init();

while(!usb_cdc_connected()){
usb_desconectado();
}

usb_conectado();
if (usb_enumerated()){
   usb_enumerated();}
do{
usb_task();
   
   
   if (usb_cdc_getc()=='1'){output_toggle(PIN_B0);}
   if (usb_cdc_getc()=='2'){output_toggle(PIN_B1);}
   if (usb_cdc_getc()=='3'){output_toggle(PIN_B2);}
   if (usb_cdc_getc()=='4'){output_toggle(PIN_B3);}
   if (usb_cdc_getc()=='5'){output_toggle(PIN_B4);}
   if (usb_cdc_getc()=='6'){output_toggle(PIN_B5);}
   if (usb_cdc_getc()=='7'){output_toggle(PIN_B6);}
   if (usb_cdc_getc()=='8'){output_toggle(PIN_B7);}

}while (1);

}
09/10/2012 #2114


dgct divide el numero en cifras y las enviás independientes después las vuelves a unir
11/10/2012 #2115


Os adjunto todo, es un diseño de 8 leds pero sigo sin dar con el kit de la cuestion y a los 5 segundos ya no me responde. a que puede deberse??
Gracias
Archivos Adjuntos
Tipo de Archivo: rar Prueba1.rar (195,2 KB (Kilobytes), 79 visitas)
11/10/2012 #2116


Hola a todos nuevamente. Tengo un programa en el que manejo usb y ademas visualizo datos en un lcd. Tengo el programa corriendo a 48MHz. Mi problema es que a tan alta frecuencia la longitud del cable que conecta al lcd produce que en este no se visualicen bien los datos. Quisiera saber si alguien puede ayudarme a configurar los fuses para que tenga los 48 MHz necesarios para llevar a cabo la comunicación usb y que el cpu corra a una velocidad mucho menor, desde 4MHz hasta 20MHz. Tengo los fuses configurados como aparece en la hoja anterior y utilizo un cristal de 4MHz. Alguien puede ayudarme?. Desde ya muchas gracias

fuses XTPLL,USBDIV,PLL1,PUT,CPUDIV1,VREGEN,NOWDT,NOPROTE CT,NOLVP,NODEBUG
#use delay(clock=48000000)
11/10/2012 #2117


pues para un cristal de 4 si quieres usar 48Mhz por narices tienes que tener el PLL a 1 y el CPUDIV1, lo tienes bien. (desde mi punto de vista)
11/10/2012 #2118


Gracias por tu respuesta netma. Te comento mejor mi situación. Mi idea es tener 48MHz pero solo para la comunicación usb. Deseo tener el cpu del micro corriendo a una velocidad mas baja. Según estuve viendo en esta pagina: http://picmania.garcia-cuervo.net/conceptos.php#USB4Mhz, eso es posible, la idea seria desde el oscilador principal seguir el camino del pll para el modulo usb y luego mediante una correcta elección de CPUDIV y los bits FOSC3:FOSC0 (segun el diagrama que aparece en la pagina antes mencionada) conseguir otra frecuencia de trabajo para el pic. Mi problema radica en que no se como configurar los bits FOSC3:FOSC0 desde los fuses de ccs
12/10/2012 #2119


Bua, eso ya se me escapa, siento no poder ayudarte ;(
12/10/2012 #2120

Avatar de Moyano Jonathan

Gracias por tu respuesta netma. Te comento mejor mi situación. Mi idea es tener 48MHz pero solo para la comunicación usb. Deseo tener el cpu del micro corriendo a una velocidad mas baja. Según estuve viendo en esta pagina: http://picmania.garcia-cuervo.net/conceptos.php#USB4Mhz, eso es posible, la idea seria desde el oscilador principal seguir el camino del pll para el modulo usb y luego mediante una correcta elección de CPUDIV y los bits FOSC3:FOSC0 (segun el diagrama que aparece en la pagina antes mencionada) conseguir otra frecuencia de trabajo para el pic. Mi problema radica en que no se como configurar los bits FOSC3:FOSC0 desde los fuses de ccs
Para que necesitas que el micro corra a una velocidad diferentes que la del puerto USB ?
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.