TODOPIC
Microcontroladores PIC => Pic32 => Mensaje iniciado por: IngRandall en 03 de Abril de 2012, 18:29:11
-
Hola amigos del foro, me encuentro intentando comprender como funciona el USB Device - CDC - Microchip, tengo el PIC32 USB Starter Kit II, yo lo conecto y el computador me lo reconoce, me instala el driver y me asigna un puerto, hasta allí estamos bien, pero, no se donde llegan los datos en el programa ni como los envió por el mismo puerto usb, quisiera saber si alguien ya ha trabajado con ese programa y me diga donde están esos puntos que quiero, gracias.
-
Acabo de encontrar como puedo enviar los datos por el CDC USB, es con el metodo:
if(USBUSARTIsTxTrfReady())
{
char data[] = "Hola Mundo";
putsUSBUSART(data);
}
Ahora a seguir investigando donde llegan los datos.
-
buscate una linea donde ponga algo como if((USBDeviceState < CONFIGURED_STATE)||(USBSuspendControl==1))
o bien donde se utilicen los buffers veras que es sencillo, se trata de una funcion que se repite constantemente y cuando deja de estar ocupado el flag (USBHandleBusy) puedes procesar los datos leidos
EPR=USBGenRead(USBGEN_EP_NUM,&USB_Read[0],64); (esto es para el WINUSB, para CDC puede que tenga otra funcion)
-
Gracias MerLiNz voy a buscar, cuando lo tenga les comento.
-
Quizas no sea igual para el CDC, pero te puedes buscar el pdf que tiene microchip para el USB CDC alli te explica como funciona, configuraciones, como se envia y recibe, que funciones tienes....
-
Con getsUSBUSART() y putUSBUSART()
-
ya lo encontré, gracias, mas tarde subo el código que estoy haciendo de prueba del puerto.
-
Lo prometido es deuda, si funciona, cuando pulso el SW2 de mi board, el espera el dato y luego cuando lo envía, pero ahora lo que deseo es que no necesite de llamar a la función, que funcione por interrupción como el UART, supuestamente el funciona por interrupción pero siempre esta activa :shock:... así que la verdad ahora mismo no se que hacer, ya busque algunos manuales pero no me dan información o no la se buscar, ojala me puedan ayudar.
BYTE buffer[64];
BYTE numBytes;
if (SW2==0){
while(SW2==0);
numBytes = getsUSBUSART((char *)buffer,64);
mUSBUSARTTxRam((BYTE*)buffer, numBytes);
}
-
Hola, he regresado con un duda, se puede utilizar el usb con cristal interno???
-
Hola, he regresado con un duda, se puede utilizar el usb con cristal interno???
Mirando el diagrama del clock entiendo que no, ya que no se puede conseguir los 48MHz necesarios para el USB. Además si el cristal interno no oscila a tiempo no se podría realizar la comunicación.
Una pregunta: que código tenias al firmware cuando instalaste el driver? Es que a mi, el PC me detecta que hay un dispositivo nuevo, pero no se me instala el driver ni lo reconoce, quizás es problema del código.
-
si se puede, utilizando el PLL, yo lo tengo en dspic y no me da problemas.
-
aleix111 la verdad no te entendi la pregunta, si me la puedes explicar de otra forma, MerLiNz yo estoy utilizando un PIC32 con cristal interno pero no funciona y le coloque el cristal y si funciono :shock: :shock: :shock:
-
aleix111 la verdad no te entendi la pregunta, si me la puedes explicar de otra forma, MerLiNz yo estoy utilizando un PIC32 con cristal interno pero no funciona y le coloque el cristal y si funciono :shock: :shock: :shock:
Al conectar por primera vez el USB del PIC al PC tienes que instalar el driver para que windows te reconozca el PIC32, no?
Si en el firmware del PIC no hay ningún código que hace referencia a la comunicación USB, al conectar tu PIC al PC, el PC no verá ningún dispositivo.
Entonces, mi pregunta es: Que firmware tiene que tener el PIC para que al conectarlo al PC se pueda instalar correctamente el driver de windows?
Yo he hecho este codigo:
void main (void) {
//Para obtener 48MHz con un cristal de 4MHz:
#pragma config UPLLIDIV = DIV_1
#pragma config UPLLEN = ON
OSCCONbits.UFRCEN=0;
//funciones extraídas de la libraría MCHPFSUSB:
USBDeviceInit();
USBDeviceAttach();
while(1) {}
}Al conectar el PIC al PC via USB, me dice que "No reconoce dispositivo USB". En "propiedades del dispositivo desconocido" voy a "cambiar la configuración" -> Controlador -> Actualizar controlador -> Buscar software de controlador en el equipo -> le digo la ubicación de "mchpcdc.inf" (con la VID y PID adecuadas).
Entonces dice que "ya está instalado el mejor software de control para el dispositivo" pero sigue saliendo "dispositivo desconocido".
Creo que no reconoce el dispositivo porque me estoy dejando de poner algo en el firmware. Puede ser?
Quizás estoy diciendo algún disparate, si es así decidmelo.
Gracias.
-
aleix111 la verdad no te entendi la pregunta, si me la puedes explicar de otra forma, MerLiNz yo estoy utilizando un PIC32 con cristal interno pero no funciona y le coloque el cristal y si funciono :shock: :shock: :shock:
Vale, he leido el datasheet y segun dice el FRC solo lo puedes usar para detectar actividad no para transferencia de datos, por lo visto el FRC del pic32 tiene mayor % de error que el de un dspic asi que no dejan usarlo como fuente directa del USB.
-
Prueba con el proyecto "USB Device - CDC - Basic Demo", no le hagas nada, solo compilalo y lo guardas en tu pic, que pic usas???, y si todo esta bien cuando conectes tu equipo al pc te va a pedir el driver y lo instalas y listo, ya te funciona, y podemos seguir desarrollando... yo lo acabo de hacer y me funciono, sin hacerle nada, absolutamente nada...
En cuanto al programa en el while(1), deberia esta siempre USBDeviceTasks(); y ProcessIO();... prueba con eso a ver que tal.
MerLiNz, si, la verdad parece que si, por que funciona solo con el oscilador externo, gracias.
-
Prueba con el proyecto "USB Device - CDC - Basic Demo", no le hagas nada, solo compilalo y lo guardas en tu pic, que pic usas???, y si todo esta bien cuando conectes tu equipo al pc te va a pedir el driver y lo instalas y listo, ya te funciona, y podemos seguir desarrollando... yo lo acabo de hacer y me funciono, sin hacerle nada, absolutamente nada...
En cuanto al programa en el while(1), deberia esta siempre USBDeviceTasks(); y ProcessIO();... prueba con eso a ver que tal.
MerLiNz, si, la verdad parece que si, por que funciona solo con el oscilador externo, gracias.
Con el proyecto "USB Device - CDC - Basic Demo" he hecho las modificaciones para poderlo grabar en mi PIC32MX250F128B. Al conectar el USB le digo la direccion del driver (con el PID correcto) y sigue sin reconocer el PIC.
Como lo has hecho tu? Con que PIC?
Gracias.
-
1. Tu modificaste algo del VID y PID????
2. Yo lo hice con el driver que trae el sin modificarse nada así tal cual los pasos que tu me diste ahora.
3. PIC32MX795F512L.
4. Que board estas utilizando tu, si es hecha por ti, puedes subir los esquemáticos???
-
1. Tu modificaste algo del VID y PID????
2. Yo lo hice con el driver que trae el sin modificarse nada así tal cual los pasos que tu me diste ahora.
3. PIC32MX795F512L.
4. Que board estas utilizando tu, si es hecha por ti, puedes subir los esquemáticos???
1-No: Revisé que coincidieran los que pone en usb_descriptors.c y mchpusb.inf
2 y 3- Este proyecto esta ya hecho para tu pic, pero no para mi pic32mx250f128b, por lo que he tenido que hacer una serie de modificaciones.
4- La board la he hecho yo. Adjunto el fichero con las conexiones.
-
En la board creo que tienes algo que corregir, tienes el ICD3 conectado a los dos puertos de programación, solo necesitas uno, también los pines del usb si no estoy mal no soportan 5V así que tendrías que adecuar la señal para que pudiera funcionar correctamente, los capacitores que tienen las tierras, bueno la verdad es que yo no los coloco, donde va a tierra coloco tierra directamente, prueba también colocando un cristal de 8MHz y utilizando el PLL interno del micro, eso también puede estar fallando... la verdad no se si se me escapa algo mas, y no estoy seguro si lo que te dije te pueda servir, realiza los cambios y coméntanos a ver que tal.
-
En la board creo que tienes algo que corregir, tienes el ICD3 conectado a los dos puertos de programación, solo necesitas uno, también los pines del usb si no estoy mal no soportan 5V así que tendrías que adecuar la señal para que pudiera funcionar correctamente, los capacitores que tienen las tierras, bueno la verdad es que yo no los coloco, donde va a tierra coloco tierra directamente, prueba también colocando un cristal de 8MHz y utilizando el PLL interno del micro, eso también puede estar fallando... la verdad no se si se me escapa algo mas, y no estoy seguro si lo que te dije te pueda servir, realiza los cambios y coméntanos a ver que tal.
He cambiado el cristal por uno de 8MHz con los condensadores de 18pF y ya me detecta el pic!!!
Muchísimas gracias IngRandall
-
((:-)) ((:-)) ((:-)) Que bien, me alegro mucho :mrgreen: :-/ :-/ :-/ :-/