TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: jfmateos2 en 05 de Febrero de 2011, 14:53:19

Título: MPLAB C Compiler PIC18: Lo básico de la librería USB-CDC
Publicado por: jfmateos2 en 05 de Febrero de 2011, 14:53:19
El problema de los ejemplos que vienen con las librerías de Microchip es que están pensados para funcionar en los demostradores de Microchip y esto supone que el código está tan plagado de excepciones que resulta difícil de leer.

Llevo unos días peleándome con la de USB para usar comunicación CDC y he decidido crear un ejemplo que sea la mínima expresión; es decir, sólo lo necesario para ver cómo funciona y luego poder ampliarlo a gusto.

El resultado se lo dejo a continuación, y me ha permitido establecer una comunicación CDC muy básica tanto con un 19f27j53 usando el oscilador interno como en un 18f2455 usando un cristal de 20MHz.

La siguiente en caer será la librería TCP/IP :mrgreen:


MPLAB C Compiler for PIC18 USB CDC barebones

Este desarrollo está basado en el ejemplo "USB Device - CDC - Basic Demo" de las librerías de aplicación de Microchip.
En el archivo adjunto encontrará todo el proyecto, además de los HEX para un 18f2455 y un 18f27j53.

REQUISITOS PREVIOS

1. Instalar MPLAB IDE: http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en019469
2. Instalar la versión dgratuita educativa de MPLAB C Compiler for PIC18: http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en536656
3. Instalar las Microchip Application Library: http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=2680&dDocName=en547784

Por defecto, el compilador se instala en la carpeta MCC18 y, en su interior, se encuentra la subcarpeta h que contiene includes fundamentales.
Por defecto, la Application Library se instala en la carpeta Microchip Solutions v2010-10-19 y, en su interior, se encuentra la subcarpeta Microchip/Include que contiene includes fundamentales.


PASO A PASO
1. En primer lugar crearemos una carpeta para nuestro proyecto y colocaremos en ella los archivos del Stack USB que nos interesan. Cree una carpeta llamada, por ejemplo: USB-CDC.
2. El stack USB requiere que existan en la carpeta del proyecto los 3 siguientes archivos:
   * HardwareProfile.h: El stack está pensado para utilizarlo con los demostradores de Microchip, pero si vamos a usar un prototipo diferente tendremos que crear este archivo dentro de la carpeta con el contenido mínimo que se muestra a continuación:
Código: [Seleccionar]
#ifndef HARDWARE_PROFILE_H
    #define HARDWARE_PROFILE_H

    #define DEMO_BOARD USER_DEFINED_BOARD
    #define self_power          1
    #define USB_BUS_SENSE       1
#endif  //HARDWARE_PROFILE_H
  * usb_decriptors.c: Este archivo contiene el nombre con el que identificará nuestro dispositivo en el sistema y lo más cómodo es copiarlo directamente del ejemplo C:\Microchip Solutions v2010-10-19\USB Device - CDC - Basic Demo\CDC - Basic Demo - Firmware.
   * usb_config.h: Este archivo establece algunas constantes que condicionan el funcionamiento del stack y lo más cómodo es copiarlo directamente del ejemplo C:\Microchip Solutions v2010-10-19\USB Device - CDC - Basic Demo\CDC - Basic Demo - Firmware. Por defecto, viene configurado para usar el stack en modo interrupción, pero en este ejemplo se ha utilizado en modo polling porque es más sencillo. Por este motivo tenemos que realizar en este archivo la modificación que se indica a continuación (líneas 83 y 84):
Código: [Seleccionar]
#define USB_POLLING
//#define USB_INTERRUPT
3. Ejecutar MPLAB IDE.
4. Seleccionar Project>Project Wizard.
5. Seleccionar el microcontrolador. Este ejemplo ha sido probado conel PIC18f2455 y con el PIC18F27J53, pero en principio debería funcionar con todos. Pulsar Siguiente.
6. Seleccionar como Active Toolsuite "Microchip C18 Toolsuite". Pulsar Siguiente.
7. Pulsar el botón Browse para selecccionar la carpeta USB-CDC que creamos en el paso 1 y en la que hemos colocado ya los 3 archivos necesarios, y escribir un nombre para el proyecto, por ejemplo USB-CDC en el cuadro de texto Nombre. Pulsar Guardar y, a continuación, Siguiente.
7. Seleccionar los 3 archivos que ya hemos colocado en la carpeta USB-CDC y pulsar el botón Add para añadirlos al proyecto.
8. Además de estos 3 archivos, necesitamos 2 del stack: C:\Microchip Solutions v2010-10-19\Microchip\USB\usb_device.c y C:\Microchip Solutions v2010-10-19\Microchip\USB\CDC Device Driver\usb_function_cdc.c. Añádalos también pulsando el botón Add. Pulse el botón Siguiente y, a continuación, Finalizar.
9. Confirme el nombre que se propone para el Workspace pulsando Guardar.
10. Además de los 5 archivos que hemos incluido en el proyecto, el stack hace uso de un puñado de includes; pero en lugar de añadirlos vamos a indicarle a MPLAB dónde buscarlos. Seleccione Project>Build options>Project y, en el cuadro de diálogo que aparece, asegúrese de que está activa la ficha Directories.
11. Despliegue el cuadro de lista Show directories for y seleccione Include Search Path. Utilice el botón New para añadir las rutas C:\Microchip Solutions v2010-10-19\Microchip\Include y C:\MCC18\h.
12. Despliegue nuevamente el cuadro de lista Show directories for y seleccione Library Search Path. Si no está incluida la dirección C:\MCC18\lib, añádala pulsando el botón New.
13. Pulse el botón Aceptar.
14. Ya tenomos todo lo necesario para usar el stack USB en modo CDC, sólo nos queda crear el archivo main de nuestra aplicación. Seleccione File>New y, a continuación, File>Save As para guardar el archivo con el nombre main.c en la carpeta USB-CDC del proyecto. Seleccione Project>Add Files to Project y elija el archivo main.c para incluirlo también en el árbol del proyecto.
15. Escriba en el archivo main.c el código que se muestra a continuación. Las únicas precauciones son comentar/descomentar los pragmas que se deseen utilizar de la zona superior. El primer conjunto está pensado para utilizar el oscilador interno en un 18f27j53 (a pesar de que en principio no debería ser muy fiable, el caso es que funciona), y el segundo grupo está pensado para usar un cristal externo en un 18f2455. El código empieza con un USBDeviceInit que inicializa el dispositivo USB apoyándose en las tres funciones Callback que hay al final del código. A continuación simplemente se entra en un bucle infinito que llama en cada iteración a las funciones USBDeviceTasks() y ProcessIO. La primera debe llamarse periódicamente para poner a punto el estado de la comunicación USB y en ProcessIO en primer lugar se comprueba si el dispositivo está aún conectado ((USBDeviceState < CONFIGURED_STATE)||(USBSuspendControl==1)), a continuación se comprueba si está listo para recibir/transmitir (USBUSARTIsTxTrfReady()) y, en caso afirmativo, se leen los nuevos caracteres que hayan podido llegar desde el ordenador por el USB getsUSBUSART(USB_Out_Buffer,64) y se los devolvemos al buffer de salida anteponiendo "Ha pulsado: " con  putsUSBUSART. Por último, llamamos a CDCTxService() que es la responsable de enviar el buffer por el puerto USB de vuelta al ordenador. Para probar el programa, compílelo con Project>Build all, grábelo en su dispositivo, conéctelo al ordenador, abra una sesión de HyperTerminal y conecte al puerto USB (generalmente aparecerá como COM4 o uno superior); todo lo que escriba le será devuelto anteponiento "Ha pulsado".
Código: [Seleccionar]
/** CONFIGURATION **************************************************/
//Descomente estos pragmas para usar el oscilador interno. Probado en un pic18f27j53
#pragma config WDTEN = OFF          
#pragma config CPUDIV = OSC1        
#pragma config CFGPLLEN = ON
#pragma config OSC = INTOSCPLL
#pragma config PLLDIV = 2
#pragma config XINST = OFF
//Descomente estos pragmas para usar un cristal externo de 20MHz. Probado en un pic18f2455
//#pragma config WDT = OFF          
//#pragma config CPUDIV = OSC1_PLL2      
//#pragma config FOSC = HSPLL_HS
//#pragma config PLLDIV = 5
//#pragma config XINST = OFF
//#pragma config USBDIV = 2
//#pragma config VREGEN = ON





/** I N C L U D E S **********************************************************/
#include "USB/usb.h"
#include "USB/usb_function_cdc.h"


/** V A R I A B L E S ********************************************************/
char USB_Out_Buffer[64];
char buffer[64];



/** P R I V A T E  P R O T O T Y P E S ***************************************/
void ProcessIO(void);



/** DECLARATIONS ***************************************************/
void main(void)
{  
    USBDeviceInit(); //usb_device.c.  Initializes USB module SFRs and firmware
     //variables to known states.

    while(1)
    {  
        USBDeviceTasks();
        ProcessIO();        
    }//end while
}//end main



/********************************************************************
 * Function:        void ProcessIO(void)
 *
 * PreCondition:    None
 *
 * Input:           None
 *
 * Output:          None
 *
 * Side Effects:    None
 *
 * Overview:        This function is a place holder for other user
 *                  routines. It is a mixture of both USB and
 *                  non-USB tasks.
 *
 * Note:            None
 *******************************************************************/
void ProcessIO(void)
{  
    BYTE numBytesRead;

    // User Application USB tasks
    if((USBDeviceState < CONFIGURED_STATE)||(USBSuspendControl==1)) return;

    if(USBUSARTIsTxTrfReady())
    {
numBytesRead = getsUSBUSART(USB_Out_Buffer,64);
if(numBytesRead != 0)
{
strcpypgm2ram(buffer,(const rom far char *)"Ha pulsado: ");
strncat(buffer,USB_Out_Buffer,numBytesRead);
strcatpgm2ram(buffer,(const rom far char *)"\r\n");
putsUSBUSART(buffer);
}
}
    CDCTxService();
} //end ProcessIO





// ******************************************************************************************************
// ************** USB Callback Functions ****************************************************************
// ******************************************************************************************************
// The USB firmware stack will call the callback functions USBCBxxx() in response to certain USB related
// events.  For example, if the host PC is powering down, it will stop sending out Start of Frame (SOF)
// packets to your device.  In response to this, all USB devices are supposed to decrease their power
// consumption from the USB Vbus to <2.5mA each.  The USB module detects this condition (which according
// to the USB specifications is 3+ms of no bus activity/SOF packets) and then calls the USBCBSuspend()
// function.  You should modify these callback functions to take appropriate actions for each of these
// conditions.  For example, in the USBCBSuspend(), you may wish to add code that will decrease power
// consumption from Vbus to <2.5mA (such as by clock switching, turning off LEDs, putting the
// microcontroller to sleep, etc.).  Then, in the USBCBWakeFromSuspend() function, you may then wish to
// add code that undoes the power saving things done in the USBCBSuspend() function.

// The USBCBSendResume() function is special, in that the USB stack will not automatically call this
// function.  This function is meant to be called from the application firmware instead.  See the
// additional comments near the function.


/*******************************************************************
 * Function:        void USBCBCheckOtherReq(void)
 *
 * PreCondition:    None
 *
 * Input:           None
 *
 * Output:          None
 *
 * Side Effects:    None
 *
 * Overview:        When SETUP packets arrive from the host, some
 * firmware must process the request and respond
 * appropriately to fulfill the request.  Some of
 * the SETUP packets will be for standard
 * USB "chapter 9" (as in, fulfilling chapter 9 of
 * the official USB specifications) requests, while
 * others may be specific to the USB device class
 * that is being implemented.  For example, a HID
 * class device needs to be able to respond to
 * "GET REPORT" type of requests.  This
 * is not a standard USB chapter 9 request, and
 * therefore not handled by usb_device.c.  Instead
 * this request should be handled by class specific
 * firmware, such as that contained in usb_function_hid.c.
 *
 * Note:            None
 *******************************************************************/
void USBCBCheckOtherReq(void)
{
    USBCheckCDCRequest();
}//end



/*******************************************************************
 * Function:        void USBCBInitEP(void)
 *
 * PreCondition:    None
 *
 * Input:           None
 *
 * Output:          None
 *
 * Side Effects:    None
 *
 * Overview:        This function is called when the device becomes
 *                  initialized, which occurs after the host sends a
 * SET_CONFIGURATION (wValue not = 0) request.  This
 * callback function should initialize the endpoints
 * for the device's usage according to the current
 * configuration.
 *
 * Note:            None
 *******************************************************************/
void USBCBInitEP(void)
{
    CDCInitEP();
}



/*******************************************************************
 * Function:        BOOL USER_USB_CALLBACK_EVENT_HANDLER(
 *                        USB_EVENT event, void *pdata, WORD size)
 *
 * PreCondition:    None
 *
 * Input:           USB_EVENT event - the type of event
 *                  void *pdata - pointer to the event data
 *                  WORD size - size of the event data
 *
 * Output:          None
 *
 * Side Effects:    None
 *
 * Overview:        This function is called from the USB stack to
 *                  notify a user application that a USB event
 *                  occured.  This callback is in interrupt context
 *                  when the USB_INTERRUPT option is selected.
 *
 * Note:            None
 *******************************************************************/
BOOL USER_USB_CALLBACK_EVENT_HANDLER(USB_EVENT event, void *pdata, WORD size)
{
    switch(event)
    {
        case EVENT_CONFIGURED:
            USBCBInitEP();
            break;      
        case EVENT_EP0_REQUEST:
            USBCBCheckOtherReq();
            break;      
        default:
            break;
    }      
    return TRUE;
}


/** EOF main.c *************************************************/

Metadatos para buscadores:

USB CDC Internal Oscillator
Microchip USB barebones
Basic example of Microchip USB CDC
Título: Re: MPLAB C Compiler PIC18: Lo básico de la librería USB-CDC
Publicado por: LABmouse en 05 de Febrero de 2011, 15:16:16
Grandioso!,

Te voy a seguir pues esta semana debo enfrentarme a este mismo problema.

SALUDOS!

Título: Re: MPLAB C Compiler PIC18: Lo básico de la librería USB-CDC
Publicado por: Nocturno en 05 de Febrero de 2011, 15:18:58
Magnífico trabajo, Juanfe. Ya lo he descargado por si algún día me fuera necesario. Muchas gracias
Título: Re: MPLAB C Compiler PIC18: Lo básico de la librería USB-CDC
Publicado por: Suky en 05 de Febrero de 2011, 16:53:22
Muy buen adelanto   :-/ Ahora, cuando dices que por polling es más sencillo, lo dices por la sintaxis para usar interrupciones, o sea el tema de ubicar las funciones en los vectores adecuadamente? Porque lo que es la librería de usb, usar polling o interrupción, es llamar a USBDeviceTasks(), en un bucle infinito o en una ISR de alta prioridad, nada más  ;-)


Saludos!
Título: Re: MPLAB C Compiler PIC18: Lo básico de la librería USB-CDC
Publicado por: J1M en 05 de Febrero de 2011, 17:03:45
El TCPIP ya está dominado! A ver si el Lunes saco un huequito y pongo un paso a paso tan dpm como este.

Enhorabuena por la 'domada'! ;D
Título: Re: MPLAB C Compiler PIC18: Lo básico de la librería USB-CDC
Publicado por: jfmateos2 en 05 de Febrero de 2011, 17:06:31
Suky, me refería a que es más sencillo para los que tenemos aún poca experiencia y no estamos  muy desenvueltos con el tema de las interrupciones, pero efectivamente es también  sencillo:  basta con mantener el define  USB_Interrupt y llamar aUSBDeviceTasks en el código de gestión de la interrupción de alta prioridad.
En este ejemplo pretendía poner el código mínimo imprescindible para poder ver funcionar el USB-CDC y, a partir de aquí, todo es construir...


******Cogno J1M, entonces ni me pongo con ello. Ahora mismo te iba a escribir para que me asesorases por dónde empezar.
Título: Re: MPLAB C Compiler PIC18: Lo básico de la librería USB-CDC
Publicado por: jfmateos2 en 06 de Febrero de 2011, 07:27:46
Disculpen, había una errata en el código (faltaba el USBDeviceTasks(); en el bucle principal).

Ya está corregido en el hilo inicial.
Título: Re: MPLAB C Compiler PIC18: Lo básico de la librería USB-CDC
Publicado por: jorgejg en 24 de Agosto de 2011, 11:19:46
Seguí los pasos al pie de la letra y al conectar a la PC me sale la ventana emergente del lado derecho inferior de la pantalla diciendo "No se reconoce el dispositivo USB ..." pero ayer al menos me salia una ventana del windows pidiendo drivers para instalar, yo le daba siguiente pero no instalaba y finalmente no podia instalar los controladores.

Como podria solucionar esto?
Título: Re: MPLAB C Compiler PIC18: Lo básico de la librería USB-CDC
Publicado por: Suky en 24 de Agosto de 2011, 12:26:31
Cuando pide los driver selecciona la carpeta que se encuentra junto a los ejemplos, creo que se llama inf. El problema puede ser el hardware, si estas utilizando el mismo ejemplo, revisa las conexiones si utilizas un protoboard.


Saludos!
Título: Re: MPLAB C Compiler PIC18: Lo básico de la librería USB-CDC
Publicado por: jorgejg en 24 de Agosto de 2011, 18:59:31
Tenias razón, seleccioné el inf y ahora si instaló bien y comunicó bien con el hypert. gracias Suky y jfmateos por el aporte. Trataré de modificar el programa para lo que necesito, gracias.
Título: Re: MPLAB C Compiler PIC18: Lo básico de la librería USB-CDC
Publicado por: IngRandall en 11 de Abril de 2012, 13:37:21
Tengo una duda acerca de como funciona ese stack por interrupciones, osea no se si se puede que sea así como el uart que cuando llega el dato se genera la interrupción y el va y la atiende.
Título: Re: MPLAB C Compiler PIC18: Lo básico de la librería USB-CDC
Publicado por: jeremylf en 11 de Abril de 2012, 22:27:18
El resultado se lo dejo a continuación, y me ha permitido establecer una comunicación CDC muy básica tanto con un 19f27j53 usando el oscilador interno como en un 18f2455 usando un cristal de 20MHz.

No encuentro el 19F en microchip. Como consigo este uC?








Fuera de bromas, te ha quedado estupendo. Se agradece enormemente!  :mrgreen:
Título: Re: MPLAB C Compiler PIC18: Lo básico de la librería USB-CDC
Publicado por: jfmateos2 en 12 de Abril de 2012, 02:07:33
Es una errata jeremylf, me refería al 18f27j53
Título: Re: MPLAB C Compiler PIC18: Lo básico de la librería USB-CDC
Publicado por: rohood en 01 de Mayo de 2012, 12:18:21
A que velocidad se debe configurar el hyperterminal, por ahi lei que eso depende del driver y que esta por defecto a 9600, no estoy seguro porque no me funciona, el codigo simulado en ISIS recibe pero no transmite, y sera que se puede cambiar la velocidad determinada por el driver.
Título: Re: MPLAB C Compiler PIC18: Lo básico de la librería USB-CDC
Publicado por: Suky en 01 de Mayo de 2012, 14:16:16
En las propiedades del driver podes ver a que velocidad está configurado. También podes cambiarlo.


Saludos!
Título: Re: MPLAB C Compiler PIC18: Lo básico de la librería USB-CDC
Publicado por: caeshark_ en 01 de Junio de 2012, 20:22:20
Para los que no tenemos ni idea, hay algun circuito tipo por ahi?
Para aplicar este ejemplo?
Título: Re: MPLAB C Compiler PIC18: Lo básico de la librería USB-CDC
Publicado por: Suky en 01 de Junio de 2012, 21:05:42
El circuito mínimo es muy básico, ejemplos:

(http://3.bp.blogspot.com/_meF1KpGU79k/SwfFREAxOYI/AAAAAAAAAKc/4GtBQBnP_JI/s1600/schem.JPG)

(http://rgb.kitiyo.com/pics/pic18f4550-mchpfsusb-schematic.gif)

(http://blog.tkjelectronics.dk/wp-content/uploads/PIC18_USB_Schematic.gif)


Saludos!
Título: Re: MPLAB C Compiler PIC18: Lo básico de la librería USB-CDC
Publicado por: jfmateos2 en 30 de Diciembre de 2012, 14:05:54
Otro tutorial interesante sobre cómo utilizar el stack usb cdc:

http://www.foxytronics.com/tutorials/_/pic-microcontrollers/pic18/using-the-microchip-pic18-usb-cdc-framework-r17
Título: Re: MPLAB C Compiler PIC18: Lo básico de la librería USB-CDC
Publicado por: PaulSilver17 en 10 de Enero de 2013, 20:15:06
A alguien le ha dado este error, o esta clase de errores, se lo agradecería mucho

Make: The target "C:\Documents and Settings\Paul Urbina\Mis documentos\Dropbox\BUAP - Invierno 2012\COMUNICACIÓN USB\USB-CDC\usb_device.o" is out of date.
Executing: "C:\Archivos de programa\Microchip\mplabc18\v3.44\bin\mcc18.exe" -p=18F4550 /i"C:\Archivos de programa\Microchip\mplabc18\v3.44\h" -I"C:\Microchip Solutions v2012-10-15\Microchip\Include" "usb_device.c" -fo="usb_device.o" -D__DEBUG -Ou- -Ot- -Ob- -Op- -Or- -Od- -Opa-
C:\Documents and Settings\Paul Urbina\Mis documentos\Dropbox\BUAP - Invierno 2012\COMUNICACIÓN USB\USB-CDC\system\usb\usbdefs\usbdefs_std_dsc.h:96:Error [1034] previous definition of macro '_DEFAULT' does not agree
C:\Documents and Settings\Paul Urbina\Mis documentos\Dropbox\BUAP - Invierno 2012\COMUNICACIÓN USB\USB-CDC\system\usb\usbdefs\usbdefs_std_dsc.h:97:Error [1034] previous definition of macro '_SELF' does not agree
C:\Documents and Settings\Paul Urbina\Mis documentos\Dropbox\BUAP - Invierno 2012\COMUNICACIÓN USB\USB-CDC\system\usb\usbdefs\usbdefs_std_dsc.h:98:Error [1034] previous definition of macro '_RWU' does not agree
C:\Documents and Settings\Paul Urbina\Mis documentos\Dropbox\BUAP - Invierno 2012\COMUNICACIÓN USB\USB-CDC\system\usb\usbdefs\usbdefs_std_dsc.h:107:Error [1034] previous definition of macro '_NS' does not agree
C:\Documents and Settings\Paul Urbina\Mis documentos\Dropbox\BUAP - Invierno 2012\COMUNICACIÓN USB\USB-CDC\system\usb\usbdefs\usbdefs_std_dsc.h:108:Error [1034] previous definition of macro '_AS' does not agree
C:\Documents and Settings\Paul Urbina\Mis documentos\Dropbox\BUAP - Invierno 2012\COMUNICACIÓN USB\USB-CDC\system\usb\usbdefs\usbdefs_std_dsc.h:109:Error [1034] previous definition of macro '_AD' does not agree
C:\Documents and Settings\Paul Urbina\Mis documentos\Dropbox\BUAP - Invierno 2012\COMUNICACIÓN USB\USB-CDC\system\usb\usbdefs\usbdefs_std_dsc.h:110:Error [1034] previous definition of macro '_SY' does not agree
C:\Documents and Settings\Paul Urbina\Mis documentos\Dropbox\BUAP - Invierno 2012\COMUNICACIÓN USB\USB-CDC\system\usb\usbdefs\usbdefs_std_dsc.h:113:Error [1034] previous definition of macro '_DE' does not agree
C:\Documents and Settings\Paul Urbina\Mis documentos\Dropbox\BUAP - Invierno 2012\COMUNICACIÓN USB\USB-CDC\system\usb\usbdefs\usbdefs_std_dsc.h:114:Error [1034] previous definition of macro '_FE' does not agree
C:\Documents and Settings\Paul Urbina\Mis documentos\Dropbox\BUAP - Invierno 2012\COMUNICACIÓN USB\USB-CDC\system\usb\usbdefs\usbdefs_std_dsc.h:115:Error [1034] previous definition of macro '_IE' does not agree
MPLAB C18 v3.44 (evaluation)
Copyright 2000-2011 Microchip Technology Inc.
Days remaining until evaluation becomes feature limited:  17
Halting build on first failure as requested.
Título: Re: MPLAB C Compiler PIC18: Lo básico de la librería USB-CDC
Publicado por: eric090 en 26 de Febrero de 2013, 15:11:29
Wenas, ya se que este post esta creado de hace un tiempo pero me gustaria saber si me podriais soucionar los siguientes errores, he seguido paso a paso todos los puntos y lo que me desconcerta es que algunos algunos includes tienen puesta una direccion por defecto "system/archivo.h, no se si es normal o no,  ahi os pongo los errores y gracias de antemano  :)

Debug build of project `C:\Users\pc\Desktop\PROYECTOS\123456789\USB-CDC\proyecto.mcp' started.
Preprocessor symbol `__DEBUG' is defined.
Tue Feb 26 19:01:59 2013
----------------------------------------------------------------------
Make: The target "C:\Users\pc\Desktop\PROYECTOS\123456789\USB-CDC\usb_function_cdc.o" is up to date.
Make: The target "C:\Users\pc\Desktop\PROYECTOS\123456789\USB-CDC\usb_device.o" is up to date.
Make: The target "C:\Users\pc\Desktop\PROYECTOS\123456789\USB-CDC\usb_descriptors.o" is up to date.
Make: The target "C:\Users\pc\Desktop\PROYECTOS\123456789\USB-CDC\main.o" is up to date.
Make: The target "C:\Users\pc\Desktop\PROYECTOS\123456789\USB-CDC\proyecto.o" is out of date.
Executing: "C:\MCC18\bin\mcc18.exe" -p=18F2550 /i"C:\Microchip Solutions v2012-10-15\Microchip\Include" -I"C:\MCC18\h" "proyecto.c" -fo="proyecto.o" -D__DEBUG -Ou- -Ot- -Ob- -Op- -Or- -Od- -Opa-
C:\MCC18\h\usbdefs_std_dsc.h:44:Error [1027] unable to locate 'system\typedefs.h'
C:\MCC18\h\usb.h:51:Error [1027] unable to locate 'autofiles\usbdsc.h'
C:\MCC18\h\usbdefs_ep0_buff.h:44:Error [1027] unable to locate 'system\typedefs.h'
C:\MCC18\h\usbdefs_ep0_buff.h:45:Error [1027] unable to locate 'autofiles\usbcfg.h'
C:\MCC18\h\usb.h:57:Error [1027] unable to locate 'usbdrv.h'
C:\MCC18\h\usb.h:59:Error [1027] unable to locate 'usbctrltrf.h'
C:\MCC18\h\usb.h:61:Error [1027] unable to locate 'usb9.h'
C:\MCC18\h\io_cfg.h:51:Error [1027] unable to locate 'autofiles\usbcfg.h'
C:\Users\pc\Desktop\PROYECTOS\123456789\USB-CDC\proyecto.c:9:Error [1027] unable to locate 'pic18_usb.h'
C:\Users\pc\Desktop\PROYECTOS\123456789\USB-CDC\proyecto.c:10:Error [1027] unable to locate 'usb_desc_scope.h'
C:\Users\pc\Desktop\PROYECTOS\123456789\USB-CDC\proyecto.c:11:Error [1027] unable to locate 'usb.c'
Halting build on first failure as requested.
----------------------------------------------------------------------
Debug build of project `C:\Users\pc\Desktop\PROYECTOS\123456789\USB-CDC\proyecto.mcp' failed.
Preprocessor symbol `__DEBUG' is defined.
Tue Feb 26 19:02:00 2013
----------------------------------------------------------------------
BUILD FAILED

Título: Re: MPLAB C Compiler PIC18: Lo básico de la librería USB-CDC
Publicado por: borodelostoldos en 24 de Abril de 2013, 17:05:32
Tengo una duda acerca de como funciona ese stack por interrupciones, osea no se si se puede que sea así como el uart que cuando llega el dato se genera la interrupción y el va y la atiende.


También me queda esta duda, ya que hice andar el código de ejemplo y lo modifique un poco para aprender a usarlo, pero no logro resolver la transacción por interrupciones.
Por lo que estuve mirando, ademas de llamar antes del While a la función USBDeviceInit() hay que llamar también a la USBDeviceAttach().
Luego habilitar las interrupciones, en particular la que genera el USB, darle prioridad y atenderla cuando salte con una rutina en donde se llame a la función USBDeviceTask().
Sin embargo, mi problema es que el dispositivo ni siquiera se enumera, con lo cual jamas puedo enviarle un dato desde la PC para confirmar que salta la interrupción.

¿Que más debo hacer para que se enumere y establesca la comunicación?
GRACIAS!!!
Título: Re: MPLAB C Compiler PIC18: Lo básico de la librería USB-CDC
Publicado por: neto100 en 03 de Julio de 2013, 20:02:37
Debes hacer lo que se indica en el comienzo del foro. Se le debe decir al compilador donde encontrar las librerias, es importante adjuntar los archivos .c necesarios como por ejemplo usb_funtion_cdc.c, para mplanb 8.87 Project>Built Options>Project>Directories>Include search Path>New> y anexas los derectorios donde estan los archivos .c.
Título: Re: MPLAB C Compiler PIC18: Lo básico de la librería USB-CDC
Publicado por: neto100 en 03 de Julio de 2013, 20:13:52
Hola a todos:
Modifique el ejemplo de Microchip CDC-BASICO y no me funciona. La verdad estoy un poco decepcionado porque instala bien, el pc lo reconoce, se asigna puerto serial, pero cuando habro la hiperterminal no funciona. simplemente no me muestra lo que dice el ejemplo. Alguien me puede ayudar que puedo estar haciendo mal? gracias. La modificación que hago es pasarlo a pic 18f2550 todo lo demas lo dejo como está. el ejemplo que modifico es el que está hecho para la board PICDEM FSUSB.
Título: Re: MPLAB C Compiler PIC18: Lo básico de la librería USB-CDC
Publicado por: neto100 en 03 de Julio de 2013, 20:18:48
Errata Abro no habro. Se dice que la velocidad es un formalismo o sea  no importa. Tambien noto que el cursor de la hiperterminal se queda quieto cuando trato de escribira lgo desde el teclado, cuando oprimo el botón tambien trata de hacer algo.
Título: Re: MPLAB C Compiler PIC18: Lo básico de la librería USB-CDC
Publicado por: neto100 en 03 de Julio de 2013, 20:23:31
Otra cosa que parece tengo diferente es el archivo lkr no remapeado, pero no debería tener ningún problema o eso dreo.
Título: Re: MPLAB C Compiler PIC18: Lo básico de la librería USB-CDC
Publicado por: Vayadespiste en 04 de Febrero de 2014, 20:02:11
Muchas gracias jfmateos2, gracias a tu aportación he podido dar el primer arañazo y todo ha funcionado a la primera
Lo dicho gracias y un saludo.
Rodri.
Título: Re:MPLAB C Compiler PIC18: Lo básico de la librería USB-CDC
Publicado por: jose2312 en 09 de Mayo de 2016, 23:21:53
Saludos amigos,este ejemplo sirve para pic18f4550? he tratado de iniciar el pic,pero a la hora de conectar a la pc, no me reconoce el dispositivo