Tutoriales

PIC + USB para principiantes - Página 2


Creando el programa del PIC18F2550 de Microchip en CCS

El programa del pic se compone de dos archivos, el .c que es el principal y usb_desc_scope.h que es un archivo cabecera generado por el software de Pedro Palitroquez, el Enumerador USB.

Para generar este archivo hay que ejecutar el software de Palitroquez e introducir los datos con los que queremos que el PIC se presente ante Windows. El VID deberá permanecer como 04D8h como habíamos mencionado anteriormente y el PID deberá coincidir con el ingresado en PicUSBAPI.cs de VC#.

Todos los demás datos puedes personalizarlos a tu gusto, incluso puedes agregar un icono personalizado para que aparezca en el administrador de dispositivos representando a tu PIC.



El archivo usb_desc_scope.h deberá guardarse en la misma carpeta en donde guardes el archivo principal .c que se cargará en el pic. El archivo mchpusb.inf deberá guardarse en la carpeta Driver Windows junto con el icono que hayas elegido. Es el que ayudará a Windows a reconocer al PIC18 como parte del hardware de la PC.

Una vez teniendo el archivo .inf y el archivo .h generados hay que compilar la aplicación para el PIC. Puedes usar el archivo PicUSB.c como ejemplo. Hay que incluir los archivos siguientes en la compilación:

#include <pic18_usb.h> //Microchip PIC18Fxx5x Hardware layer for CCS's PIC USB driver
#include "usb_desc_scope.h" //Configuración del USB por Enumerador Palitroquez
#include <usb.c> //handles usb setup tokens and get descriptor reports


Es importante poner con comillas "usb_desc_scope.h" ya que si se pone con <> incluirá el ejemplo de CCS en vez de nuestro driver personalizado.

La descripción de las funciones USB es como sigue:

usb_init(); //inicializa el USB
usb_task(); //habilita periférico usb e interrupciones
usb_wait_for_enumeration(); //espera hasta que el PicUSB sea configurado por Windows
usb_enumerated(); //Entrega un 1 si el pic ya fue detectado por Windows
usb_kbhit(1); //Vale 1 si el endpoint de recepción contiene datos del host
usb_get_packet(1, recibe, 3); //toma el paquete de tamaño 3bytes del EP1 y almacena en recibe
usb_put_packet(1, envia, 1, USB_DTS_TOGGLE); //envía el paquete de tamaño 1byte del EP1 a la PC


Una vez que hayas editado tu programa puedes compilarlo. Graba tu pic con tu programador favorito y conecta las terminales como sigue.



El diagrama está basado en el empleado por J1M en Hobbypic, pero solo muestra las conexiones básicas del PIC, tú deberás conectar los dispositivos que hayas incluido en tu programa en CCS. En el programa de ejemplo PicUSB.c se empleó un display BCD de ánodo común conectado al puerto B y un potenciómetro conectado a RA0.

Las terminales del ejemplo para el ánodo común han de conectarse de la siguiente forma:

RB0 - a
RB1 - b
RB2 - c
RB3 - d
RB4 - e
RB5 - f
RB6 - g
RB7 - punto (que indica cuando el pic ya fue detectado por Windows)

El voltaje de alimentación podrá ser entregado completamente por el puerto USB y deberás limitar el consumo del pic y su circuitería extra a 100mA. Si requieres más corriente de alimentación deberás modificar la siguiente línea en el archivo usb_desc_scope.h.

0x32, //maximum bus power required (maximum milliamperes/2) (0x32 = 100mA)