Вы находитесь на странице: 1из 6

PROYECTO 2

PICtool v2.0
30/09/2013

Hola, con los sistemas operativos de Windows Vista y 7; el driver de Microchip ya no es


compatible, nos deja fuera de la máxima velocidad (12Mbs), resultando como únicos modos HID
y CDC.

Pero gracias al driver genérico WinUSB de Windows, retomaremos la comunicación USB 2.0 con
la serie favorita de microntroladores PIC18Fxx5x, que traen el hardware para dicha
comunicación, en modo "Custom Driver" devolviéndonos los 12Mbs, compatible con los nuevos
sistemas en sus versiones de 32 y 64bits.

El desarrollo es sencillo, utilizaremos el PIC18F2550 con un cristal de 20MHz, al igual que el


proyecto anterior, constara de 4 salidas lógicas del puerto B, que activaremos y desactivaremos
a voluntad desde la interfaz.

Idea central:
PC <--> WinUSB(Vista, Win7) <--> PIC18F2550

La organización USB de los nuevos sistemas de Windows ya no exige que Hardware, Driver e
Interfaz contengan el mismo código VID y PID, hoy la identificación es por "Rutas".
Sólo Hardware y Driver deben contener el mismo VID y PID, mientras que Driver e Interfaz la
misma Ruta.
Esto supone que pueden conectarse varios dispositivos con el mismo VID y PID al mismo PC, al
instalarse de identifica a cada uno por su Ruta.

El desarrollo consta de 4 pasos, que describiremos brevemente, la mayoría de las características


ya estas explicadas(Proyecto 1):
1-Diagrama (EAGLE 6.4.0)
2-Firmware PIC18F2550 (CCS v4.140)
3-Driver WinUSB (Sin editar)
4-Interfaz Gráfica (VC# 2008 Express)

Paso 1
A continuación el diagrama electrónico(Figura 1).
Materiales:
4-Resistores 330 ohms
1-Resistor 10K
1-Capacitor 100nF
1-Capacitor 470nF
2-Capacitores 22pF
1-Cristal 20MHz
1-Push button
4-LEDs std
1-Conector USB-B/H

Figura 1
LEDs conectados al PUERTO B(Figura 2):
PORTB.5 = LED1
PORTB.4 = LED2
PORTB.3 = LED3
PORTB.2 = LED4

Figura 2

Paso 2
El Firmware del PIC18F2550 esta editado en CCS(Lenguaje C), el programa principal es
relativamente sencillo, la verdadera magia está en la librería que es llamada para el uso de la
comunicación USB: "pic18_WinUSB.h", la cual contiene los códigos VID y PID, que deberán ser
iguales al Driver, específicamente al archivo "*.inf", se recomienda no modificar esta librería.
En caso de querer modificar el programa para una aplicación más completa, con tan sólo el
programa principal bastara, por ejemplo: de requerir una mayor capacidad del buffer para recibir
bytes.. Tan sólo hay que aumentar el tamaño del mismo(Figura 3).

Figura 3
CÓDIGO:
El programa conmuta(1 ó 0) 4 pines del puerto B, según lo que reciba de la comunicación USB.

#include <18F2550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
#use delay(clock=48000000)
#use FAST_IO (B)

#define USB_HID_DEVICE FALSE


#define USB_EP1_TX_ENABLE USB_ENABLE_BULK
#define USB_EP1_RX_ENABLE USB_ENABLE_BULK
#define USB_EP1_TX_SIZE 2
#define USB_EP1_RX_SIZE 2

#include <pic18_usb.h>
#include "pic18_WinUSB.h"
#include <usb.c>

#define led1 PIN_B5


#define led2 PIN_B4
#define led3 PIN_B3
#define led4 PIN_B2
#define pin_on output_high
#define pin_off output_low

void main(void) {

int8 iBuff[2];
set_tris_b(0x00);
delay_cycles(5);

pin_off(led1);
pin_off(led2);
pin_off(led3);
pin_off(led4);

usb_init();

usb_task();
usb_wait_for_enumeration();

while (TRUE)
{
if(usb_enumerated())
{
if (usb_kbhit(1))
{
usb_get_packet(1, iBuff, 2);

if (iBuff[0] == 0)
{
if (iBuff[1] == 1) output_toggle(led1);
if (iBuff[1] == 2) output_toggle(led2);
if (iBuff[1] == 3) output_toggle(led3);
if (iBuff[1] == 4) output_toggle(led4);
}
}
}
}
}
Aquí la parte importante de la librería "pic18_WinUSB.h", que contiene el VID y PID, y que
deberá coincidir con la descripción(INF) del Driver (Figura 4).

Figura 4

Paso 3
El driver genérico "WinUSB" es proporcionado por Microsoft, al conectar por 1ra vez el
Hardware; es necesario direccionar manualmente dicho driver, al hacerlo aparece por defecto un
mensaje indicando que puede ser peligroso instalarlo, le damos clic en aceptar y finalizamos la
instalación.

Con el Driver es importante resaltar 2 puntos:


1ro-El VID y PID del Driver son los mismos que contiene el Firmware del PIC18F2550(Figura 5).

Figura 5
2do-La "RUTA" del driver es la misma que contiene la Interfaz Gráfica(Figura 6).

Figura 6

Paso 4
La Interfaz Gráfica está diseñada con Visual C# 2008, lenguaje C, el código es muy parecido al
Proyecto 1.
Se trata de 4 botones que envían un paquete de 2byte cada uno:
1er byte= Modo (0x00)
2do byte= Led (0x01/0x02/0x03/0x04)

El 1er byte no es de mucha utilidad en esta aplicación, pero lo será para aquellos que quieran
agregar más funciones, por ejemplo: Modo 0x00=LEDs, 0x01=Relay, 0x02=CH1/ADC etc.

El 2do byte indica el LED a conmutar: LED1=0x01, LED2=0x02, LED3=0x03 y LED4=0x04


(Figura 7).
Figura 7

Вам также может понравиться