Autor Tema: USB Bulk - Funcionan los .hex que descargo de internet pero no si los compilo yo  (Leído 1281 veces)

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

Desconectado Æneas

  • PIC10
  • *
  • Mensajes: 6
Hola, hace días que vengo renegando con este problema sin lograr encontrar la solución. Estoy tratando de comunicar un pic 18f4550 con la pc por medio del puerto usb. Mientras esperaba que me llegara el pic fui desarrollando algunos programas de prueba que funcionan perfectamente en el Isis pero al implementarlos físicamente solo obtengo el mensaje de que no se reconoce el dispositivo.

El tema es que descubrí que si le cargo al pic los archivos .hex ya compilados que descargué de varios sitios web, la pc los reconoce y funcionan perfectamente. Pero si compilo ese mismo código que viene con el archivo hex entonces no funciona. Y al comparar los datos en hexa se ve que son distintos a pesar de que el ccs los compila sin errores.

Uso la versión 4.093. Estoy al límite de paciencia porque por más que lo pienso no le encuentro la solución. La conexión física evidentemente está bien porque con los .hex descargados no hay problema. Se podría decir que los archivos que descargué consisten en archivos compilados que sí funcionan y códigos que no, pero eso no explica que sí funcionen al simularlos.

Bueno, desde ya les agradezco cualquier ayuda que puedan aportar.
Saludos..



Les adjunto el código:
Código: [Seleccionar]
#include <18F4550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN,NOPBADEN
#use delay(clock=48000000)


/////////////////////////////////////////////////////////////////////////////
//
// CCS Library dynamic defines.  For dynamic configuration of the CCS Library
// for your application several defines need to be made.  See the comments
// at usb.h for more information
//
/////////////////////////////////////////////////////////////////////////////
#define USB_HID_DEVICE     FALSE             //deshabilitamos el uso de las directivas HID
#define USB_EP1_TX_ENABLE  USB_ENABLE_BULK   //turn on EP1(EndPoint1) for IN bulk/interrupt transfers
#define USB_EP1_RX_ENABLE  USB_ENABLE_BULK   //turn on EP1(EndPoint1) for OUT bulk/interrupt transfers
#define USB_EP1_TX_SIZE    5                 //size to allocate for the tx endpoint 1 buffer
#define USB_EP1_RX_SIZE    5                 //size to allocate for the rx endpoint 1 buffer


/////////////////////////////////////////////////////////////////////////////
//
// If you are using a USB connection sense pin, define it here.  If you are
// not using connection sense, comment out this line.  Without connection
// sense you will not know if the device gets disconnected.
//       (connection sense should look like this:
//                             100k
//            VBUS-----+----/\/\/\/\/\----- (I/O PIN ON PIC)
//                     |
//                     +----/\/\/\/\/\-----GND
//                             100k
//        (where VBUS is pin1 of the USB connector)
//
/////////////////////////////////////////////////////////////////////////////
//#define USB_CON_SENSE_PIN PIN_B2  //CCS 18F4550 development kit has optional conection sense pin

/////////////////////////////////////////////////////////////////////////////
//
// Include the CCS USB Libraries.  See the comments at the top of these
// files for more information
//
/////////////////////////////////////////////////////////////////////////////
#include <pic18_usb.h>     //Microchip PIC18Fxx5x Hardware layer for CCS's PIC USB driver
#include <PicUSB.h>         //Configuración del USB y los descriptores para este dispositivo
#include <usb.c>           //handles usb setup tokens and get descriptor reports


#define LED       PIN_D2
#define LED_ON    output_high
#define LED_OFF   output_low

#define comando   recibe[0]
#define param1    recibe[1]
#define param2    recibe[2]
#define param3    recibe[3]
#define param4    recibe[4]
#define eco       envia[0]// Hace un eco del comando recibido
#define result1   envia[1]
#define result2   envia[2]
#define result3   envia[3]
#define result4   envia[4]



void main(void) {

   int8 recibe[5];                  //declaramos variables
   int8 envia[5];

   LED_OFF(LED);                   //Apagamos el LED

   usb_init();                      //inicializamos el USB

   usb_task();                      //habilita periferico usb e interrupciones
   usb_wait_for_enumeration();      //esperamos hasta que el PicUSB sea configurado por el host

   while (TRUE)
   {
      if(usb_enumerated())          //si el PicUSB está configurado
      {
         if (usb_kbhit(1))          //si el endpoint de salida contiene datos del host
         {
            usb_get_packet(1, recibe, 5); //cojemos el paquete de tamaño 5 bytes del EP1 y almacenamos en recibe

            eco = comando;  //Regresa el comando recibido
            result1 = param1*2;
            result2 = param2*2;
            result3 = param3*2;
            result4 = param4*2;
            
            switch (comando)
            {
               case 1:// Enciende LED
               LED_ON(LED);
               break;
              
               case 2:// Apaga LED
               LED_OFF(LED);
               break;  
            }
            usb_put_packet(1, envia, 5, USB_DTS_TOGGLE); //enviamos el paquete de tamaño 5 bytes del EP1 al PC
         }// Fin if (usb_kbhit(1))
      }// Fin if(usb_enumerated())
   }// Fin while (TRUE)
}
« Última modificación: 12 de Marzo de 2013, 19:42:59 por Æneas »

Desconectado Æneas

  • PIC10
  • *
  • Mensajes: 6
Ya encontré la solución. Por si alguien tiene el mismo problema, lo solucioné instalando la versión 4.084. Los mismos programa que no andaban con la versión 4.093, con la 4.084 andan perfecto.


 

anything