Sunteți pe pagina 1din 7

Segundo Congreso Virtual, Microcontroladores y sus Aplicaciones

MODULO DE ENTRENAMIENTO PARA EL APRENDIZAJE DE


COMUNICACIÓN USB ENTRE MICROCONTROLADOR PIC Y
DELPHI BORLAND

Ing. Ms(c) Ilber Adonayt Ruge Ruge


Universidad de Cundinamarca
Programa de Ingeniería Electrónica
Grupo de Investigación en Tecnologías de la Información y las Comunicaciones GITEINCO
Colombia/Cundinamarca/Fusagasugá
ilberruge@yahoo.es ; iruge@unicundi.edu.co

Abstract. El presente articulo muestra el desarrollo de una Interface Grafica de Usuario realizado
mediante el software de programación Delphi Borland 7.0, desde donde se puede visualizar algunos
estados análogos y digitales y definir algunos estados digitales del modulo hardware basado en un
microcontrolador PIC 18F2550 de la familia Microchip. La comunicación entre la Interface grafica
de usuario realizada para esta aplicación y el modulo hardware basada en microcontrolador PIC, se
hace a través del protocolo USB.

1 Introducción 2.1 Modulo Hardware basado en


Microcontrolador PIC
En más de dos millones de unidades nuevas
instaladas por año, USB es la interface usuario- Los dispositivos de la familia
computador de mayor éxito. Los computadores PIC18F2455/2550/4455/4550 incorporan un
actuales tienen puertos USB para conectar teclados, completo modulo de comunicaciones que es
ratones, dispositivos de juego, escáner, cámaras, compatible con USB 2.0 (Universal Serial Bus). Este
impresoras y mas. USB es cada vez mas confiable, modulo soporta la comunicación low-speed y full-
rápido, versátil, con bajo consumo de energía, bajo speed para todos los tipos de transferencias de datos
costo y soportado por los principales sistemas de este protocolo [2]. Por tal razón, para el desarrollo
operativos, desplazando ampliamente a las interfaces de este modulo hardware se selecciono el
convencionales RS232 y paralelo. Con el nuevo USB PIC18F4550, por su fácil adquisición, bajo costo en
3.0 con bus de super-velocidad, probablemente la el mercado electrónico y por el numero de puertos
interface USB continúe el dominio como la interface I/O necesarios para la aplicación.
a seleccionar para conectar nuestros periféricos a los
sistemas computarizados [1]. El diagrama de conexiones del microcontrolador PIC
con los dispositivos de entrada análoga; conformadas
2 Modulo de Entrenamiento por tres (3) potenciómetros que generan los voltajes
entre 0-5v, entradas digitales; conformado por ocho
La propuesta desarrollada en esta aplicación, esta (8) interruptores, salidas digitales; cuyos estados son
fundamentada según lo mostrado en la Figura 1. visualizados por ocho (8) leds y conector a puerto
USB, se muestra en la Figura 2 (Ver Anexo B).

Para el desarrollo del código fuente se utiliza el


compilador de C “PCW C Compiler IDE” [3]. Este
compilador trae incorporado las librerías pic18_usb.h
(Layers de Microchip PIC18Fxx5x Hardware para
controlador USB), usb_proyect.h (Configuración del
USB y los descriptores para este dispositivo) y usb.c
(USB setup y reporte de descriptor), que permiten
realizar la comunicación entre el modulo USB del
Figura 1. Diagrama de bloques del modulo de microcontrolador y el driver MCHPUSB que ofrece
entrenamiento USB. Microchip para uso en el PC [4].

Congreso 2010, Página 1


El código fuente programado en el microcontrolador
se muestra en el Anexo A.

2.2 Interface Grafica de Usuario en


Delphi Borland
Delphi Borland es un entorno de programación
basado en lenguaje Pascal, que hace más fácil el
desarrollo de aplicaciones en entorno Windows.
Delphi se puede usar para casi cualquier tipo de
programa, obteniéndose un rendimiento excelente
Figura 4. Inclusión de la librería usbdll de Delphi
con facilidad [5]. El entorno de programación de
Borland para administración del driver mpusbapi.dll
Delphi incluye un cómodo editor de texto con
de Microchip.
posibilidad de trabajar con varios archivos a la vez,
un visor de propiedades y eventos y un potente
La Figura 5 muestra el procedimiento que contiene
debugger. Además viene con el compilador una
las funciones para enviar/recibir datos mediante USB.
versión reducida del Paradox for Windows para
Aquí, la variable que determina si se desea enviar o
trabajar con las tablas y un editor de recursos
recibir datos, es RecvLength.
(bitmaps, cursores, iconos, etc) [6].
La interface Grafica desarrollada para este modulo de
entrenamiento USB, consiste de tres paneles donde el
usuario puede ver los estados de las variables de
entrada análogas (CH0, CH1 y CH2) y digitales
(PORT_D), y de igual manera podrá definir los
estados de la variable de salida (PORT_B).

Figura 5. Procedimiento para enviar/recibir datos


mediante USB en Delphi Borland.

El identificador utilizado para determinar que acción


se desea realizar desde la interface grafica (leer
variables análogas, leer variable digital o enviar dato
digital), es el valor asignado en la variable
send_buf[0]. Por otro lado, send_buf[1] contiene el
valor que se desea enviar al modulo hardware.
Entonces, el modulo interpretara el dato contenido en
el endpoint1 (3 bytes) como “if send_buf[0]=1 then
Port_D=send_buf[1]”.

Figura 3. Interface Grafica para modulo de


entrenamiento USB.
A continuación se realiza una breve descripción de
los principales apartes del código fuente en Delphi
Borland, con el animo de comprender la manera
como se administra la librería que permite la
comunicación con el modulo hardware basado en
PIC. Figura 6. Envío de dato digital para mostrar en
modulo hardware.
La Figura 4 muestra un aspecto muy importante a
tener en cuenta, y consiste en incluir en el bloque En la Figura 6 se muestra que para enviar datos, el
uses de Delphi Borland, la librería dinámica usbdll, valor de la variable RecvLength debe ser igual a cero.
la cual se utilizara para administrar el envió y
recepción de datos mediante la librería mpusbapi.dll La porción de código mostrado en la Figura 7,
de Microchip. muestra ahora como leer los estados digitales del
Puerto B en el modulo hardware. Para esta ocasión, el

2
Segundo Congreso Virtual, Microcontroladores y sus Aplicaciones
identificador de acción send_buf[0]=2 y
la variable RecvLength=1, es decir, se espera un
valor como respuesta a dicha petición por parte del
modulo hardware. Dicho valor se registra en la
variable Entrada para posteriormente visualizarla en
el panel correspondiente en la GUI.

Figura 7. Lectura de Entrada digital en el modulo Figura 9. Instalación de driver USB Microchip
hardware mediante USB a través de Delphi Borland. cuando se conecta por primera vez el modulo
hardware.
De igual manera se procede para la lectura de los
valores correspondientes a la conversión A/D de los Si el proceso de instalación del driver USB de
canales CH0, CH1 y CH2 del modulo hardware. Microchip es exitoso, debe aparecer una ventana
Según lo mostrado en la Figura 8, el identificador de indicando dicho procedimiento, según se muestra en
acción send_buf[0]=3 y por tanto la variable Entrada la Figura 10.
contendrá el valor correspondiente a la lectura A/D
del canal 0 (CH0). Para la lectura del valor A/D de
los canales CH1 y CH2 se procede igual, pero
asignando a send_buf[0] el valor de 4 y 5
respectivamente.

Figura 10. Finalización exitosa de la instalación del


driver USB de Microchip.

Si se desea verificar la conexión exitosa del modulo


Figura 8. Lectura de entrada análoga (CH0) en el de entrenamiento, se puede hacer por medio del
modulo hardware mediante USB a través de Delphi. “Administrador de Dispositivos” del sistema
operativo.
2.3 Prueba de instalación del driver del
modulo de entrenamiento USB
Cuando se conecta por primera vez el modulo
hardware al PC, el sistema reconoce el dispositivo y
activa el “asistente de hardware nuevo encontrado”,
según como se muestra en la Figura 9. El
procedimiento a seguir es seleccionar la opción
“Instalar desde una ubicación especifica” y Figura 11. Verificación de conexión del modulo
examinar la carpeta donde se encuentra el paquete de mediante el administrador de dispositivos.
instalación proporcionado por Microchip para la
instalación del driver USB de sus dispositivos [4].
2.4 Validación de funcionamiento del
modulo USB mediante ISIS Proteus.
Para realizar la validación del funcionamiento del
modulo de entrenamiento USB mediante ISIS
Proteus, se tiene que instalar primero los drivers USB
Virtuales del ISIS Proteus, según se muestra en la
Figura 12.

Congreso 2010, Página 3


en un medio alternativo para realizar las primeras
experiencias que permita a los diseñadores
electrónicos relacionarse con la interface USB de una
manera didáctica y fácil de comprender.
Figura 12. Instalación de drivers virtuales USB de
Proteus. Contar con dispositivos microcontrolados que ya
tengan incorporados el modulo USB, ofrece una
Al iniciar la simulación del modulo de entrenamiento gama amplia para el desarrollo de aplicaciones a muy
USB implementado en ISIS Proteus según como lo bajo costo, orientadas a la solución de problemas en
muestra la Figura 2 (Anexo A), el indicador OK la industria, la ingeniería y otros sectores donde la
deberá activarse, de lo contrario se deberá reinstalar conectividad con los sistemas computarizados o
nuevamente los driver virtuales. dispositivos en general es ampliamente desarrollada
sobre la interface USB.
La Figura 13 (Anexo C) muestra el resultado de la
simulación del modulo en ISIS Proteus y el estado de
las variables en la Interface Grafica de Usuario Referencias
desarrollada en Delphi Borland. [1] Axelson Jan, USB Complete Fourth Edition,
The Developers Guide, Lakeview Research
Para mayor facilidad de comprensión del proyecto LLC, pagina 1, 2009.
expuesto en este paper, la carpeta que contiene todos
los elementos tanto código C implementado en el [2] PIC18F2455/2550/4455/4550 Data Sheet,
microcontrolador PIC18F4550, los driver USB de Enhanced Flash USB Microcontrollers with
Microchip y el proyecto Delphi Borland se pueden nanoWattTechnology, Microchip.
descargar en los siguientes links:
[3] Canovas Andres. Manual de usuario de
http://www.megaupload.com/?d=NS3LQINK.
http://rapidshare.com/files/393466251/daq_usb.rar.html.
compilador PCW de CCS. Disponible en
http://www.mediafire.com/download.php?y3nt3q4yy33. internet en:
http://www.cursos.ucv.cl/eie48700/referencias/
CCS_C_Manual.pdf.
2.5 Requerimientos de software para [4] MCHPUSB Framework USB Software, USB
validación del proyecto. Software & Tools, Microchip, disponible en
http://www.microchip.com/stellent/idcplg?IdcS
• Isis Proteus v7.4 ervice=SS_GET_PAGE&nodeId=2651&param
• Delphi Borland v7.0 =en534494.
• Sistema Operativo Windows XP
[5] Cantu marco, Delphi 2009 Handbook, editorial
Wintech ItaliaSrl, Edicion 1, pag. 2008.
3 Conclusiones
[6] Quick Start Manual Borland Delphi v7.0:
Dado que los adelantos tecnológicos avanzan de
Programming with Delphi, Borland Software
manera muy rápida, y la conectividad de los mismos
Corporation, 2002.
a sus periféricos mantienen a la interface USB como
protocolo de comunicación, el aprender a desarrollar
aplicaciones bajo esta interface se convierte ya casi
en una necesidad extrema. Por tanto, el modulo de
entrenamiento presentado en este paper se convierte

“Copyright ©2010. “Ilber Adonayt Ruge Ruge”: El autor delega a la Organización del Segundo Congreso
Virtual de Microcontroladores la licencia para reproducir este documento para los fines del Congreso ya sea que

4
Segundo Congreso Virtual, Microcontroladores y sus Aplicaciones
este artículo se publique en el sitio web del congreso, en un CD o en un documento impreso de las
ponencias del Segundo Congreso Virtual de Microcontroladores.

ANEXO A
#include <18F4550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL3,CPUDIV1,VREGEN
#use delay(clock=48000000)
#define USB_HID_DEVICE FALSE //deshabilitamos el uso de las directivas HID
#define USB_EP1_TX_ENABLE USB_ENABLE_BULK //turn on EP1(EndPoint1) for IN bulk/interrupt transfers
#define USB_EP1_RX_ENABLE USB_ENABLE_BULK //turn on EP1(EndPoint1) for OUT bulk/interrupt transfers
#define USB_EP1_TX_SIZE 1 //tamaño para la tx del buffer endpoint 1
#define USB_EP1_RX_SIZE 3 //tamaño para la rx del buffer endpoint 1
#include <pic18_usb.h> //Microchip PIC18Fxx5x Hardware layer for CCS's PIC USB driver
#include <Usb_proyect.h> //Configuración del USB y los descriptores para este dispositivo
#include <usb.c> //handles usb setup tokens and get descriptor reports
///////////////////////////////////////////////////////////////////////////////////////////////////////////
// Al conectar el Modulo al PC encendemos el Led Rojo hasta que el dispositivo
// halla sido configurado por el PC, en ese momento encederemos el Led Verde.
///////////////////////////////////////////////////////////////////////////////////////////////////////////
#define LEDV PIN_C0 //Configurando conexión con PC
#define LEDR PIN_C1 //Configuración exitosa
#define LED_ON output_high
#define LED_OFF output_low

#define modo recibe[0] //se define el buffer recibe de tamaño 3


#define num recibe[1]
#define secu recibe[2]
#define resultado envia[0] //se define el buffer envía de tamaño 1

void main(void) {

int8 recibe[3]; //declaración de variables


int8 envia[1];
long num0;
long num1;
long num2;
long num3;
int value;

delay_ms(50);
LED_OFF(LEDV); //encender led rojo
LED_ON(LEDR);

setup_adc_ports(AN0_TO_AN2_ANALOG);
setup_adc(adc_clock_internal);

usb_init(); //inicializamos el USB

usb_task(); //habilita periferico usb e interrupciones


usb_wait_for_enumeration(); //esperamos hasta que el PicUSB sea configurado por el host
delay_ms(50);
LED_OFF(LEDR);
LED_ON(LEDV); //encendemos led verde

while (TRUE)
{
if(usb_enumerated()) //si el modulo está configurado
{
LED_OFF(LEDR);
LED_ON(LEDV);
if (usb_kbhit(1)) //si el endpoint de salida contiene datos del host
{

Congreso 2010, Página 5


usb_get_packet(1, recibe, 3); //coger el paquete de tamaño 3bytes del EP1 y almacenamos en recibe

if (modo == 1) // Modo_rx de datos por el port_d


{
num1=num;
output_d(num1);
}

if (modo == 2) // Modo_tx de datos por el port_A


{
resultado=0;
num2=input_b();
resultado=num2;
usb_put_packet(1, envia, 1, USB_DTS_TOGGLE); //enviar paquete capturado del port_A al PC
}

if (modo == 3)
{
set_adc_channel(0);
resultado=read_adc();
delay_ms(10);
usb_put_packet(1, envia, 1, USB_DTS_TOGGLE);
}

if (modo == 4)
{
set_adc_channel(1);
resultado=read_adc();
delay_ms(10);
usb_put_packet(1, envia, 1, USB_DTS_TOGGLE);
}

if (modo == 5)
{
set_adc_channel(2);
resultado=read_adc();
delay_ms(10);
usb_put_packet(1, envia, 1, USB_DTS_TOGGLE);
}

}
}
}
}

6
Segundo Congreso Virtual, Microcontroladores y sus Aplicaciones
ANEXO B

Figura 2. Diagrama de Conexiones del modulo hardware basado en PIC18F2550.

ANEXO C

Figura 13. Simulación de modulo de entrenamiento USB y verificación de estados de las variables en la Interface
Grafica de Usuario desarrollada en Delphi Borland.

Congreso 2010, Página 7

S-ar putea să vă placă și