Sie sind auf Seite 1von 15

Conexión CDC mediante

PIC18fx55x y LabView.
Jonatan I. Yam Cabrera.
Jonatan.yam@gmail.com
1. Emulación de puerto serie. A continuación se muestra el esquema
básico, para lograr la comunicación usb con
el microcontrolador:
La emulación de un puerto serie RS232
mediante un microcontrolador PIC de la
familia 18Fxx5x de microchip, es una de las
maneras más rápidas y fáciles de realizar e
implementar, puesto que hoy en día existen
una gran cantidad de herramientas
dedicadas a estos microcontroladores que
se han vuelto tan populares. Solo basta con
un poco de conocimiento para el uso de
estas mismas para tener en un plazo muy
reducido de tiempo, un proyecto robusto y
confiable.
Como puede observarse, prácticamente
Para realizar un enlace en esta modalidad
se requiere un conector usb y un capacitor
se requiere, en un aspecto global solamente
para lograr poner en funcionamiento el
de las siguientes tres cosas:
microcontrolador. De este cirquito de partida
 Circuito de desarrollo. se puede ir agregando dispositivos que

 Compilador CCS y librerías.. cumplan con la necesidad en particular de su

 Drivers CDC aplicación.

1.1. Circuito de desarrollo. 1.2. Compilador CCS y librerías.

No es necesario adquirir tarjetas de En esta aplicación se utilizó el


desarrollo profesionales con costos elevados compilador PCW de CCS, que maneja
para poder obtener resultados de calidad, lenguaje de alto nivel basado en C, y en
basta con invertir en un microcontrolador, conjunto con este, se requieren de los
un par de dispositivos que complementen a siguientes archivos para la programación.
este y un buen diseño para estar a la par con
usb_cdc.h .- La cuál contiene las rutinas
estas tarjetas de marca.
necesarias para manejar las interrupciones,
la comunicación usb, los descriptores y todos

Jonatan Yam Cabrera. Página 2


los handlers necesarios para lograr Este driver también lo incluye el CCS, en la
establecer la comunicación con la PC. carpeta de drivers, sin embargo, saber de el
origen de este nunca está de más.
usb_desc_cdc.h .- Esta librería contiene los
descriptores CDC, que básicamente es el En esta librería se incluyen cientos de
archivo que indica a la PC como tiene que ejemplos para todo tipo de
configurar el dispositivo, y algunos datos microcontroladores y los cuales pueden ser
extras sobre el mismo, como la cantidad de un buen punto de partida.
corriente que necesita, el nombre del
dispositivo, VID y PID entre otros.
2. Labview y funciones de conexión
Existen otros archivos relacionados con el
para puerto serial.
usb que se utilizan como el usb.h, pero sobre
los que tenemos que tener mucha atención
para personalizar nuestra aplicación son los LabView posee una serie de herramientas
dos mencionados. para realizar una conexión mediante el
puerto serial, estas herramientas vienen en
un “toolbox” llamado VISA, que se pueden
1.3. Drivers CDC. obtener directamente de la web de National
Instruments en caso de no tenerlos
instalados previamente.
Este modo de conexión requiere de un
Si ya contamos con las herramientas VISA,
driver para Windows, en su paquete USB
estas se localizan en el panel de funciones
Framework v2.6a, Graphics Library v2.01,
en: Instrument I/O>>VISA>>Bus/Interface
MDD v1.2.5, TCPIP Stack v5.20b, mTouchCap
Specific>>Serial.
Library v1.01, el cual se puede descargar
directamente del fabricante microchip en:
www.microchip.com y Home Products
Home Page 16-bit PIC® MCUs & dsPIC®
Digital Signal Controllers

Una vez instalado en la ruta por defecto,


el driver CDC se localiza en la siguiente ruta:
C:\Microchip Solutions\USB Tools\USB CDC
Serial Demo\inf.

Jonatan Yam Cabrera. Página 3


Estas herramientas nos van a permitir En el menú contextual de cada
realizar una conexión de la PC al herramienta, se puede encontrar la ayuda,
microcontrolador en cuestión de minutos. A donde se especifican todos los detalles para
continuación ser enlistan las 4 principales cada una, como el tipo de datos que soporta,
funciones: timeout, bytes esperados, entre otros.

Configuración del puerto.- Esta función


permite configurar los diferentes parámetros
del puerto serial como el baudrate, paridad,
control de flujo, bits de datos, carácter de
término etc.

Función de escritura.- Mediante esta 3. Conexión básica PIC-Labview.


herramienta realizaremos envíos de datos a
Empezaré por el lado del
través del puerto serial.
microcontrolador, específicamente la parte
del firmware, que nos va a permitir realizar la
conexión.

La primero es la librería base del


Función de lectura.- La herramienta
microcontrolador que usaremos, en este
lectura nos permitirá adquirir datos de
caso se usa un PIC182550 con un cristal de
dispositivos externos, en este caso el PIC.
4MHz.

#include <18F2550.h>

Cerrar puerto.- Es importante cerrar los Inmediatamente se declaran los fusibles.


puertos que ya no se estén utilizando, de lo
contrario, al solicitar una conexión por este, #fuses XTPLL,NOWDT,NOPROTECT,NOLVP
será imposible por encontrarse en uso. #fuses NODEBUG,USBDIV,PLL1,CPUDIV1
#fuses VREGEN,NOPBADEN

En caso de usar otro hardware, los


fusibles resaltados con negritas, son los de
mayor importancia, ya que la configuración

Jonatan Yam Cabrera. Página 4


de estos son vitales para el funcionamiento usb_cdc_getc().- Devuelve el carácter
del dispositivo. (dato) que se encuentre en el buffer de
entrada.
Una vez definido el include del dispositivo
y los fusibles, se define la librería que Se pueden encontrar los demás
realizará todos los procesos necesarios para prototipos disponibles en la librería
establecer conexión con la PC. usb_cdc.h con la respectiva descripción de
cada uno.
#include <usb_cdc.h>
3.1. Recepción de datos enviados de la
Ahora ya procedemos a la parte principal PC en el microcontrolador.
del código en el que es muy importante usar
la siguiente instrucción antes que cualquier Para el hardware del ejemplo se usa un
otra relacionada con la comunicación USB, ya LED en el puerto RB0 del microcontrolador,
que este permite la inicialización de los el cual se controlará mediante un dato
procesos del USB: enviado por la PC de la siguiente manera:

Void main(void) { Después de comprobar si el


usb_init(); microcontrolador ha sido enumerado, se
} checa si existe algún dato en el buffer de
entrada; si es así, se lee el dato y se asigna a
Cuando ya hemos inicializado mediante una variable, la cual servirá para tomar la
usb_init(), ya podremos hacer el uso de los decisión sobre el estado del led.
demás prototipos relacionados con la
comunicación como son los tres siguientes c=usb_cdc_getc();
usados para este ejemplo de conexión
básica: if (c=='1') output_toggle(LED1);

usb_enumerated().- Que nos devuelve En este ejemplo sucede que si el dato


True si el dispositivo ya se encuentra (código ASCII) recibido por el
enumerado por la PC o false en caso de no microcontrolador equivale al carácter “1” (49
estarlo. decimal), cambia de estado el LED por medio
usb_cdc_kbhit().- Nos indica si existen de la instrucción interna del compilador
datos en el buffer de entrada del output_toggle() que simplemente cambia el
microcontrolador. estado actual, si esta en 1, se cambia a 0; si
estuviera en 0 a 1.

Jonatan Yam Cabrera. Página 5


3.2. Envío de datos desde el pull-up) se hace un pequeño delay para
microcontrolador a la PC. evitar rebote y enviar datos demasiado
seguidos, y se envía el carácter “5” seguido
Para realizar esta tarea, se utiliza en el de un retorno de carro “/r” mediante la
hardware, un push-button con resistencia función printf().
pull-up en el puerto AN1 para tener control
sobre esta acción y entender claramente 3.3. Envío y recepción de datos de
tanto el envío como recepción de datos. LabView al microcontrolador
Por el lado de la programación del
microcontrolador, la librería usb_cdc.h Para realizar esta tarea implementaremos
cuenta con un par de funciones para el envió las 3 funciones básicas en el labview,
de datos. resultando en un ejemplo de conexión muy
sencillo, sin embargo, será un buen punto de
usb_cdc_putc().- Esta función es la que partida para la elaboración de programas
nos permitirá realizar envío de caracteres más complejos.
mediante el usb a la PC.
Para empezar, abrimos el LabView y en la
printf(usb_cdc_putc,string).- pantalla principal selecionaremos “Blank VI”
Combinando la función printf() del (instrumento virtual en blanco o nuevo)
compilador con la propiedad usb_cdc_putc,
podemos enviar a través del usb, strings con
formato.

Para este ejemplo, se utiliza un bucle


while para detectar el cambio en el botón, y
cuando sucede este se envía un carácter
predefinido:
Vamos a trabajar primero en el “front
while (TRUE) { panel” (panel frontal), que es la parte visual
…. del LabView, en este panel podemos agregar
if (input_STATE(PIN_A5)==0) { todos los controles que necesitamos para
delay_ms(500); nuestra aplicación en particular, como cajas
printf(usb_cdc_putc,"5\r"); de texto, graficas, leds, formas, etc.
}
Todas estas herramientas visuales las
Si el estado del push-button es “0” podemos encontrar en la “paleta de
(presionado, ya que esta con resistencia de

Jonatan Yam Cabrera. Página 6


controles”, la cuál la podemos abrir desde el pueden ser enteros con o sin signo, de punto
menú “ver”. flotante, etc.
Agregar 2 de estos controles a los cuales
llamaremos: Baudios y Bits de datos.

Vamos a agregar al panel frontal los


siguientes elementos de la paleta de
controles, basta con hace un click sobre el
elemento en la paleta y luego hacer un click
sobre el panel frontal. Realicemos esto para
los siguientes elementos.
A cada control agregado al panel frontal,
Visa Resource Name.- Este control nos va le indicaremos el tipo de dato que este
a permitir seleccionar y detectar los puertos control va a manejar. Con el botón derecho
COM disponibles en el sistema. sobre el elemento para ver el menú
contextual seleccionamos: representation y
U16 para bits de datos y U32 para baudios.

Text Ring: Nos permite seleccionar un


Numeric Control.- Este tipo de control
valor predeterminado en texto el cuál será
permite ingresar datos numéricos en sus
remplazado por un dato numérico.
diferentes formatos a nuestro programa,

Jonatan Yam Cabrera. Página 7


Agregar controles de este tipo y llamarlos, siguientes datos: None, Odd, Even, Mark y
Paridad, Bits de parada y Control de flujo. Space.
Para ingresar datos se puede hacer doble-
click sobre la casilla “ítems” o con el botón
“Insert”, al tener marcada la casilla de
“Sequential Values” los valores de cada
elemento se establecerán de manera
automática empezando de 0 e
incrementándose como se muestra en la
figura.

De forma similar como se estableció el


tipo de valor para los controles numéricos,
vamos a establecer los valores para el
control ring. Haciendo click con el botón
derecho del mouse sobre elemento que
renombramos como “Paridad” desplegamos
el menú contextual; seleccionamos Edit
Items.

Para los dos controles “ring” restantes,


realizar el mismo proceso, pero agregando
los siguientes elementos.

Bits de parada.- Para este control no


utilizaremos valores secuenciales por lo cuál
se tiene que desmarcar la casilla “Secuential
Values” y agregar estos datos:

En la ventana de elementos marcar la


casilla de “Sequential Values” e ingresar los Item Value
1.0 10

Jonatan Yam Cabrera. Página 8


1.5 15
2.0 20

Control de flujo.- Para este control


tampoco usaremos valores secuenciales por
lo cual se necesita desmarcar la casilla antes
mencionada y agregar los datos siguientes:

Item Value
String indicator.- Con esta herramientra
None 0
podremos desplegar texto en la interface de
XON/XOFF 1
nuestro programa
RTS/CTS 2
DTR/DSR 4

Para los tres controles “ring” seleccionar


U16 como tipo de representación.

Por último se recomienda ordenar todos


los elementos agregados al panel frontal de
la siguiente forma:

String control.- Mediante este control


podremos ingresar cadenas de texto a
nuestro programa, en este ejemplo en
particular lo utilizaremos para enviar un
carácter al microcontrolador.

Jonatan Yam Cabrera. Página 9


Ahora vamos a trabajar la programación
de nuestra interface, para esto nos
cambiamos al diagrama de bloques con las
teclas de acceso rápido CTRL+E o en la barra
de menus Window>Show Block Diagram.

Ahora vamos a agregar los cuatro bloques


Y en el diagrama a bloques podremos ver
de conexión VISA mencionados
los elementos agregados en el panel frontal,
anteriormente. Para ver la paleta de
quizá de una manera desordenada, para este
funciones vamos al menú View>Functions
ejemplo ordenarlos como se muestra en la
Palette.
figura.

Ordenamos los elementos de la siguiente


manera:

En caso de ver estos iconos:

podemos cambiar a la vista alternativa


haciendo click con el botón derecho del Para recibir caracteres o cadenas, la
mouse y en el menú contextual desmarcar función de “Read” necesita saber cuántos
“View as icon”: caracteres va a leer, para esto existen los
nodos de propiedades en el LabView, pero

Jonatan Yam Cabrera. Página 10


en este ejemplo lo realizaremos de la forma Al fin de todo este proceso debemos
mas simple, con una constante numérica con tener nuestro diagrama de bloques de la
el valor de datos a recibir, que será uno. siguiente manera:
Para agregar la constante se realiza el
mismo proceso que para agregar elementos
en el panel frontal, pero con las
herramientas de la paleta de funciones
(functions pallete).

Al posicionar el puntero del mouse sobre


una función, esta nos va a desplegar las
terminales para sus posibles entradas y
salidas de datos, en el caso de configuración
de puerto serial VISA nos despliega estas
terminales:

Si posicionamos el puntero sobre el punto


de color de cada terminal, el puntero cambia
a un carrete de cable y nos despliega el
nombre de la terminal. Si hacemos un click
sobre este con el carrete, se conectara un
hilo el cuál podremos enlazar a otras
funciones o controles.

Para evitar el valor por defecto de la


constante, hacemos doble-click sobre esta
introducimos el valor “1”. Modificar su
representación (tipo de dato) a U32

Jonatan Yam Cabrera. Página 11


Entonces vamos a proceder a enlazar
cada herramienta agregada en el panel
frontal a las funciones VISA, teniendo mucho
cuidado de conectar cada elemento
adecuadamente a la terminal que pertenece.
Las siguiente imagen presenta el cableado
a realizar y obtener al fin del proceso:
Como se aprecia en la imagen el ícono no
presenta ningún aviso de advertencia de
error de conexión.

Con esta aplicación podremos seleccionar


y configurar un puerto COM (Serie), asi
como enviar y recibir un carácter de
LabView al microcontrolador a través del
mismo.

4. Realizando la conexión.

Una vez descargado el .hex al micro y la


aplicación de LabView lista, seguiremos los
siguientes pasos para establecer la conexión
serial entre el PIC y LabView: En el administrador de dispositivos
podemos observar la categoría Puertos COM
1.- Conectar el micro a la PC y en y LPT nuestro dispositivo asignado con el
“Dispositivos e Impresoras” (para Windows nombre de COM4. El número de COM puede
7) o en “Administrador de dispositivos” variar dependiendo del conector usb de la PC
(Windows 7 y anteriores), identificar si el donde se haya hecho la conexión.
dispositivo ha sido reconocido y enumerado
satisfactoriamente.

Jonatan Yam Cabrera. Página 12


2.- Configurar los parámetros de
operación del puerto COM virtual en
LabView. Esto lo haremos con la interface
gráfica creada previamente. Los siguientes
valores son parámetros estándar y más
comunes para el puerto serial, sin embargo Para correr el programa utilizaremos los
se puede experimentar con estas siguientes controles en la barra de
configuraciones. herramientas.

Esta barra provee dos controles para


correr los programas, el primero que es
correr el programa una sola vez y correr el
programa continuamente. Para nuestra
aplicación utilizaremos el de correr una sola
vez.

3.- Click en “Run” (Correr una sola vez), el


programa entonces enviará el carácter “1” al
PIC y pasará a esperar el dato a recibir por
parte del PIC, el programa detendrá su flujo
El control VISA RESOURCE NAME, nos va a
hasta recibir el dato o hasta agotar el
desplegar todos los dispositivos COM
“timeout” de la función VISA de leer datos
enumerados en la PC, por tal motivo es
del puerto serial. Para que el PIC envíe el
indispensable saber el número asignado al
dato presionamos el push-button colocado
puerto por la PC para elegir la opción
en el puerto A5 como se explico
apropiada.
anteriormente.

En el cajón de texto escribiremos el


En la indicador de texto “Recibir”
número “1”, este será el que se envíe al PIC y
podemos ver el dato que envío el
realice la operación de prender o apagar el
microcontrolador.
LED.

Jonatan Yam Cabrera. Página 13


Y con esto habremos realizado la
conexión CDC en su forma más simple
mediante LabView y el microcontrolador
PIC18F2550.

Es muy recomendable experimentar con


lo que se ocurra al momento de la conexión
para irse familiarizando con los errores con
los que nos podríamos topar, así como para
ir implementando funciones más complejas
para aplicaciones propias.

Jonatan Yam Cabrera. Página 14


Esta obra está bajo una licencia Attribution-NonCommercial-ShareAlike 3.0 Unported de
Creative Commons. Para ver una copia de esta licencia, visite
http://creativecommons.org/licenses/by-nc-sa/3.0/ o envie una carta a Creative Commons, 171
Second Street, Suite 300, San Francisco, California 94105, USA.

Jonatan Yam Cabrera. Página 15

Das könnte Ihnen auch gefallen