Anda di halaman 1dari 5

Vamos a mostrar el procedimiento para conectar un PIC de gama alta, el 18F4550, al PC por el

puerto USB. Se va a tratar de una clase de dispositivo USB CDC (Communication Device Class)
emulando un dispositivo RS232 mostrado como un puerto COM en windows. El ejemplo consiste
en una comunicación básica que muestra en el PC el valor de tensión leído del conversor A/D.
Dicha lectura la activaremos o desactivaremos desde el PC pulsando la barra espaciadora.

En el PIC 18F4550 la configuración de fuses va a tener su importancia puesto que de ellos va a


depender, entre otros, las frecuencias de reloj que van a ser utilizadas.

#fuses HSPLL //Uso de un crystal oscilador >4 MHz usando el PLL

#fuses NOWDT //No habilitación de reset por watchdog

#fuses NOLVP //Inhabilitación de programación a bajo voltaje

#fuses USBDIV //Clock del módulo USB se tomará del PLL/2 (48MHz)

#fuses PLL5 //La frecuencia se dividirá por 5 en el PLL

#fuses CPUDIV1 //El clock para el procesador serán los 96 MHz del

PLL divididos para 2 (48MHz)

#fuses VREGEN //Habilita regulador 3,3 voltios para el módulo USB

Vamos a ver el porqué de esta configuración, sobre todo en lo que respecta a la frecuencia de
reloj. El objetivo es obtener 48 MHz en el módulo del USB por mediación del PLL. Esta frecuencia
no tiene porqué coincidir con la del cristal empleado. Fijándonos en el diagrama de bloques
interno representado del PIC18F4550 (se puede encontrar también en el datasheet del
PIC18F4550de Microchip) deberemos conseguir obligatoriamente 4 MHz a la salida del MUX
controlado por PLLDIV. Como empleamos un cristal de 20MHZ deberemos dividir por 5 esta
frecuencia para obtener los 4 MHz. Esto lo conseguimos mediante el fuse PLL5.
Siguiendo el diagrama vemos que los 4 MHz obtenidos se transforman en 96MHz que a
continuación son divididos por 2 por lo que se quedan en 48 MHz.

Con la configuración del fuse USBDIV1 estamos indicando que estos 48MHz obtenidos del PLL
son los que vamos a utilizar para el módulo USB. Aclarar que podríamos emplear directamente la
frecuencia de un cristal de 48MHz con NOUSBDIV.

Configurado el clock del módulo USB, debemos ahora hacerlo con el clock del resto de módulos
del procesador. Igual que para el USB obtenemos el clock del módulo PLL. Si nos fijamos en el
diagrama partimos de los 96 MHz conseguidos con los 4 MHz procedentes del PLL. Esta frecuencia
la vamos a dividir por un valor configurado por CPUDIV. Podemos trabajar a frecuencias diferentes
a la del módulo USB pero en este caso vamos a emplear la misma. Para ello, para obtener 48MHz
debemos dividir por 2 por lo que configuraremos CPUDIV1.

Si somos observadores vemos en el diagrama otro CPUDIV. ¿Por qué la frecuencia de reloj para el
procesador no nos viene por ahí? La respuesta es que al configurar el fuse HSPLL estamos
indicando que hacemos uso de un cristal con frecuencia superior a 4 MHz (HS) y además que lo
hacemos por mediación del PLL (HSPLL), por lo que ese CPUDIV queda deshabilitado.

Con respecto a los drivers que vamos a emplear van a ser, por un lado, lógicamente, el
correspondiente al PIC 18F4550 y el correspondiente a la librería de uso de una clase de
dispositivo CDC USB.

#include <18F4550.h> //PIC a emplear

#include <usb_cdc.h> // Librería de control USB

Las funciones utilizadas para control USB:

usb_cdc_init(); //Inicialización del modo CDC

usb_init(); //Inicialización del control del USB

usb_task(); //Detección de la conexión de dispositivo USB

usb_enumerated(); //Devuelve TRUE si dispositivo ha sido

enumerado por el PC
usb_cdc_kbhit(); //Devuelve TRUE si hay recepción de datos
usb_cdc_putc(); //Envío de caracteres al buffer de trasmisión
usb_cdc_getc(); //Lectura del buffer de recepción

Ya tenemos el programa para el PIC. Pero ahora necesitamos que el PC reconozca el dispositivo
USB al conectarlo. Para ello deberemos modificar en el archivo "usb_desc_cdc.h", que se
encuentra en la carpeta "drivers" en el directorio de instalación del PIC C COMPILER, estas dos
lineas:

0x61,0x04, //vendor id(0x04D8 is Microchip,or is it 0x0461


??)==8,9

0x33,0x00, //product id ==10,11

Se deben sustituir respectivamente por estas dos:


0xD8,0x04, //vendor id(0x04D8 is Microchip, or is it
0x0461??)==8,9
0x0A,0x00, //product id ==10,11

Indican el identificador de fabricante (Microchip) y al identificador de producto (familia PIC18), y


permiten la localización del driver de windows cuando se conecta el dispositivo USB.

[+/-] Ver / Ocultar programa completo

Si queremos simularlo todo en Proteus nos queda una cosa más. Debemos cargar el driver para la
simulación virtual. Para ello, con proteus instalado accedemos a <Menu Inicio><Todos los
programas><Proteus 7 Profesional><Virtual USB><Install USB drivers>

Ya podemos probarlo todo. Cuando conectemos el dispositivo USB, bien sea real o virtualmente en
proteus, buscará el driver de windows y sino lo encuentra pedirá instalarlo. Se deberá indicar la
ubicación del archivo "mchpcdc.inf" bien sea por el asistente de "Nuevo hardware encontrado" o
bien manualmente con click derecho en el administrador de dispositivos de windows sobre el
dispositivo CCS RS232 DEMO que aparecerá con un signo de interrogación o admiración amarillo, y
posteriormente marcando "actualizar controlador" e indicando la ubicación del driver. Este
archivo se puede descargar junto con el proyecto completo en el siguiente enlace de descarga.
También se incluyen el archivo "usb_desc_cdc.h" ya modificado así como el resto de librerías C que
intervienen:

Con el driver ya instalado y el dispositivo USB reconocido, abrimos el hyperterminal y


seleccionaremos el puerto COM que corresponda al dispositivo.

Anda mungkin juga menyukai