Autor Tema: USB HID Custom Demo C18  (Leído 4087 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado dragondgold

  • PIC16
  • ***
  • Mensajes: 103
    • Tmax & Gwolf Microcontrollers
USB HID Custom Demo C18
« en: 01 de Abril de 2012, 17:59:09 »
Que tal comunidad, recurro a crear un post para ver si pueden darme una mano. Me estoy iniciando en esto del USB con C18 con el PIC18F2550. He visto en el foro muchos temas respecto a esto pero en su mayoria tratan del USB CDC o en caso de usar HID usan CCS que por lo que he visto he investigado es notoriamente mas sencillo, pero sigo firme en usar C18 jaja  :D.
Baje las librerias de Microchip y en Proteus pude hacer andar los HID de Keyboard y Mouse pero el Custom Demo que segun entiendo no lo toma como teclado, mouse ni nada sino como un dispositivo HID nada mas no puedo lograr que funcione, envio siempre datos y no recibo nada de nada en el ISIS, espero pueden echarme una mano, les adjunto todo el proyecto de MPLAB con el que estoy trabjando que esta basado en los ejemplos de Microchip.

Saludos y muchas gracias !!
La conclusión final es que sabemos muy poco y sin embargo, es asombroso lo mucho que conocemos. Y más asombroso todavía es que un conocimiento tan pequeño nos pueda dar tanto poder

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: USB HID Custom Demo C18
« Respuesta #1 en: 01 de Abril de 2012, 20:25:11 »
Los siguiente puede ayudarte: http://www.micros-designs.com.ar/aplicaciones-avanzadas-en-c18/

Después en Microchip Solutions también hay ejemplos de keyboard, Joystick, etc...


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado dragondgold

  • PIC16
  • ***
  • Mensajes: 103
    • Tmax & Gwolf Microcontrollers
Re: USB HID Custom Demo C18
« Respuesta #2 en: 01 de Abril de 2012, 23:15:28 »
Gracias Suky, te consulto ya que vos sabes mas, si yo uso HID de teclado o joystick o mouse el SO me lo va a tomar como tal no es asi ? En cambio el HID Custom Demo simplemente es un dispositivo HID pero que no lo toma de ningun tipo por lo que yo puedo enviar datos tranquilamente es esto correcto ?Ahora le doy una leida al link que me pasaste muchas gracias :).

Saludos !!
La conclusión final es que sabemos muy poco y sin embargo, es asombroso lo mucho que conocemos. Y más asombroso todavía es que un conocimiento tan pequeño nos pueda dar tanto poder

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: USB HID Custom Demo C18
« Respuesta #3 en: 02 de Abril de 2012, 00:27:25 »
Claro, eso se define en el report HID, donde se indica que tipo de dispositivo es y como está configurado


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado dragondgold

  • PIC16
  • ***
  • Mensajes: 103
    • Tmax & Gwolf Microcontrollers
Re: USB HID Custom Demo C18
« Respuesta #4 en: 02 de Abril de 2012, 00:35:47 »
Gracias Suky, te comento, lei el PDF cambiando lo que indicabas incluso copie el main.c como lo habias echo para el 18F2550 por si a caso pero sigue sin funcionar y me parece raro te muestro un screenshot del ISIS, aunque no conecte el USB ya me dice que lo intenta enumerar pero ahi queda no importa que haga  :?.
En los HID de teclado o mouse esto no pasa solo comienzan a verse los datos cuando conecto el USB como deberia ser por que sucede esto con el custom ? Tenes alguna idea ? Podra ser el Windows XP que le falte algun driver ? Aun asi creo que deberia al menos enumerarlo ... espero pueda orientarme Suky te agradezco tu ayuda.

Saludos !!
La conclusión final es que sabemos muy poco y sin embargo, es asombroso lo mucho que conocemos. Y más asombroso todavía es que un conocimiento tan pequeño nos pueda dar tanto poder

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: USB HID Custom Demo C18
« Respuesta #5 en: 02 de Abril de 2012, 08:35:59 »
Podes desinstalar todos los driver USB que se instalaron anteriormente y probar. Tomando el ejemplo, sin cambiar nada, solo seleccionando el proyecto para el micro que usas tiene que funcionar..


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado dragondgold

  • PIC16
  • ***
  • Mensajes: 103
    • Tmax & Gwolf Microcontrollers
Re: USB HID Custom Demo C18
« Respuesta #6 en: 03 de Abril de 2012, 00:37:42 »
Suky te comento, probe cargar el .hex que ya viene precompilado de los ejemplos de Microchip y funciona perfectamente el HID Custom Demo, pero cuando voy al proyecto, sin tocar absolutamente nada, lo compilo, sin error alguno lo compila al cargarlo no funciona, es muy raro requerira alguna version de C18 en especial ? Alguna configuracion en especial ? Lo compilo para el PIC18F4550 es raro, tendras por ahi alguna proyecto de MPLAB que sepas que funciona ?? En cuanto consiga un 18F2550 lo pruebo en la protoboard pero me parece raro no creo que sea error de PROTEUS.

Saludos !!
La conclusión final es que sabemos muy poco y sin embargo, es asombroso lo mucho que conocemos. Y más asombroso todavía es que un conocimiento tan pequeño nos pueda dar tanto poder

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: USB HID Custom Demo C18
« Respuesta #7 en: 03 de Abril de 2012, 08:31:52 »
De aquí se puede bajar un ejemplo:  http://www.micros-designs.com.ar/ejemplo-usb-hid-en-c18/
No contesto mensajes privados, las consultas en el foro

Desconectado dragondgold

  • PIC16
  • ***
  • Mensajes: 103
    • Tmax & Gwolf Microcontrollers
Re: USB HID Custom Demo C18
« Respuesta #8 en: 03 de Abril de 2012, 13:32:11 »
Muchas gracias Suky por tu ayuda, te comento los avances que hice. Probe todo lo que me diste nada con resultado, lo unico que funciona es el hex precompilado que trae las librerias de Microchip, sin embargo he descubierto que si cambio el metodo para el control del USB creo que es de interrupcion a polling si funciona, por lo que se el driver se encarga de activar las interrupciones y borrar el flag no es asi ? Puede ser el hecho que este probando todo en una VM ?

Saludos y gracias !!
La conclusión final es que sabemos muy poco y sin embargo, es asombroso lo mucho que conocemos. Y más asombroso todavía es que un conocimiento tan pequeño nos pueda dar tanto poder

Desconectado ricardossalazar

  • PIC10
  • *
  • Mensajes: 1
Re: USB HID Custom Demo C18
« Respuesta #9 en: 09 de Abril de 2012, 10:26:33 »
Tienen algun ejemplo sobre tarjeta magneticas HID quisiera saber si se pueden activar con pic microchip
mi correo es rikysm@hotmail.com

Desconectado xesc0

  • PIC10
  • *
  • Mensajes: 22
Re: USB HID Custom Demo C18
« Respuesta #10 en: 25 de Diciembre de 2013, 16:35:04 »

Buenos días!

Estoy ensayando con el USB HID de microchip exactamente con una adaptación que hizo Suky hace tiempo en su web (actualmente desparecida :8}). Ciertamente tengo un control parcial sobre la comunicación, puedo leer datos como pulsadores o entradas analógicas pero no consigo enviar información al pic para controlar el encendido o apagado de leds en el puerto D. He revisado, he probado mil cambios pero nada, no entiendo qué es lo que falla... el ejemplo de microchip como ya sabréis está basado en programación C++ y C18. Adjunto el código de ambos a ver si alguien me echa un cable!  :-/

Código C18
Código: [Seleccionar]
             switch(ReceivedDataBuffer[0])
            {
            case 0x80: //Case para los leds.
if(ReceivedDataBuffer[1]&0x01==0x01){ mLED_1_Toggle(); }
if(ReceivedDataBuffer[1]&0x02==0x02){ mLED_2_Toggle(); }
if(ReceivedDataBuffer[1]&0x04==0x04){ mLED_3_Toggle(); }
if(ReceivedDataBuffer[1]&0x08==0x08){ mLED_4_Toggle(); }
            break;

            (...)
            }

ReceivedDataBuffer está declarado después de los fuses como: unsigned char ReceivedDataBuffer[64];
Los mLED_X_Toggle están declarados en HardwareProfile.h tal cual como lo tiene microchip pero para los puertos RD0 - RD3.

Código Visual C++ del 2008
Código: [Seleccionar]
private: System::Void groupBox2_Enter(System::Object^  sender, System::EventArgs^  e)
{
unsigned char OutputPacketBuffer[64];  //Allocate a memory buffer equal to our report size

              OutputPacketBuffer[0] = 0x80;      // Cambiar el estado de los leds.-
              OutputPacketBuffer[1] = 0x00;      // Borramos todos, si está checkeado colocamos un 1 en el lugar correcto.-

              if(checkBox1->Checked==true){ OutputPacketBuffer[1] = OutputPacketBuffer[1] | 0x01; }
              if(checkBox2->Checked==true){ OutputPacketBuffer[1] = OutputPacketBuffer[1] | 0x02; }
              if(checkBox3->Checked==true){ OutputPacketBuffer[1] = OutputPacketBuffer[1] | 0x04; }
              if(checkBox4->Checked==true){ OutputPacketBuffer[1] = OutputPacketBuffer[1] | 0x08; }

              // enviamos:
              if (MCHPHIDClass::USBHIDWriteReport(OutputPacketBuffer, 2) == true){
                toolStripStatusLabel1->Text = "USB: Conectado";
                toolStripStatusLabel1->ForeColor=Color::Green;
              }else{
                toolStripStatusLabel1->Text = "USB: Desconectado";
                toolStripStatusLabel1->ForeColor=Color::Red;
              }
}

Adjunto una imagen. Como se puede apreciar conecta perfectamente, hace la lectura de un potenciometro y un chequeo de los pulsadores, los leds... no quieren ir :5].

Un saludo a todos!
Xesc0

Desconectado xesc0

  • PIC10
  • *
  • Mensajes: 22
Re: USB HID Custom Demo C18
« Respuesta #11 en: 26 de Diciembre de 2013, 12:20:38 »
Al final la solución ha sido cambiar el código tanto del pic como del pc.

Código C18 [PIC]
Código: [Seleccionar]
switch(ReceivedDataBuffer[1])
{
case 0x01:
mLED_1_Toggle();
            break;

case 0x02:
mLED_2_Toggle();
            break;

case 0x04:
mLED_3_Toggle();
            break;

case 0x08:
mLED_4_Toggle();
            break;

default:
mLED_1_Toggle();
mLED_2_Toggle();
mLED_3_Toggle();
mLED_4_Toggle();
            break;
}

No es la mejor manera, lo suyo sería hacer un filtro con una and, igualar y si es el valor esperado dar respuesta a ese cambio de bit.
Por otro lado en el programa visual C++ 2008 agregé dos botones para enviar el dato de control de un solo led.

Código C++
Código: [Seleccionar]
private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e)
{
unsigned char OutputPacketBuffer[64];

OutputPacketBuffer[0] = 0x80;
        OutputPacketBuffer[1] = 0x01;

if (MCHPHIDClass::USBHIDWriteReport(OutputPacketBuffer, 2) == true){
toolStripStatusLabel1->Text = "USB: Conectado";
              toolStripStatusLabel1->ForeColor=Color::Green;
              }else{
              toolStripStatusLabel1->Text = "USB: Desconectado";
            toolStripStatusLabel1->ForeColor=Color::Red;
              }
}
private: System::Void button2_Click(System::Object^  sender, System::EventArgs^  e)
{
unsigned char OutputPacketBuffer[64];

OutputPacketBuffer[0] = 0x80;      // Cambiar el estado de los leds.-
          OutputPacketBuffer[1] = 0x02;      // Borramos todos, si está checkeado colocamos un 1 en el lugar correcto.-

if (MCHPHIDClass::USBHIDWriteReport(OutputPacketBuffer, 2) == true){
toolStripStatusLabel1->Text = "USB: Conectado";
              toolStripStatusLabel1->ForeColor=Color::Green;
              }else{
              toolStripStatusLabel1->Text = "USB: Desconectado";
              toolStripStatusLabel1->ForeColor=Color::Red;
              }
}

Saludos!!!!  :-/ :-/ :-/ :-/ :-/ :-/ :-/


 

anything