# 7 – USB CDC

> #### MPLAB X IDE - XC8 Compiler
>
> [**PIC18F4550 / PIC18F45K50**](https://docs.microside.com/practicas/mplab-x-ide/xc8-compiler/pic18f4550-or-pic18f45k50)

<figure><img src="https://177299348-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbyV2zAlQAiqg46a3Lr8z%2Fuploads%2F1r9vA3dtOowRX5fxImv4%2F7%20%E2%80%93%20USB%20CDC%20MICROSIDE.png?alt=media&#x26;token=2dbe3355-2fd1-4162-814c-b5687080c12f" alt=""><figcaption></figcaption></figure>

## **Introducción**

En esta práctica se implementa una comunicación USB configurada como CDC (Comunications Devices Class) emulando un puerto serial UART, mediante comandos se controla un LED y se obtiene una lectura del estado lógico del push button integrado llamado BOOT.

## **Descripción**

En esta práctica se realiza la conexión con el puerto USB (Universal Serial Bus) configurado en clase CDC (Comunications Devices Class) emulando un puerto serial, el cual envía indicaciones para el encendido y apagado de un LED, también pregunta el estado de un push button usando el módulo **X-TRAINER** con el **PIC18F4550/PIC18F45K50**. Para encender el LED se envía el número 1, si se desea apagar se envía el número 0. Para recibir el estado del push button “BOOT”, se envía el signo “?”, si está presionado recibe el número 0, en caso contrario se recibe el número 1.

**Materiales:**

1 x Tarjeta **X-TRAINER**. [**Manuales**](https://docs.microside.com/tarjetas-de-desarrollo/x-trainer) | [**Comprar**](https://www.microside.com/shop/category/entrenadores-pic-1)

1 x Módulo programador **XCU** o **XCU Lite.** [**Manuales**](https://docs.microside.com/programadores-pics-and-avrs/pic-and-avr) **|** [**Comprar**](https://www.microside.com/shop/category/programadores-pics-avrs-15)

1 x Cable micro USB.

**Software:**

Windows 7 o posterior.

MPLAB X IDE. [**Descarga**](https://www.microchip.com/mplab/mplab-x-ide)

Compilador XC8. [**Descarga**](https://www.microchip.com/en-us/development-tools-tools-and-software/mplab-xc-compilers)

Software Hercules [**Descarga**](https://www.hw-group.com/software/hercules-setup-utility)

X-TRAINER Suite v1.0 [**Descarga**](https://raw.githubusercontent.com/MICROSIDE-TECHNOLOGY/microside_download_archive/main/Tools/X-TRAINER%20Suite/X-TRAINER%20Suite%20Setup.zip)

MPLAB Code Configurator. (**Solo para PIC18F45K50**)

## **Procedimiento**

1. En el apartado de “[**Diagrama esquemático**](#diagrama-esquematico)” selecciona el modelo de tu tarjeta, realiza las conexiones que se muestran en la imagen y conéctala a la computadora.

{% hint style="info" %}
Las conexiones mostradas en los diagramas esquemáticos son las mismas ya sea que la tarjeta **X-TRAINER** posea el **PIC18F4550** o el **PIC18F45K50**.
{% endhint %}

2. Instala las librerías de Microchip necesarias para esta práctica, en el siguiente [**link**](https://docs.microside.com/practicas/ides/libreria-usb-mplab-x-ide) encontrarás un manual de instalación.
3. Ejecuta **MPLAB X IDE** y crea un nuevo proyecto con el código fuente que se encuentra en el apartado "[**Código**](#codigo)".
4. &#x20;Ejecuta MPLAB X IDE, abre el proyecto “picdem\_fs\_usb.x” que se encuentra en la ruta donde se instalaron las librerías del paso 2, en este caso la ruta es:

{% hint style="info" %}
C:\microchip\mla\v2018\_11\_26\apps\usb\device\cdc\_basic\firmware. [**Imagen de referencia**](https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbyV2zAlQAiqg46a3Lr8z%2Fuploads%2FCi0msJBOfvlc3a2pbySq%2FCaptura-de-pantalla-2021-01-13-152833.webp?alt=media\&token=a36716d1-fd8c-4d24-a38a-040cea117c01)
{% endhint %}

5. Sustituye todo el código que se encuentra en el archivo main por el que obtuviste en el paso 3. [**Imagen de referencia**](https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbyV2zAlQAiqg46a3Lr8z%2Fuploads%2F05C4kQQ5rvvS7DRjReRE%2FCaptura-de-pantalla-2021-01-13-152902.webp?alt=media\&token=9a097cc2-d3ac-4172-8f82-67e87f33a710).
6. Realiza los siguientes pasos para configurar el **bootloader** y poder programar la tarjeta **X-TRAINER**:

* Da clic en ***File*** y ***Project Properties***.

<figure><img src="https://177299348-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbyV2zAlQAiqg46a3Lr8z%2Fuploads%2FmWA48vgz0NiwtZUS2t0b%2FFILE%20MPLAB%20X%20IDE%20-%20PIC18F45K50%20PIC18F4550%20MICROSIDE.png?alt=media&#x26;token=1073ea96-9c9a-40bf-ad99-3c55b3c61d9f" alt=""><figcaption></figcaption></figure>

* Selecciona ***Building***, marca la casilla ***Insert unprotected checksum in user ID memory*** y da clic en ***Apply***.

<figure><img src="https://177299348-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbyV2zAlQAiqg46a3Lr8z%2Fuploads%2FEEnYQ91dO2MU0NQ1Kc7M%2FPROJECT%20PROPERTIES%20MPLAB%20X%20IDE%20-%20PIC18F45K50%20MICROSIDE.png?alt=media&#x26;token=b7360a4e-027d-41ff-a912-72edfc3db42a" alt=""><figcaption></figcaption></figure>

* Selecciona ***XC8 Linker***, despliega el apartado ***Option categories***: y selecciona ***Memory model**.* \
  En la sección de ***ROM ranges*** escribe **2000-7f00** y da clic en ***Apply***.

<figure><img src="https://177299348-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbyV2zAlQAiqg46a3Lr8z%2Fuploads%2FLlDc2LiPzzFpFtGgxZZY%2FPROJECT%20PROPERTIES%20MPLAB%20X%20IDE%20-%20%20XC8%20LINKER%20PIC18F45K50%20MICROSIDE.png?alt=media&#x26;token=6118558c-4826-4142-a064-8d103dfad597" alt=""><figcaption></figcaption></figure>

* Despliega nuevamente el apartado ***Option categories:*** y selecciona ***Additional options***. En la sección de ***Codeoffset*** escribe **2000**, da clic en ***Apply*** y por último da clic en ***OK***.

<figure><img src="https://177299348-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbyV2zAlQAiqg46a3Lr8z%2Fuploads%2FBBaB5FSH2wKhN03CPOZy%2FPROJECT%20PROPERTIES%20MPLAB%20X%20IDE%20-%20%20XC8%20LINKER%20ADDITIONAL%20OPTIONS%20PIC18F45K50%20MICROSIDE.png?alt=media&#x26;token=0b87aaa0-9361-42f1-8bf0-ed43cfc52447" alt=""><figcaption></figcaption></figure>

7. Una vez realizadas las configuraciones del bootloader compila el proyecto.

{% hint style="success" %}
Para compilar el proyecto dirígete a la barra de herramientas superior y da clic en el icono señalado.
{% endhint %}

<figure><img src="https://177299348-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbyV2zAlQAiqg46a3Lr8z%2Fuploads%2FaeLeCBrggmC8icPqUlU8%2FMPLAB%20X%20IDE%20COMPILACION%20MICROSIDE.png?alt=media&#x26;token=c473944c-57f1-436f-96c7-b5a9533ef719" alt=""><figcaption></figcaption></figure>

8. Abre el **Software X-TRAINER Suite v1.0** en el apartado **PIC18F4550/45K50**, selecciona el archivo .hex generado al compilar el proyecto y programa la tarjeta.

{% hint style="success" %}
Si tienes dudas de cómo realizar los pasos anteriores puedes encontrar un manual del **Software X-TRAINER Suite v1.0**. a través del siguiente[ **link**](https://docs.microside.com/tarjetas-de-desarrollo/software-x-trainer-suite).
{% endhint %}

9. Al terminar de programar, la tarjeta **X-TRAINER** se reiniciará automáticamente y se ejecutará el programa de esta práctica.
10. En el Software Hercules, abre el apartado “Serial” para lograr la comunicación con el módulo convertidor USB a Serial UART y envía los caracteres de esta práctica. En el siguiente [**link**](https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbyV2zAlQAiqg46a3Lr8z%2Fuploads%2FCSZF1IDi1SKC4RhRNtNj%2FHercules-enviando-un-0.webp?alt=media\&token=b0a9d0af-828e-43cd-b2bf-f43fdce3d5a6) encontrarás una imagen de referencia del envío de comandos a través del software Hercules.

{% hint style="danger" %}
**Nota:** En caso de poseer un microcontrolador **PIC18F45550** con un cristal de **4 MHz** es necesario cambiar los fuses del microcontrolador. Abre el archivo “system.c” ubicado en la carpeta “Source files” ([**Imagen de referencia**](https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbyV2zAlQAiqg46a3Lr8z%2Fuploads%2F0viuKvM55q0HEMd5BcUy%2FCaptura-de-pantalla-2021-01-13-152939.webp?alt=media\&token=d474e405-ef38-41e9-a0a2-d420d5fc0a65)) y cambia la línea de código como se muestra en la siguiente [**Imagen**](https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbyV2zAlQAiqg46a3Lr8z%2Fuploads%2FMQrdqQsz6S9WWlXC05yV%2FCaptura-de-pantalla-2021-01-13-153005.webp?alt=media\&token=2d2b2287-2c0c-45a3-8ade-974da568cb0b).
{% endhint %}

## **Diagrama esquemático**

Selecciona el modelo de tu tarjeta **X-TRAINER.**

{% tabs %}
{% tab title="LITE M R2" %}

<figure><img src="https://raw.githubusercontent.com/MICROSIDE-TECHNOLOGY/7-USB-CDC-MPLAB-X-IDE-XC8-COMPILER-PIC18F4550-45K50/main/Diagrama%20de%20conexi%C3%B3n/X-TRAINER_Lite-M-r2_Practica-7_Microside_02.png" alt=""><figcaption></figcaption></figure>
{% endtab %}

{% tab title="LITE M R3" %}

<figure><img src="https://177299348-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbyV2zAlQAiqg46a3Lr8z%2Fuploads%2FvZ3DbvdzCwnyMvUngcx8%2FUSB%20CDC%20PIC18F44550%20o%20PIC18F45K50%20X-TRAINER%20LITE%20M%20MICROSIDE.webp?alt=media&#x26;token=de8592ed-bb27-42a2-829a-29ed2a695499" alt=""><figcaption></figcaption></figure>
{% endtab %}

{% tab title="LITE F" %}

<figure><img src="https://raw.githubusercontent.com/MICROSIDE-TECHNOLOGY/7-USB-CDC-MPLAB-X-IDE-XC8-COMPILER-PIC18F4550-45K50/main/Diagrama%20de%20conexi%C3%B3n/X-TRAINER_LITE-F_Practica-7_Microside_01.png" alt=""><figcaption></figcaption></figure>
{% endtab %}

{% tab title="DIP" %}

<figure><img src="https://raw.githubusercontent.com/MICROSIDE-TECHNOLOGY/7-USB-CDC-MPLAB-X-IDE-XC8-COMPILER-PIC18F4550-45K50/main/Diagrama%20de%20conexi%C3%B3n/X-TRAINER_DIP_Practica-7_Microside_01.png" alt=""><figcaption></figcaption></figure>
{% endtab %}

{% tab title="DIP R3" %}

<figure><img src="https://177299348-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbyV2zAlQAiqg46a3Lr8z%2Fuploads%2FDyTpULW3uZb4ZfNJiGWc%2Fhands-on-pic18f-p7-x-trainer-dip-r3.png?alt=media&#x26;token=54970b89-a9d4-4db3-8f9c-aa2378890746" alt=""><figcaption></figcaption></figure>

{% endtab %}

{% tab title="PRO R2" %}

<figure><img src="https://raw.githubusercontent.com/MICROSIDE-TECHNOLOGY/7-USB-CDC-MPLAB-X-IDE-XC8-COMPILER-PIC18F4550-45K50/main/Diagrama%20de%20conexi%C3%B3n/X-TRAINER_PRO-r2_Practica-7_Microside_01-1-e1635258751522.png" alt=""><figcaption></figcaption></figure>
{% endtab %}

{% tab title="PRO R3" %}

<figure><img src="https://177299348-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbyV2zAlQAiqg46a3Lr8z%2Fuploads%2FVbzZQkSke9M7hVTpAiHd%2F7%20USB%20CDC%20X%20Trainer%20Pro%2018.png?alt=media&#x26;token=634f217a-ef0f-4577-80ba-25422273b180" alt=""><figcaption></figcaption></figure>
{% endtab %}
{% endtabs %}

## **Código**

{% tabs %}
{% tab title="PIC18F4550" %}
{% embed url="<https://gist.github.com/microside-mx/f3d4a94e7c46b4fa5ca7a108c51b29b8>" %}
{% endtab %}

{% tab title="PIC18F45K50" %}
{% embed url="<https://gist.github.com/microside-mx/e7fa9c9099ae3ea9f5dd36885695e10b>" %}
{% endtab %}
{% endtabs %}

## **Descargas**

<table data-card-size="large" data-view="cards"><thead><tr><th align="center"></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td align="center"><mark style="color:green;"><strong>Software X-TRAINER Suite v1.0</strong></mark></td><td><a href="https://raw.githubusercontent.com/MICROSIDE-TECHNOLOGY/microside_download_archive/main/Tools/X-TRAINER%20Suite/X-TRAINER%20Suite%20Setup.zip">https://raw.githubusercontent.com/MICROSIDE-TECHNOLOGY/microside_download_archive/main/Tools/X-TRAINER%20Suite/X-TRAINER%20Suite%20Setup.zip</a></td></tr><tr><td align="center"><mark style="color:green;"><strong>Proyecto</strong></mark></td><td><a href="https://github.com/MICROSIDE-TECHNOLOGY/7-USB-CDC-MPLAB-X-IDE-XC8-COMPILER-PIC18F4550-45K50/archive/refs/heads/main.zip">https://github.com/MICROSIDE-TECHNOLOGY/7-USB-CDC-MPLAB-X-IDE-XC8-COMPILER-PIC18F4550-45K50/archive/refs/heads/main.zip</a></td></tr></tbody></table>
