Dispositivo USB HID no detectado

0

Estoy creando un dispositivo USB HID utilizando PIC18F2550 usando una entrada de cristal de 20 MHz y usando el MikroC PRO compilador de C para PIC.

Estos son mis ajustes de configuración:

unsigned char readbuff[64] absolute 0x500;
unsigned char writebuff[64] absolute 0x540;
char cnt;
char kk;

void interrupt() {
    USB_Interrupt_Proc();
}

void main()
{
    TRISA = 0;
    ADCON1  |= 0x0f;
    CMCON   |= 7;
    HID_Enable(&readbuff, &writebuff);
    while(1)
    {
        /*
            LATA=0;
            delay_ms(200);
            LATA=0xFF;
            delay_ms(200);
        */

        while(!HID_Read())
            ;

        for(cnt=0; cnt<64; cnt++)
            writebuff[cnt] = readbuff[cnt];

        while(!HID_Write(&writebuff, 64))
            ;
    }
}

También se incluye en el proyecto el archivo USBdesc.c que se puede generar dentro del terminal HID de MikroC. Pero el dispositivo no se detecta en absoluto ...

[ACTUALIZACIÓN]

He probado la versión anterior en MikroC, es decir, la versión 8.2, y la tengo funcionando (se detecta el dispositivo HID). Pero todavía no puedo hacer que funcione con MikroC PRO.

PS .: Para asegurarme de que el microcontrolador funciona bien, cargué un archivo hexadecimal de muestra para un mouse USB HID en el microcontrolador, y estaba funcionando. Simplemente no puedo entender qué está mal con mi código ...

    
pregunta Suraj Bhawal

3 respuestas

1

He hecho un dispositivo de adquisición de datos usando PIC18F2550 usando MikroC PRO. Parece que su configuración está bien. Pero hay otras cosas a considerar. Debe insertar una resistencia de 1 kohm entre D + y VCC. De lo contrario, la PC no puede detectarla como un dispositivo de alta velocidad.

Otra cosa importante es agregar un condensador (10 µf o algo así, electrolítico) al pin VUSB que es el número de pin 14 de PIC18F2550. Tuve un problema durante un largo período solo por este problema. Desactive el regulador de voltaje USB y luego haga una prueba. Puede ver este tutorial ; podría ayudar.

No sé si su dispositivo está alimentado por bus o autoalimentado. Debe declararlo en el archivo USBdsc.c:

const char USB_SELF_POWER = 0x80; //When it is bus powered

Si su dispositivo es autoalimentado, reemplácelo con

const char USB_SELF_POWER = 0xC0; //When it is self powered

Un dispositivo HID puede operar en dos modos, interrupción o sondeo. Desde su código, está utilizando el método de interrupción. Debe declararlo en USBdsc.c por el código

const char USB_TRANSFER_TYPE = 0x03; //0x03 is for interrupt

Adjunte el archivo USBDsc.c a su proyecto. A veces se crea con la herramienta de terminal USB HID, pero no se adjunta; asegúrese de que su USBDsc.c esté conectado.

    
respondido por el xcoder
1

Leyendo su última actualización (sobre el hecho de que funciona bien con una versión anterior de MikroC), tenga en cuenta el siguiente comentario de la última documentación de la biblioteca USB del compilador:

Entonces, si no lo has hecho, intenta recrear el archivo descriptor como dice el comentario:

  

... es necesario crear un nuevo archivo descriptor para que su proyecto funcione.

    
respondido por el Roger Rowland
1

Cuando su conexión USB no es Ga-dunk, el problema puede estar en muchos lugares: puede estar en su pila USB, puede estar en su descriptor, puede estar en sus conexiones de hardware o puede estar en tu propio código Sin herramientas profesionales de protocolo USB, este puede ser un problema muy frustrante para agotar

¡Comience con un ejemplo de trabajo de MikroC y cambie una cosa a la vez hasta que se rompa!

En cuanto a su código, no conozco el middleware MikroE, pero el código USB que he usado también espera la enumeración antes de hacer cualquier cosa con USB.

Además, muchos compiladores requieren que habilites tus interrupciones individualmente. No veo dónde habilitas tu interrupción global o USB.

Hay un código de ejemplo para la biblioteca USB en enlace , y de hecho, habilita las interrupciones

    
respondido por el Scott Seidman

Lea otras preguntas en las etiquetas