Professional Documents
Culture Documents
INTRODUCCION................................................................................................ 4
Descripcin general..................................................................................... 4
ESPECIFICACIONES USB.................................................................................. 5
Medio fsico................................................................................................... 5
Terminales..................................................................................................... 5
Tipos de transferencia................................................................................. 6
Velocidades de transmisin........................................................................6
Descriptores.................................................................................................. 7
Descriptor del dispositivo.................................................................8
Descriptor de la configuracin........................................................10
Descriptores de la interfaz..............................................................12
Descriptor de cadena.......................................................................14
Endpoints del dispositivo..........................................................................15
Normas......................................................................................................... 15
Resumen de la norma CDC120-20101103.................................17
Comunicacin device class..............................................................18
AN1164 USB clase CDC para dispositivos embebidos.................19
IMPLEMENTACION DE COMUNICACIN USB EN UN
MICROCONTROLADOR PIC18F4550.............................................................20
Requerimientos.......................................................................................... 20
Descripcin general del mdulo USB en el PIC18F4550.....................20
FUNCIONES DEL OSCILADOR PARA COMUNICACIN USB.....................24
Libreras de CCS......................................................................................... 25
Descriptores................................................................................................ 29
Programas de generacin de descriptores y archivos .inf..................31
DRIVER............................................................................................................ 33
Descripcin general................................................................................... 33
Servicio Plug & Play de Windows............................................................34
Administrador de dispositivos.................................................................34
Creacin del instalador del controlador con INSTALLSHIELD.............35
IMPLEMENTACION.......................................................................................... 42
Programa de ejemplo............................................................................................ 42
Circuito......................................................................................................... 45
Simulacin................................................................................................... 46
Prueba.......................................................................................................... 47
INTRODUCCION
Descripcin general
El USB (Universal Serial Bus) es un estndar industrial desarrollado en la dcada de las 90s que
define los cables, conectores y protocolos usados en un bus para conectar, proveer alimentacin
elctrica entre ordenadores, perifricos y dispositivos electrnicos
Medio fsico
Las seales de USB se transmiten en un cable de par trenzado con impedancia caracterstica de
90Ohms, cuyos hilos se denominan D+ Y D-. Este puerto solo admite la conexin de dispositivos de
bajo consumo, es decir, que tengan un consumo mximo de 500 m A.
El calibre tpico de este tipo de cables es el 26AWG, adems en la norma USB 2.0 se especifica una
longitud mxima de 5m y para la norma USB 3.0 una longitud mxima de 3m.
Terminales
Existen 4 tipos de transferencia de informacin definidos en las especificaciones tcnicas del USB
Velocidades de transmisin
USB (1.0): Tasa de transferencia de hasta 1.5 Mbit/s, es el ms empleado en dispositivos de interfaz
humana (HID). Pero es en esta seccin
USB (1.1): Tasa de transferencia de hasta 12 Mbit/s, esta fue la ms rpida hasta la implementacin
del protocolo 2.0
USB (2.0): Tasa de transferencia de 480 Mbit/s, casi todos los dispositivos fabricados en la
actualizad trabajan bajo este protocolo.
USB (3.0): Tasa de transferencia de 4.8Gbit/s, la velocidad del bus es ms rpida debido a que se
han incluido contactos adicionales
Descriptores
Los descriptores de alto nivel informan al anfitrin de cualquier descriptor adicional de bajo nivel, a
excepcin de los dispositivos compuestos, cada dispositivo tiene un solo descriptor que contiene la
informacin del dispositivo como un todo y especifica el nmero de configuraciones que soporta el
dispositivo.
Cada dispositivo tambin contiene uno o ms descriptores de configuracin que contienen
informacin acerca del consumo de energa del dispositivo y el nmero de interfaces soportadas por
la configuracin. Cada descriptor de la interface especifica cero o ms descriptores de endpoints
que contienen la informacin necesaria para comunicarse con un endpoint.
Cada descriptor de endpoint tiene informacin acerca de cmo el endpoint transfiere los datos, una
interfaz sin descriptores de endpoint debe emplear el punto final de control para las comunicaciones.
Un descriptor de cadena puede almacenar texto como el nombre del vendedor o el nombre del
dispositivo, otros descriptores pueden contener valores de ndice que apuntes a esos descriptores
de cadena y el anfitrin puede leer estos con una solicitud Get_Descriptor.
En el valor del descriptor bDescriptorType, el bit7 siempre es cero. El bit 6 y 5 identifican el tipo de
descriptor: 00h=estndar, 01h=class, 02h=fabricante, 03h=reservado, y los bits 4:0 identifican el
descriptor.
Cada descriptor consta de una serie ce campos. La mayora de los nombres de campo usan prefijos
que indican el formato o el contenido en ese campo: b=byte (8 bits), w=Word (16 bits), bm=bit map,
bcd= binary-coded decimal, i=index, id=identificador.
El descriptor del dispositivo contiene informacin bsica acerca del dispositivo, este descriptor es el
primero ledo por el anfitrin al conectar el dispositivo e incluye la informacin que el anfitrin
necesita para solicitar informacin adicional del dispositivo. El anfitrin solicita el descriptor del
dispositivo mandando la instruccin Get_Descriptor con el bit MSB del campo wValue en 1.
El descriptor contiene 14 campos. La siguiente tabla muestra los campos en el orden en que estos
se presentan.
Descriptor de la configuracin
Despus de recibir la informacin del descriptor del dispositivo, el anfitrin puede solicitar la
configuracin del dispositivo, de la interface y del endpoint.
Cada dispositivo tiene al menos una configuracin que especifica las caractersticas y
funcionalidades del dispositivo. Por lo general una sola configuracin es suficiente, pero un
dispositivo con mltiples modos de funcionamiento puede soportar diversos modos de configuracin.
Solo una configuracin est activa. Cada configuracin requiere su propio descriptor. El descriptor de
la configuracin contiene informacin acerca del uso de energa y de los nmeros de interfaces
soportadas por el dispositivo.
El anfitrin selecciona una configuracin con la instruccin Set_Configuration y lee la configuracin
actual con la instruccin Get_Configuration
El descriptor contiene 8 campos, la siguiente tabla muestra los campos en el orden en que ocurren
en el descriptor, los campos contienen informacin acerca del descriptor en s, la configuracin y los
requerimientos energticos del dispositivo para esa configuracin en particular.
Descriptor de cadena
Un descriptor de cadena contiene texto descriptivo. La especificacin USB 2.0 define los
descriptores que pueden contener ndices a varias cadenas, incluyendo cadenas que describen el
fabricante, el producto, nmero de serie, configuracin e interfaces.
El soporte para descriptores de cadenas es opcional, sin embargo algunas clases requieren de ellos.
Cuando el anfitrin solicita el descriptor de la cadena, el LSB del campo wValue, es un valor de
ndice. Un valor ndice de 0 tiene la funcin especial de solicitar el idioma de las identificaciones.
NOTA: El cdigo de lenguaje para el espaol (Mxico) es 080Ah, el cdigo para el espaol es
000Ah y para el espaol en Mxico es 0008h
Todo el trfico del bus viaja hacia o desde el endpoint del dispositivo. El
endpoint es un buffer el cual almacena mltiples bytes. Tpicamente un
endpoint es un bloque de memoria o un registro en el chip del controlador. Los
datos almacenados en el endpoint pueden ser datos recibidos o datos
esperando a ser enviados. El anfitrin tambin tiene buffers que retienen datos
recibidos o datos esperando a transmitirse, pero el anfitrin no cuenta con este
buffer especial llamado endpoint, en su lugar el anfitrin sirve de inicio y
trmino para las comunicaciones con el endpoint del dispositivo.
La especificacin USB define el endpoint del dispositivo como una porcin del
dispositivo USB nicamente direccionable que es la fuente o destino de
informacin en un flujo de comunicacin entre el anfitrin y el dispositivo.
Una direccin de endpoint consiste de un nmero de endpoint y de un sentido,
el nmero es un valor entre 0 y 15, el sentido es definido desde la perspectiva
del anfitrin, un endpoint IN provee datos para ser enviados al anfitrin y un
endpoint OUT almacena los datos recibidos por el host.
Un endpoint configurado para transferencias de control debe transmitir datos
en ambos sentidos, as que un endpoint de control consiste en un pr de
direcciones de endopints IN y OUT los cuales comparten un nmero endpoint.
Cada dispositivo debe tener el Endpoint 0 configurado como un endpoint de
control, es realmente raro la necesidad de endpoints de control adicionales, sin
embargo algunos chips los soportan.
Normas
El USB-IF (USB implementers forum), es la asociacin encargada de generar las normativas que
rigen el empleo del estndar USB.
En la pgina http://www.usb.org/developers/docs/usb20_docs/ podremos encontrar todo lo
relacionado con las diferentes normativas que definen las caractersticas fsicas y tcnicas de los
protocolos USB.
Los dispositivos USB se dividen por clases de acuerdo a sus funcionalidades, estas a su vez se
divides en subclases, las clases reconocidas por la organizacin son las siguientes:
Audio class
Audio/Video device class
Battery charger
Cable conector
Common class
Comunication device class
Content security
Device firmware upgrade group
HID class
Imaging class
IrDA
Mass storage
Media transfer protocol
Monitor
Open USBDI
Personal healthcare
Physical interface devices
Power
Printer class
Smart card class
Test & measurement class
Video class
3.-FUNCTIONAL OVERVIEW
Esta seccin describe las caractersticas funcionales de los CDC, los cuales incluyen la
organizacin y operacin del dispositivo
El dispositivo debe usar una interfaz Communication Class para llevar acabo la administracin del
dispositvo.
Los dispositivos de comunicacin presentan los datos al anfitrin (host) en una forma definida por
otra clase, como Audio, Datos, HID.
La Data class interface define una interfaz de datos como una interface con un tipo de clase de
datos, esto quiere decir que la transmisin de datos de un dispositivo de comunicacin no est
restringido por las interfaces empleando clases de datos predefinidas, en resumen la interfaz de
datos es usada para transmitir, recibir datos, los cuales no se encuentran definidos en ninguna otra
clase, un ejemplo de esto es:
En este punto es responsabilidad del software anfitrin as como del dispositivo comunicarse
el uno al otro sobre alguna interfaz (CDC) para determinar el formato apropiado a usar.
En resumen
AN1164 USB clase CDC para dispositivos embebidos
En esta nota de aplicacin de Microchip nos da una introduccin de las funcionalidades del mdulo
USB, en nuestro caso especfico para implementar una comunicacin del tipo UART a travs de
USB.
La clase CDC indica como es la interfaz de comunicacin USB, se desarroll para dispositivos como
mdems e interfaces de red, sin embargo unas de las funcionalidades de este modo de operacin
pueden emplearse para emular un puerto serie, lo cual puede proveer una terminal UART virtual.
Requerimientos
El PIC18FX550 contiene un USB Serial Interface Engine (SIE) compatibles con alta y baja
velocidad el cual permite una rpida comunicacin entre el USB anfitrin y el microcontrolador.
La SIE puede ser conectada directamente al USB, utilizando un transceptor interno, aunque tambin
es posible emplear un transceptor externo.
Algunas caractersticas especiales de hardware han sido implementadas para mejorar el
rendimiento. Una memoria de doble puerto ha sido implementada (USB RAM) para compartir acceso
directo el ncleo del microcontrolador y la SIE. Un puerto paralelo de streaming se ha provisto para
soportar la transferencia ininterrumpida de largos volmenes de informacin, como datos
asncronos.
Diagrama de la organizacin interna del mdulo USB
L a operacin del USB es configurada a travs de 3 registros, adems un total de 22 registros estn
involucrados para el manejo de la informacin USB, los ms importantes son:
17.10.5 ENUMERATION
El VID (Vendor ID) y el PIC (Product ID) son dos nmeros de 16 bits representados en Hexadecimal,
si se va a emplear la clase CDC (Communications Device Class) de CCS para la comunicacin USB
estos valores los podemos modificar en el archivo "usb_desc_cdc.h" y segn el sistema operativo
instalado en el Host deberemos modificarlos tambin en el archivo .inf .
Realmente el modificar estos valores solo es til si se quiere distribuir el producto comercialmente,
en ese caso existe una organizacin llamada USB Implementers Forum que se encarga de
proporcionarnos previo pago correspondiente (creo que unos 1500 $) un VID valido para que nuestro
dispositivo conviva sin problemas con el resto de dispositivos USB del mercado, adems tendremos
derecho a poner el logo USB en nuestro producto certificando de esta manera que ha pasado los
controles pertinentes y cumple con el estndar USB.
Si esto no estuviera regulado tal y como est y cada dispositivo tuviera el VID y PID que quisiera,
cuando coincidieran en un mismo sistema dos nmeros iguales se presentara un conflicto hardware
y ambos dispositivos dejaran de funcionar.
17.10.6 DESCRIPTORS
Este descriptor provee de informacin de informacin general, como el fabricante, el nmero del
producto, el nmero de serie, la clase del dispositivo as como el nmero de configuraciones, solo
existe un descriptor de este tipo.
Este descriptor provee de informacin como los requisitos energticos del dispositivo, y cuantas
distintas interfaces son soportadas en esta configuracin, puede haber ms de una configuracin
para el dispositivo.
Cada dispositivo USB debe indicar la presencia de su bus y la velocidad al anfitrin, esto se logra a
travs de una resistencia de 1.5Kohms, el cual es conectado al bus al momento de conectar
fsicamente el dispositivo USB.
Dependiendo de la velocidad del dispositivo, el resistor pone en estado de PULL-UP la lnea D+ D-
a 3.3V, para el modo de baja velocidad la resistencia se conecta en D-, mientras que en el modo de
alta velocidad se conecta del lado de D+.
Las especificaciones del USB incluyen especificaciones de clases los cuales son respaldados
opcionalmente por los fabricantes de los sistemas operativos. Ejemplos de clases soportadas son
Audio, Mass storage, Comunications and Human Interface (HID)
En la mayora de los casos, un driver es requerido en el anfitrin para poder comunicarse con el
dispositivo USB, en aplicaciones especiales, un driver tendra que ser desarrollado en conjunto.
Afortunadamente existen gran cantidad de drivers disponibles para las clases de dispositivos ms
comunes.
Libreras de CCS
El compilador CCS cuenta con libreras creadas para la configuracin y el manejo del mdulo USB
del microcontrolador, para la correcta programacin de la comunicacin USB es necesario mandar a
llamar varias libreras dentro de CCS. En el siguiente diagrama se muestra la interrelacin que
existen ntrelas distintas libreras.
Diagrama que muestra las relaciones entre las distintas libreras para manejo del puerto USB en
CCS
usb_cdc.h
Librera para crear un puerto COM virtual en la PC sobre USB, empleando la especificacin CDC, al
emplear este archivo en el cdigo, se agregaran las interrupciones y descriptores requeridos.
Esta librera crea un link virtual RS-232 entre la PC y el PIC, por lo que en esta librera
encontraremos funciones similares a aquellas empleadas para el manejo de datos de entrada y
salida del tipo UART.
Las siguientes funciones tambin son provista, y son puertos de las funciones de entrada y salida en
input.c
USB_CDC_ISR() puede ser definido si se desea una rutina especfica para se llamada cuando hay
datos entrantes del puerto COM virtual. Esto es til si se quiere actualizar de cdigo antiguo RS232,
en donde se empleaba #int_rda para manejarlos datos entrantes en el RS232 ISR.
Normalmente usb_cdc_putc() y usb_cdc_putc_fast trataran de descargar los datos tan pronto sea
posible, sin embargo esto en ocasiones puede llegar a ser bastante ineficiente y podra descargar
paquetes con 1 byte.
USB_CDC_DATA_IN_SIZE controla el tamao del buffer de salida, el tamao total del buffer de
salida ser ((USB_CDC_DATA_IN_SIZE*2)-1).Los dispositivos de alta velocidad (full-speed)
limitaran este valor a 64.
Para incrementar el tamao del buffer local del PIC tambin se puede definir
USB_CDC_DATA_LOCAL_SIZE, si este se define entonces el tamao total del buffer de salida ser
USB_CDC_DATA_LOCAL_SIZE+USB_CDC_DATA_IN_SIZE.
El manejo del puerto USB es complejo, comnmente requiere el envio de muchos paquetes para
completar la transferencia de un bloque de datos, la mayor parte de este proceso se realiza en la
USB ISR, es por eso que no puedes llamar usb_cdc_putc() dentro de otra ISR, USB ISR o cuando
las ISRs estas inhabilitadas.
Dentro de esta librera es posible cambiar las caractersticas de la comunicacin serie, al llamar la
rutina de inicializacin esta asigna los valores preestablecidos, es posible cambiarlos en la librera
para as tener ms control de cmo queremos que sea la comunicacin serie.
Captura de pantalla de la seccin del archive usb_cdc.h donde podemos configurar valores de la
comunicacin serie como lo son la velocidad del puerto en bps, paridad y bits de datos
Descriptores
usb_desc_cdc.h
La librera usb_cdc.h hace un llamado a usb_desc_cdc.h que es la librera encargada de asignar los
descriptores del dispositivo.
En esta seccin es posible configurar los descriptores de dispositivo, de configuracin, de cadena,
de interfaz, con el fin de lograr desarrollar un producto acorde a las necesidades del desarrollador.
Cuando un dispositivo USB es conectado se identifica a si mismo al anfitrin a travs de la
combinacin del PID y el VID, el VID es un numero de 16bits del vendedor, el PID es un numero de
16 bits del nmero de producto, la PC emplea esta combinacin para encontrar los drivers a
emplear.
Esta librera no cuenta con instrucciones, solo es para definir los descriptores, para este caso
emplearemos como VID el 0X04D8 que es el nmero que define al dispositivo como un producto de
Microchip, como PID emplearemos el 0x0007, este queda a consideracin del desarrollador, sin
embargo conviene investigar un poco si la combinacin PID/VID a emplear no causara conflictos con
dispositivos registrados.
Captura de pantalla de la seccin del archivo usb_cdc_desc.h donde podemos modificar los
valores PID y VID.
En la siguiente parte podemos definir la informacin que es desplegada por el wizard de WINDOWS
agregar hardware
Captura de pantalla de la seccion del archive usb_cdc_desc.h donde podemos modificar los
valores de las cadenas de texto.
Al modificar las cadenas de texto debemos de tener en cuenta establecer el tamao de las mismas,
asi como el offset de todas las cadenas respecto al inicio
1. El offset indica el inicio de cada cadena, es decir, tendr tantos elementos como cadenas
tenga el descriptor, para este caso 3, o indica el inicio de la primera cadena, que es la que
define el idioma, como esta tiene una dimensin de 4bytes el siguiente offset es de 4 y
como la segunda cadena tiene una dimensin de 8bytes el tercer offset es la suma de las 2
dimensiones (12).
2. Por default el descriptor viene con el descriptor para el idioma ingles 0x0409, sin embargo si
quieren usarse smbolos especiales de algn otro idioma, debe indicarse en esta parte el
idioma a emplear.
Aunque se puede optar por modificar el archivo de los descriptores usb_cdc.h manualmente con la
ayuda de algn editor de texto, tambin se tiene la opcin de emplear programas especializados
para tal fin.
Uno de ellos es el denominado INF Enumeracin Datos uC PIC-USB el cual podemos encontrarlo
gratuitamente en la red, este programa est diseado para generar los archivos de los descriptores y
el archivo inf.
Captura de pantalla del programa
El programa nos permite definir: nombre de la categora, VID, PID, la Ubicacin, Descripcin
Fabricante, Versin y Fecha, por default esta seleccionada la opcin de PICC CCS como lenguaje
de programacin, adems nos permite seleccionar el tipo de transferencia que emplearemos para la
comunicacin USB, nos da la opcin de emplear un archivo multipropsito o uno especializado para
RS-232 sobre la clase CDC.
Al guardar debemos de seleccionar previamente la opcin de guardar ambos, la cual nos permitir
guardar el archivo del descriptor para emplearlo en la compilacin en CCS y el archivo mchpcdc.inf
para indicarle al sistema operativo que Controlador debe instalar con el dispositivo.
DRIVER
Descripcin general
mchpusb.ini este archivo contiene la informacin del driver y es requerido por el sistema
operativo para la primera conexin, para que el S.O. determine que driver asignarle al
dispositivo, adems el S.O. obtiene informacin de aqu para configurar correctamente el
dispositivo, este es un archivo de texto que se puede editar, en si debemos de hacer que los
valores del VID y el PID coincidan con el de nuestro dispositivo, adems es posible editar
algunas cadenas de texto que se mostraran como informacin del dispositivo una vez
instalado el driver
DLL mpusbapi una DLL es una capa de software, que en este caso facilita por medio de
funciones la comunicacin entre la aplicacin de escritorio y el driver del dispositivo.
usbser.sys es el driver genrico de Windows para brindar servicios tipo modem via USB,
las seales de los mdems DSL y seales RS-232 son parecidas, asi que tambin sirve para
crear un puerto COM virtual.
Servicio Plug & Play de Windows
En computacin un servicio de Plug and Play es una especificacin que facilita la integracin de
nuevo hardware en la PC anfitrin, sin la necesidad de configurar el dispositivo o la intervencin del
usuario para resolver conflictos.
La instalacin de un nuevo dispositivo en Windows implica tres pasos:
1. Conectar el dispositivo al equipo
2. Cargar los controladores del dispositivo correspondientes
3. Configurar las propiedades y los valores del dispositivo
Una vez que se conecta un nuevo dispositivo el servicio Plug and Play de Windows solicita
informacin a este, generalmente son los descriptores (PID, VID) los cuales le indicaran al sistema
operativo de que dispositivo se trata en cuestin.
Administrador de dispositivos
Una opcin es incluir algn medio con el dispositivo el cual cuente con un programa de instalacin,
el cual se encargue en automtico de garantizar la correcta instalacin del controlador del
dispositivo.
Dado que en el dispositivo a desarrollarse se emplearan descriptores propios, los servicios de
Windows no sern capaces de instalarlo por cuenta propia, por lo que se hace necesario agregar el
archivo .inf que define el controlador a utilizar en el dispositivo a instalar.
Windows busca en varias carpetas en el equipo el archivo .inf necesario para la correcta instalacin
y configuracin del hardware nuevo, una de esas carpetas se encuentra en [DISCO
LOCAL]\Windows\INF.
Si de antemano colocamos nuestro archivo .inf en esta carpeta, Windows ser capaz de instalar el
dispositivo por su cuenta al conectar el dispositivo a la computadora anfitrin por primera vez.
Para automatizar este paso podemos hacer uso de software especializado en creacin de
instaladores, para este caso emplearemos la versin de prueba de INSTALLSHIELD 2014.
Captura de pantalla de INSTALLSHIELD 2014
Para comenzar daremos clic en File-New Project, lo cual nos desplegara la siguiente ventana
2. En el campo INSTALLDIR damos clic y nos va a abrir mltiples carpetas del sistema donde
podemos colocar nuestros archivos, seleccionaremos la carpeta [WindowsFolder] y damos
clic nuevamente, ahora despus escribimos el nombre de la carpeta destino, en este caso
es la carpeta inf.
Posteriormente nos vamos a la ventana Files la cual est en el punto 2 Specify Application data
En esta seccin incluiremos los archivos que se van a instalar en la computadora anfitrin, es decir
el archivo inf que indicara a la computadora el driver que debe instalarse al conectar nuestro
dispositivo, posteriormente damos clic en el icono de la barra e hasta abajo que dice Installation
overview [1]
En esta pantalla tenemos la opcin de brindar ciertos requisitos o permisos al momento de ejecutar
el instalador, dado que nuestra instalacin solo colocara un archivo en una carpeta definida podemos
definir todas las opciones como no [2].
En esta pantalla dar clic en la opcin single executable [2] , el cual creara un solo archivo .exe
para la distribucin de la instalacin, por ultimo basta dar clic en Build installations [3] para que se
cree el archivo ejecutable en la carpeta que seleccionamos para guardar el proyecto.
El archivo ejecutable se encuentra en la ruta:
\NOMBREDELPROYECTO\Express\SingleImage\DiskImages\DISK1
Una vez creado el ejecutable este se puede distribuir de la manera que lo decida el desarrollador, no
necesita ningn software adicional, sin embargo debido a que realiza cambios en la carpeta de
Windows en algn momento de la instalacin solicitara privilegios de administrador.
Programa de ejemplo
Para comenzar a trabajar con la implementacin del programa para comunicacin serie, primero
debemos de comenzar identificando los parmetros que deber llevar el archivo descriptor, entre los
que destacan:
Id de fabricante
Id de modelo
Corriente requerida al puerto USB
Versin
Tipo de transferencia
CODIGO FUENTE
#include <18F4550.h>
#fuses
HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
//El fuse HSPLL se emplea para activar la funcin del PLL en conjunto con un
crisal
//El fuse USBDIV le indica al microcontrolador que la frecuencia proveniente
del PLL ser la //utilizada para las funciones USB
//PLL5 indica la divisin del preescaler, esta es para el empleo de un cristal de
20MHz
//CPUDIV1 indica la divisin del postcaler, indica que el microcontrolador
trabajara con la frecuencia de salida del postcaler/2
#use delay (clock=48000000)
//La frecuencia empleada para el delay es de 48MHz debido al empleo del PLL y
posterior division //sobre 2
#define LCD_ENABLE_PIN PIN_C2
#define LCD_RS_PIN PIN_A4
#define LCD_RW_PIN PIN_A5
#define LCD_DATA4 PIN_A0
#define LCD_DATA5 PIN_A1
#define LCD_DATA6 PIN_A2
#define LCD_DATA7 PIN_A3
#include <KBD.C>
#include <LCD.C>
#include <usb_desc_cdc.h>
//En esta seccin se incluyen las libreras, entre ellas el archive de descriptores
de nuestro //dispositivo, el cual a su vez llama a las otras libreras USB
//VARIABLES GLOBALES
char a,b;
//INICIO DE PROGRAMA
void main()
{
//INICIALIZACION DE LOS PUERTOS
setup_timer_3(T3_DISABLED | T3_DIV_BY_1);
setup_adc(ADC_OFF );
setup_adc_ports(NO_ANALOGS|VREF_VREF);
setup_ccp1 (CCP_OFF);
setup_ccp2 (CCP_OFF);
port_b_pullups(TRUE);
//COMPROBACION DE FUNCIONAMIENTO DEL PIC
lcd_init();
delay_ms(100);
printf(lcd_putc, " Interfaz USB");
lcd_gotoxy(1,2);
lcd_cursor_on(1);
delay_ms(150);
//INICIALIZACION DE LIBRERIAS
usb_cdc_init();
//Inicializacion de la librera USB en modo CDC
usb_init();
//Inicializacion de las funciones USB
kbd_init();
//COMPROBACION DE CONEXION USB
if(usb_attached()==1)
{
while (TRUE)
{
a=kbd_getc();
if (a!= '\0')
{
printf(usb_cdc_putc, "%c", a );
output_high(PIN_C6);
delay_ms(10);
output_low(PIN_C6);
}
if (usb_cdc_kbhit()==1)
{
b=usb_cdc_getc();
if (b=='\b')
{
printf(lcd_putc, "%c", b );
printf(lcd_putc, " ");
}
printf(lcd_putc, "%c", b );
}
delay_ms(1);
}
}
}
Circuito
Una vez establecida la conexin podemos comenzar a enviar y recibir datos por
nuestra terminal.