Autor Tema: Detectar USB conectado  (Leído 1441 veces)

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

Desconectado jorgejg

  • PIC12
  • **
  • Mensajes: 96
Detectar USB conectado
« en: 26 de Octubre de 2011, 00:00:40 »
Estoy tratando de inicializar el usb cuando la PC se conecta al PIC mediante el cable usb (tengop RB0 conectado a los 5V que viene desde el cable usb) pero a lo mucho enciendo un led de detección del cable conectado mas no inicializa correctamente el usb.

Estoy haciendo un poll a RB0 cada 20 ms :

if (Aux0.Testear_pinUSB==1)
{
   if ( PORTBbits.RB0==1 )   //1: USB conectado
   {
        USBDeviceAttach();   //Solo se debe llamar en el main y cuando "USB_INTERRUPT" esté definido
        USBDeviceInit();   //Inicializo el Módulo USB
        while((USBGetDeviceState() < CONFIGURED_STATE)   || (USBIsDeviceSuspended() == TRUE))
         {
   USBDeviceTasks();
          }
         Aux0.Testear_pinUSB=0;
    }
}
else
    {
          if ( PORTBbits.RB0==0 )   //0: USB desconectado
           {
   USBDeviceDetach();
   Aux0.Testear_pinUSB=1;
          }
   }

Alguna sugerencia?
« Última modificación: 26 de Octubre de 2011, 00:08:24 por jorgejg »

Desconectado jorgejg

  • PIC12
  • **
  • Mensajes: 96
Re: Detectar USB conectado
« Respuesta #1 en: 26 de Octubre de 2011, 11:39:25 »
Bueno, luego de intentar mas veo que solo me funciona cuando lo coloco en el Main, yo buscaba hacerlo por interrupción, seguiré intentando luego.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Detectar USB conectado
« Respuesta #2 en: 26 de Octubre de 2011, 11:44:28 »
En C18 se hace de la siguiente forma:


Código: C
  1. void YourHighPriorityISRCode(){
  2.         #if defined(USB_INTERRUPT)
  3.                 USBDeviceTasks();
  4.     #endif
  5. }
  6.  
  7. void main(){
  8.  
  9.     USBDeviceInit();
  10.     #if defined(USB_INTERRUPT)
  11.         USBDeviceAttach();
  12.     #endif
  13.     while(1){
  14.         #if defined(USB_POLLING)
  15.         USBDeviceTasks();
  16.         #endif
  17.         if(PIN_POWER_USB==1){
  18.              ProcessUSB();
  19.         }
  20.     }
  21. }
  22.  
  23. void ProcessUSB(void){  
  24.        
  25.     //Blink the LEDs according to the USB device status
  26.     if(blinkStatusValid){
  27.         BlinkUSBStatus();
  28.     }
  29.  
  30.     // User Application USB tasks
  31.     if((USBDeviceState < CONFIGURED_STATE)||(USBSuspendControl==1)) return;
  32.    
  33.     if(!HIDRxHandleBusy(USBOutHandle))                          // Hay datos desde el Host?
  34.     {
  35.         // Se tratan datos
  36.     }
  37. }


O sea, las tareas que se realizan de USB no se desactivan nunca, solo se pregunta si está conectado, entonces paso a trabajar con el USB. Si todavía no está configurado retorno, sino ya está listo para trabajar (enviar/recibir datos)


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