Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Control de Dispositivos Por USB PDF
Control de Dispositivos Por USB PDF
PIC18F2550
Control de dispositivos mediante el
puerto USB: Desarrollo de
proyectos en Visual C#
En este manual veremos como crear una pequea aplicacin en Visual C# y CCS para
poder controlar dispositivos USB usando el microcontrolador PIC18F2550. Este
apartado no pretende ser una explicacin completa del funcionamiento del puerto USB,
sino una gua para poder crear aplicaciones de manera rpida.
Con esto ya podemos empezar a crear una aplicacin demo o aplicacin de prueba, con
la que demostraremos como comunicar nuestra placa con la PC mediante USB.
Todas las aplicaciones que escribiremos son compatibles y fueron testeadas con
Windows 7 y Windows XP, as tambin como versiones intermedias.
2
Introduccin a Visual C#:
Como habamos dicho anteriormente, disearemos una aplicacin para la PC en visual
C#. Para esto debemos tener instalada la suite Visual Studio 2008 o en su defecto
Visual C# 2008 Express. Para el desarrollo de este curso usar Visual Studio 2008, que
es la herramienta que tengo a mano.
Visual C# Express es la versin gratuita del programa la cul podemos descargarla
directamente de la pgina de Microsoft.
Para poder crear un nuevo proyecto de Visual C#, nos dirigimos hacia Archivo
Nuevo Proyecto. Una vez realizado esto, nos aparecer una ventana con los diferentes
tipos de lenguajes disponibles y los tipos de aplicaciones que se pueden llegar a crear
con ellos. Tambin aparecer al costado derecho, la plataforma de trabajo elegida, a la
que conocemos por Framework. En mi proyecto usaremos .Net Framework 3.5.
3
En la Fig. n 2, podemos apreciar los tipos de proyectos que se pueden crear con
Visual C#.
Ahora tenemos listo nuestro proyecto para empezar a trabajar, pero antes lo guardaremos
en caso de alguna eventualidad. Para ello presionaremos sobre el botn Guardar todo;
cuando nos aparezca el cartel para guardar tenemos que elegir la carpeta donde se
guardar y quitar la opcin que dice: Crear directorio para esta solucin.
4
Fig. n 4:
Lo primero que vamos hacer es configurar el espacio de diseo para poder trabajar
cmodos. Lo que haremos ser dejar fija la barra de herramientas para tenerla siempre a
mano como lo muestra la Fig. n 5:
Ya tenemos todo listo para empezar a programar, pero antes veremos un poco del
entorno de trabajo de visual C#.
5
Algo que usaremos muy a menudo para crear La interfaz grfica ser el llamado
cuadro de herramientas el cul podemos ver en la Fig. n 7.
6
El explorador de soluciones que vimos ms arriba sirve para administrar archivos,
proyectos y configuraciones de la aplicacin.
La primera accin que realizaremos ser tomar 4 GroupBox del cuadro de herramientas
y los aadiremos al formulario. No importa el orden, a medida que vallamos avanzando
los iremos configurando.
En este momento tiene que quedar como lo muestra la Fig. n 9:
7
Ahora, a cada uno de los elementos creados les cambiaremos el nombre. Por ejemplo al
primer Groupbox, llamado groupBox1, le pondremos SALIDAS DIGITALES
correspondiente al control que contendr los botones que activarn o desactivarn las
salidas digitales del entrenador.
Para poder cambiar el nombre del control pulsamos con el botn derecho sobre el mismo
y hacemos clic en propiedades.
Parmetro Valor
Name CONTENEDOR_SALIDAS
Text SALIDAS DIGITALES
Para el grouBox2.
Parmetro Valor
Name CONTENEDOR_IN_DIGITALES
Text ENTRADAS DIGITALES
Para el grouBox3.
Parmetro Valor
Name CONTENEDOR_ANALOGICAS
Text ENTRADAS ANALOGICAS
8
Para el grouBox4.
Parmetro Valor
Name CONTENEDOR_PWM
Text CONTROL PWM
Una vez que se han modificado los parmetros de todos los controles nos tiene que
quedar el formulario como se ve en la Fig. n 10:
Ahora ya tenemos los contenedores listos, por lo tanto, hay que empezar a aadir los
controles asociados a esos contenedores. Primero agregamos los botones
correspondientes a las salidas digitales, quedndonos una ventana como la que se ve en
la Fig. n 11:
9
En total tenemos que insertar 4 Buttons de la barra de herramientas y ordenarlos de
modo tal que coincidan con la anterior imagen. Ahora, hay que modificar sus parmetros
al igual que hicimos con los contenedores. Como tenemos 4 salidas digitales
representadas por 4 leds, nombraremos los botones de la siguiente manera:
- Salida 1
- Salida 2
- Salida 3
- Salida 4
Hacemos clic derecho sobre los botones y en las propiedades de cada uno cambiamos los
siguientes parmetros:
Para el button1.
Para el button3.
10
Para el button4.
Cada uno de estos botones comandar una salida del entrenador USB. Nuestra aplicacin,
luego de las modificaciones tendra que quedar como muestra la Fig. n 12.
Para las entradas digitales, incluiremos 4 PictureBox, los mismos nos indicarn
mediante un cambio en su color si un interruptor ha sido presionado. Una vez aadidos
los controles, el formulario tendra que quedar como muestra la Fig. n 13:
11
Ya ordenados los diferentes PictureBox, procedemos a modificar sus parmetros.
Para el PictureBox 1.
Parmetros Valor
(Name) IN _ DIGITAL_1
BorderStyle FixedSingle
BackColor DarkSeaGreen
Para el PictureBox 2.
Parmetros Valor
(Name) IN _ DIGITAL_2
BorderStyle FixedSingle
BackColor DarkSeaGreen
Para el PictureBox 3.
Parmetros Valor
(Name) IN _ DIGITAL_3
BorderStyle FixedSingle
BackColor DarkSeaGreen
Para el PictureBox 4.
Parmetros Valor
(Name) IN _ DIGITAL_4
BorderStyle FixedSingle
BackColor DarkSeaGreen
Con todos los parmetros configurados, el formulario tendra que tener el siguiente
aspecto:
Fig. n 14
12
Para las entradas analgicas, utilizaremos 2 barras de progreso llamadas ProgressBar,
que me indicarn el valor que presenta la salida del CAD (Convertidor analgico
digital).
Fig. n 15
Este es el aspecto del formulario con los controles aadidos. Ahora, hay que configurar 2
parmetros bsicos para poder utilizarlos.
Para el ProgressBar 1:
Parmetros Valor
(Name) ADC1_VALUE
Maximum 1024
Para el ProgressBar 2:
Parmetros Valor
(Name) ADC2_VALUE
Maximum 1024
El valor 1024, dentro del parmetro Maximum, significa el valor mximo que puede
tomar el control y coincide con la resolucin mxima de 10 bits del CAD (Convertidor
analgico digital).
Por ltimo, nos queda el control de PWM (Pulse Width Modulation), que consiste en 2
barra de desplazamiento llamadas HSscrollBar. A travs de este control, podremos
controlar el ciclo de trabajo de los 2 PWM definidos por software.
13
Esto quiere decir que tendremos la capacidad de variar el tiempo Ton (Tiempo en que la
seal PWM est en alto) y el tiempo Toff (tiempo en que la seal PWM est en bajo).
Por lo tanto controlaremos la potencia aplicada y en consiguiente el brillo de los leds
PWM, segn el valor que tome la barra de desplazamiento.
Los 2 PWM definidos por software tienen una resolucin mxima de 8 bits. Esto nos da
255 valores de brillo diferente para los leds. Por lo que la barra tiene que tomar un valor
que no supere 255; este valor lo configuraremos en los parmetros de dicho control.
Fig. n 16
Para el hsScrollBar 1.
Parmetros Valor
(Name) PWM_CONTROL_1
Maximum 255
Para el hsScrollBar 2.
Parmetros Valor
(Name) PWM_CONTROL_2
Maximum 255
14
Fig. N 17
Como podemos ver, hemos redimensionado los dems controles para obtener una mejor
esttica final de la aplicacin. Los parmetros de los nuevos controles son los siguientes:
Para el button.
Parmetros Valor
(Name) CONECTAR _ DISPOSITIVO
Text CONECTAR DISPOSITIVO
Para el ListBox.
Parmetros Valor
(Name) MENSAJES_USB
Backcolor 255, 255, 128 (Amarillo)
Por ltimo para darle un mejor aspecto al formulario, vamos a configurarle los siguientes
parmetros:
Parmetros Valor
(Name) USB_HID
Backcolor 224, 224, 224 (Gris plateado)
FormBorderStyle FixedSingle
Text USB HID Demo
StartPosition CenterScreen
MaximizeBox False
Icon Elegimos un icono predeterminado
15
Finalmente la Interfaz de usuario nos tendra que quedar como muestra la Fig. n 18:
An faltan controles por agregar pero no afectan a la funcionalidad del programa por lo
que podemos empezar a introducir cdigo de programacin.
Para poder agregar la clase tenemos que agregar al directorio donde se encuentra nuestro
proyecto 2 archivos:
16
En la Fig. n 19, vemos como quedan agregados ambos archivos a nuestro proyecto:
Ahora que los archivos estn incluidos a la carpeta del proyecto tenemos que agregarlos
a nuestro entorno de trabajo. Para esto hacemos clic en Proyecto Agregar nuevo
elemento existente.
Fig. n 20
Una vez que anexamos la clase y la librera al proyecto ya podemos trabajar con ellas.
En este momento hacemos clic derecho sobre el formulario y ponemos ver cdigo; nos
tendra que quedar algo as:
17
Fig. n 21
Hemos agregado algunos elementos de cdigo que estn comentados en verde. Los
mismos son necesarios para poder usar las funciones incluidas en la librera mcHID.dll.
En este momento ya estamos listos para poder comenzar a escribir las funciones de
control, pero antes vamos a echar un vistazo a la clase donde estn definidas las
diferentes funciones.
Explicaremos el cdigo paso por paso para un mejor entendimiento del mismo.
18
Ac definimos los mensajes que obtenemos del controlador HID cuando ocurre un
evento.
Leemos el reporte de entrada para ver si hay datos provenientes del dispositivo. El
tamao del reporte depender de la constante BUFFER_IN_SIZE. La funcin retorna 1
si hay datos disponibles para leer y 0 si no los hay.
Escribimos un reporte de salida con los datos almacenados en la variable pData, que es
un puntero a un buffer no administrado. El tamao del reporte depender de la variable
BUFFER_OUT_SIZE. La funcin retorna 1 si se ha podido enviar el reporte y 0 en el
caso contrario.
Activamos el servicio de notificaciones para recibir mensajes cada vez que se produce
un evento de lectura. El servicio se activa una vez que el dispositivo ya se ha conectado
al controlador.
19
Con esto ya hemos explicado todas las funciones que se usarn en el programa. Ahora
veremos el desarrollo de 2 de ellas: Write y Read, correspondientes a las funciones para
leer y escribir datos.
Esta funcin lee el reporte de entrada para ver si hay datos disponibles.
En primera instancia asigna memoria con un tamao igual a BUFFER_IN_SIZE a un
puntero:
A travs del mtodo try, crea un buffer llamado pData. Como es una porcin de
memoria no administrada, usa Marshal nuevamente y copia los datos usando el puntero
creado con anterioridad en el buffer pData, quedando los datos del reporte guardados en
este ltimo.
20
Esta funcin escribe un dato en el reporte de salida.
En primer instancia es igual que la funcin anterior, salvo que la variable result se le
asigna un valor luego de copiar los datos en el reporte de salida; para poder indicar si los
datos se han escrito correctamente.
Esta funcin toma los mensajes de Windows, los procesa y segn el valor que tomen
podemos realizar diferentes acciones. Por ello crearemos 3 funciones:
21
- Dispositivo _ conectado (En caso que el dispositivo est conectado al host)
- Dispositivo _ desconectado (En caso de que desconectemos el dispositivo)
- Lee _ dispositivo (Si se recibe el mensaje de que hay datos disponibles)
El parmetro de cada una de las 3 funciones se da segn el mensaje que se recibe por
parte del controlador, con lo cul la funcin que mostramos ms arriba queda de la
siguiente manera.
Con esto, cada vez que se produzca una notificacin podremos realizar diferentes
acciones en consecuencia. Las 3 funciones las desarrollaremos ms adelante ahora nos
encargaremos de los controles principales.
22
Ahora es momento de aadirle los elementos de la funcin:
Para poder ver si realmente estamos conectados con el entrenador USB hacemos uso de
la funcin:
Con esto podemos detectar cualquier dispositivo conectado que coincida con el VID,
PID declarado en la aplicacin.
Ahora es momento de ejecutar nuestro programa por primera vez, para esto conectamos
el entrenador al host, pulsamos F5 y hacemos clic en el botn conectar dispositivo.
Nos tendra que quedar como muestra la Fig. n 22:
23
Vemos que al pulsar el botn conectar dispositivo, busca el dispositivo y nos muestra
el VID, PID del mismo. Si ahora lo desconectamos y volvemos a presionar sobre el
botn conectar dispositivo, veremos la Fig. n 23:
Para comenzar, hacemos clic en cada uno de los 4 botones asignados al control de
salidas digitales. Con lo cul nos quedar el siguiente cdigo:
Las 4 funciones corresponden a los eventos que se producen al hacer clic en cada uno de
los botones. Ahora agregaremos algunos trozos de cdigo para enviar un comando de
control y otro de datos hacia el dispositivo USB. Con el fin de manejar los leds de
salida.
Como podemos ver, dentro de la funcin que enva el reporte de salida hay un parmetro
que no hemos visto en detalle:
26
Ahora pulsaremos F5, conectaremos el dispositivo y cambiaremos el estado de cada uno
de los 4 indicadores led que se encuentran en el entrenador.
Al hacer clic en cada uno de los botones, la funcin enviar un mensaje de notificacin
indicando el cambio de estado de los leds. Como lo muestra la Fig. n 24:
27
Para ver mejor como trabaja la aplicacin pueden ver el video: Prueba de
funcionamiento N 1, anexado a la carpeta del manual.
Al prximo control al cul nos enfocaremos sern las entradas digitales. Para esto
tenemos que trabajar sobre la funcin:
Vamos a agregar cdigo dentro de la funcin que nos permita indicar de forma grfica y
textual si un pulsador del entrenador USB ha sido presionado.
28
Como se puede apreciar usamos la funcin easyHID.red para leer el reporte de entrada.
Segn los datos que se reciben se activan los indicadores correspondientes y se entregan
mensajes de confirmacin.
Para ver mejor como trabaja la aplicacin pueden ver el video: Prueba de
funcionamiento N 2 anexado a la carpeta del manual.
Para poder insertar cdigo en dichos controles, hacemos doble clic en las barras de
desplazamiento con lo cul nos tendra que quedar las siguientes funciones dentro del
cdigo principal:
Ambos PWM tienen una resolucin mxima de 8 bits. Esto se debe a que a mayor
resolucin se necesita mayor velocidad de refresco; al utilizar PWM por software la
seal inyectada a los leds puede ser inestable debido a la cantidad de procesos que se
ejecutan dentro del programa principal del PIC.
29
En una posible actualizacin se podra usar PWM por hardware lo que nos dara ms
resolucin sin perder estabilidad en la seal generada.
Para ver mejor como trabaja la aplicacin pueden ver el video: Prueba de
funcionamiento N 3, anexado a la carpeta del manual.
En este momento solo falta un control para programar: Las entradas analgicas.
Para mostrar el valor que toma el CAD (convertidor analgico digital), tenemos 2
barras de progreso ADC1_Valor y ADC2_Valor. Las mismas muestran de forma grfica
el valor de voltaje presente en los pines de las entradas analgicas.
Ambas barras de progreso pueden tomar un valor mximo de 1024, correspondiente al
valor mximo que puede tomar la lectura del CAD. Que tiene una resolucin mxima de
10 bits.
Para ver mejor como trabaja la aplicacin pueden ver el video: Prueba de
funcionamiento N 4 anexado a la carpeta del manual.
En este punto ya hemos visto todos los procesos que se realizan con el dispositivo
conectado. Una vez que el dispositivo se desconecta, hay que cerrar la comunicacin con
el controlador.
30
Aadimos las siguientes sentencias de cdigo a la funcin:
Con este cdigo, cada vez que el dispositivo USB se desconecta del host, se
desconectar del controlador y nos notificar el evento mediante un mensaje.
Lo primero que haremos ser definir 2 funciones. Una de ellas habilitar los controles
cuando conectemos el dispositivo y la otra desactivar los controles cuando lo
desconectemos.
31
Ahora aadimos cdigo para ver su funcionamiento:
32
En este momento ya tenemos nuestra aplicacin funcional, por lo que procederemos a
aadir los controles faltantes al formulario.
Dentro del men opciones creamos la funcin salir y dentro del men ayuda:
El men de ayuda es un men informativo para que el usuario se gue dentro del
programa adems de presentar informacin relativa al autor, informacin de contacto,
etc.
Con lo anterior la apariencia de la aplicacin nos tiene que quedar como muestra la
Fig. n 26 y 27:
33
Ahora comenzaremos a aadir cdigo para hacer funcionales dichos elementos.
Primero que nada hacemos doble clic en Salir e introducimos el siguiente cdigo:
Parmetros Valor
ShortCutKeys Control+ S
Yndonos al men ayuda tenemos la primera funcin Acerca de HID Demo. Hacemos
clic en ella y agregamos las siguientes sentencias.
Este cdigo mostrar una ventana informativa sobre el creador del programa, contacto,
licencia, etc.
34
Podemos agregarle teclas de acceso rpido. Para esto modificamos el siguiente
parmetro:
Parmetros Valor
ShortCutKeys F1
Fig. n 29
Luego hacemos doble clic en Web del proyecto y agregamos el siguiente cdigo:
Para agregarle teclas de acceso rpido. Para esto modificamos el siguiente parmetro:
Parmetros Valor
ShortCutKeys Ctrl+W
35
En este cdigo, trata de abrir el manual de usuario de la aplicacin. En caso de no poder,
muestra un mensaje alternativo de advertencia como el que est a continuacin.
Fig. n 30
Parmetros Valor
ShortCutKeys Ctrl+A
Dentro del elemento podemos ver un men desplegable all elegimos el control llamado
StatusLabel y le modificamos el siguiente parmetro:
Parmetros Valor
Text hh:mm:ss
Para poder obtener la hora hacemos doble clic sobre el timer y le agregamos el siguiente
cdigo:
El siguiente cdigo:
Fig. n 32
37
Como podemos ver le hemos aadido algunos indicadores adicionales a los controles
para mejorar el aspecto visual del mismo, como as tambin redimensionamos algunos
controles.
Un ltimo control funcional que tendremos que agregar a la aplicacin ser un ToolTip.
Este control muestra informacin cuando se pasa el puntero del Mouse sobre el control
asociado.
Finalmente lo que nos queda por hacer es aadirle un icono al programa y modificar la
informacin de ensamblado para agregar informacin personal.
Podemos ver varias cosas entre las que destaco las siguientes:
- Nombre de ensamblado y espacio de nombres: Aqu pondremos el nombre de la
aplicacin.
- Informacin de ensamblado: Informacin que se incrusta al programa compilado
(.exe), respecto del autor, versin, fecha de ensamblado, revisin, etc.
Fig. n 35
39
- Por ultimo el icono y manifiesto que seleccionaremos del icono agregado a la
aplicacin previamente.
En este punto hemos terminado con la aplicacin para la PC y nos queda nicamente
explicar el cdigo del microcontrolador para terminar con la gua.
Explicaremos los puntos clave a tener en cuenta con el firmware del microcontrolador.
Como compilador utilizaremos el CCS v4.114, ya que ofrece una gran facilidad en el
uso de las libreras USB.
El entorno de trabajo del CCS permite compilar y tambin suministra una gran variedad
de herramientas auxiliares. En la Fig. n 37, se muestran los distintos elementos bsicos
del entorno de trabajo. Existen 2 formas de iniciar una sesin: abriendo un fichero de
cdigo fuente o creando un proyecto.
40
Para abrir un fichero fuente directamente se realiza una pulsacin sobre el icono para el
manejo de ficheros (Fig. n 38) y aparece un men donde podemos crear, abrir, guardar
o cerrar ficheros. Con el comando New podemos crear un fichero fuente, un proyecto, un
fichero RTF o un fichero de diagrama de flujo.
Con la opcin New > Source file, el programa pide el nombre del nuevo fichero y crea
una nueva ventana en blanco donde podemos empezar a escribir, como lo muestra la
Fig. n 39.
41
Una vez explicado esto, procederemos a crear nuestra aplicacin de control.
42
Una vez que ya tenemos el archivo cargado, vamos bajando y vemos la primer sentencia
de cdigo:
A travs del uso de esta directiva, le decimos al compilador que trabajaremos con el
CAD (Convertidor analgico a digital) con 10 bits de resolucin y justificacin a la
derecha (Los bits ms significativos del registro ADRESH, son ledos como 0).
Los fuses (o mejor dicho palabra de configuracin) son muy importantes ya que
determinan muchos parmetros del microcontrolador. Los que se encuentran ordenados
en la figura anterior tienen las siguientes funciones:
43
Usando la directiva #include agregamos todas las libreras necesarias para gestionar la
comunicacin USB.
Por el momento explicaremos 2 de ellas:
- APLICACIN_HID.h
- Descriptor_easyHID.h
A travs del uso de etiquetas #define le aadimos nombres a las entradas y salidas para
poder facilitar la programacin y recordar donde se ubican los diferentes componentes.
Definimos el tamao que debe tener el edpoint de entrada y de salida, en este caso el
valor 32 nos indica que recibir 32 bytes desde el host y transmitir 32 bytes hacia el
host.
Para dejar bien en claro el significado de endpoint, les dejo el siguiente enunciado:
"Los dispositivos (o mejor dicho, las funciones) tienen asociados unos canales
lgicos unidireccionales (llamados pipes) que conectan al host (PC) controlador con
una entidad lgica en el dispositivo (PIC) llamada endpoint. Los datos son enviados
en paquetes de largo variable (potencia de 2). Tpicamente estos paquetes son
de 64, 128 o ms bytes.
Estos endpoints (y sus respectivos pipes) son numerados del 0 al 15 en cada
direccin, por lo cual un dispositivo puede tener hasta 32 endpoints (16 de
entrada y 16 de salida). La direccin se considera siempre desde el punto de
vista del host controlador. As un endpoint de salida ser un canal que
transmite datos desde el host controlador al dispositivo. Un endpoint solo
puede tener una nica direccin. El endpoint 0 (en ambas direcciones) est
reservado para el control del bus."
44
La cita anterior fue extrada del trabajo de grado que se encuentra en el siguiente link:
http://pablohoffman.com/oscusb/doc/
Estas definiciones est ntimamente ligadas con las funciones de control que se
encuentran en la aplicacin de Visual C# estudiada anteriormente. Esto lo veremos ms
adelante.
Estos macros son usados para el control de las salidas digitales para no tener que usar las
funciones predefinidas ms costosas de recordar. Ayudan al desarrollo del programa.
Luego hay 2 funciones ms, pero su explicacin es redundante ya que estn muy bien
documentadas en la librera.
Estas 2 directivas nos permiten utilizar los puertos sin necesidad de configurarlos cada
vez que se usan. Lo que si debemos tener en cuenta es configurar que pines sern
entradas y que pines sern salidas usando las siguientes sentencias:
Una vez configurados los puertos pueden usarse libremente los que nos ahorra RAM y
ROM dentro una vez que compilamos el programa.
45
Esta funcin ya se encuentra explicada en la librera, pero dentro de ella tiene una
sentencia que no ha sido desarrollada.
Esta funcin se encuentra dentro de la librera: USB.c, lo que hace es esperar hasta que
el host enumere el dispositivo y prender el LED verde. En caso de que no lo hiciera el
dispositivo no puede comunicarse con la aplicacin de control y el LED rojo permanece
encendido.
Con estas 2 sentencias inicializamos los 2 PWM y apagamos los leds asociados.
Una funcin muy importante ya que inicializa el stack USB, conecta el dispositivo al
host, habilita las interrupciones, etc. Trabaja en conjunto con USB stack; esta funcin
asume que el USB est conectado siempre al host, por lo que mantiene al dispositivo
permanentemente conectado.
46
Esta funcin inicializa el hardware USB, las interrupciones, etc. Trabaja en conjunto con
USB_init (). En caso de usar USB_init_cs (), hay que llamarla peridicamente desde el
main (), pero normalmente se llama una sola vez.
Ya dentro del bucle infinito que se muestra a continuacin, todas las funciones que se
encuentren dentro del mismo se ejecutarn indefinidamente.
Estas 2 funciones son idnticas y nos permiten controlar el ciclo de trabajo de ambos
PWM. La variable ValorPWMx_H, corresponde al semiciclo positivo de la seal y la
variable ValorPWMx_L, al semiciclo negativo.
Modificando el valor de ambas variables segn el valor que se reciba de la PC, podemos
modificar el ciclo de trabajo, por lo tanto la potencia aplicada a los leds PWM
(modificamos el brillo de los mismos).
47
Estas 4 sentencias son idnticas, lo que hacen es ver el estado de los pulsadores y enviar
guardar el valor en el buffer enva.
Ambos grupos de sentencias son iguales, lo que hacen es lo siguiente, enumerado para
una mejor comprensin:
Esta funcin enva el arreglo de datos enva hacia el host para luego poder visualizar
los datos en la aplicacin. La funcin tiene 4 parmetros que enumeraremos para un
mejor entendimiento:
48
Al principio se ejecuta un bucle condicional, el mismo se fija, mediante la funcin que
tiene asociada si hay datos en el endpoint indicado. En este caso dentro del parntesis
hay indicado un 1, refirindose al endpoint 1.
En caso de que haya datos provenientes del host para leer, los tomamos y guardamos
usando la funcin usb_get_packet. La misma tiene 3 parmetros:
Una vez tomados los datos del host los procesaremos como muestran las siguientes
funciones:
Para darnos una idea de como trabaja la aplicacin con el hardware vamos a poner la
funcin:
49
Vemos que la funcin enva el comando para activar los leds y luego el dato
correspondiente al led 1. Cuando el PIC los recibe, cambia el estado del led 1 como
muestra la sentencia de cdigo:
Para el caso de los PWM se cumple lo mismo: Se recibe el comando de control, recibe el
valor procedente de las barras de desplazamiento y lo guarda en las variables que
contienen el ciclo de trabajo.
Con esto ya hemos visto tanto la aplicacin para la PC, como el firmware para el
microcontrolador y estamos listos para poder crear nuestras propias aplicaciones a partir
de la gua.
Algo que habamos omitido hasta el momento es la explicacin del hardware utilizado.
Aunque su utilizacin sea sencilla vale la pena detallar como est compuesto, adems es
necesario nombrar los elementos que lo componen para un mejor entendimiento del
mismo.
50
Entrenador USB v0.1:
Como elemento hardware para el desarrollo de esta gua usaremos un entrenador de bajo
costo diseado para comprender el funcionamiento del puerto USB y posibles
aplicaciones de control.
El entrenador tambin puede ser usado para aprender a programar debido a que posee los
perifricos bsicos que se usan en los entrenadores estudiantiles.
Para tener una vista general del hardware utilizado, miremos la Fig. n 41.
51
El nombre de cada pin es el siguiente:
Por ltimo podemos ver el diseo del circuito impreso y el esquema de nuestro
entrenador USB en las Fig. n 44 y 45 respectivamente:
52
Con esto damos por terminada nuestra gua, espero les sirva.
Un saludo !
53
54
55