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
). 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 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 2008private: 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
.
Un saludo a todos!
Xesc0