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

Diseo

Integrado

9 Desarrollo del Software

9.1 Proceso de Desarrollo.

El proceso de desarrollo de una aplicacin basada en microcontroladores se


compone de las siguientes etapas principales, las cuales se explican en ms detalle
en las siguientes sub-secciones.
Desarrollo de software: Esta etapa corresponde a la escritura y
compilacin/ensamblaje del programa que regir las acciones del microcontrolador y
los sistemas perifricos conectados a este.
Programacin del microcontrolador: En esta etapa el cdigo de mquina
correspondiente al programa desarrollado en la etapa anterior se descarga en la
memoria del microcontrolador.
Prueba y verificacin: Por ltimo, el microcontrolador debe conectarse al
circuito base y someterse a pruebas para verificar el funcionamiento correcto del
programa.

9.1.1 Desarrollo del software.


En esta etapa consiste en escribir y compilar/ensamblar el programa que
determinar las acciones del microcontrolador y su funcionamiento. Existen distintas
maneras de desarrollar el programa, dependiendo del lenguaje inicial que se utiliza
para escribir el programa:
Lenguaje Ensamblador - Lenguaje de Mquina/Cdigo Objeto
(.asm) ensamblador (.hex, .o, .bin, .coff)
Lenguaje de Alto Nivel - Lenguaje Assembly - Lenguaje de Mquina/Cdigo
Objeto
(.c, .cpp) compilador (.asm) ensamblador (.hex, .o, .bin, .coff)
En la Fig. 85 se muestran las dos alternativas tpicas que tiene el desarrollador
para generar el cdigo de mquina que es entendido por el microcontrolador.

Universidad de Sevilla

Pg. 111

CAPITULO 9

Diseo
Integrado

Desarrollo Software

Fig. 85 Alternativas para generar el cdigo mquina

El mtodo bsico es escribir el programa en lenguaje de Ensamblador en un


archivo de texto con extensin .asm y luego utilizar un programa ensamblador para
generar un archivo en lenguaje de mquina, tambin denominado cdigo de mquina
o cdigo objeto (object code), compuesto por instrucciones en cdigo binario que son
directamente entendidas por la CPU del microcontrolador. El ensamblador
normalmente genera un archivo con extensin .hex (por hexadecimal), .o (por objeto),
.bin (por binario), .coff (common object file format) dependiendo del ensamblador. El
lenguaje Ensamblador se compone de instrucciones mnemnicas de bajo nivel, es
decir que estn ligadas a las carcter msticas del microcontrolador y con un numero
mnimo o nulo de abstracciones. Al carecer de abstracciones, el lenguaje Ensamblador
es ms difcil de emplear, requiere experiencia y un mayor tiempo de desarrollo. La
ventaja es que el cdigo de mquina generado a partir de un programa escrito en
lenguaje de mquina es por lo general ms eficiente, ya que el programa se desarrolla
en un nivel cercano a las caractersticas del hardware.
Otra alternativa es emplear un lenguaje de alto nivel con una mayor cantidad
de abstracciones, la cuales son ms fciles de usar y reducen los tiempos de
desarrollo. Tal vez los lenguajes de alto nivel ms comunes para la programacin de
controladores es el C y C++, pero tambin existen otros lenguajes variantes del BASIC
y el Pascal. Una vez escrito el programa en el lenguaje de alto nivel, ser necesario
emplear un compilador para traducirlo, ya sea a lenguaje de Ensamblador o
directamente a lenguaje de mquina. Es importante considerar que el cdigo de
Ensamblador generado por los compiladores tiende a ser ms largo e ineficiente que
aquel directamente desarrollado en lenguaje de Ensamblador. Esta desventaja puede
ser critica en ciertas aplicaciones que requieren un programas compactos y de una
alta velocidad de ejecucin. Un vez que el compilador ha generado el cdigo de
Ensamblador (.asm), ser necesario utilizar un ensamblador para generar el cdigo
binario de mquina.

Pg. 112

Universidad de Sevilla

CAPITULO 9
Desarrollo Software

Diseo
Integrado

9.1.2 Programacin del microcontrolador.


Este proceso corresponde a utilizar un programa en el PC que toma el cdigo
ensamblado (.hex, .o, .bin, .coff) para el microcontrolador especfico, y lo enva
mediante algn puerto (serial, paralelo, USB, etc.) a un dispositivo que lo escribe en la
memoria del microcontrolador. Se acostumbra denominar programador tanto al
software como al hardware involucrados para este propsito, lo cual puede prestarse a
confusin. El software programador a veces recibe tambin el nombre de downloader,
ya que su propsito es descargar o transferir desde el PC al microcontrolador el cdigo
ensamblado.
En la Fig. 86 se muestran las componentes involucradas en el proceso de
programacin del microcontrolador. Es importante mencionar que no deben
confundirse los trminos desarrollo o programacin del software y programacin del
microcontrolador, el primero se refiere a escribir el programa, mientras que el segundo
se refiere transferir el cdigo de mquina a la memoria del microcontrolador.

Fig. 86 Programacin del microcontrolador.

9.1.3 Prueba y verificacin.


Una vez programado el microcontrolador, se puede instalar en el circuito final
para comprobar su adecuado funcionamiento. Existen herramientas de software que
permiten simular el comportamiento de un microcontrolador, muy tiles cuando el
programa alcanza cierta complejidad para resolver problemas en un circuito real.

Universidad de Sevilla

Pg. 113

CAPITULO 9

Diseo
Integrado

Desarrollo Software

9.2 Ciclo de diseo


En la Fig. 87 vemos el ciclo de diseo con el que vamos a trabajar, desde el
diseo hasta el anlisis del cdigo depurado, siendo todo este proceso un ciclo que
repetiremos hasta conseguir el resultado final.
CICLO DE DISEO:

Fig. 87 Ciclo de diseo

La primera fase es la edicin del programa fuente, utilizando para ello el


editor MPLAB. Si pretendemos desarrollar el cdigo de la aplicacin en lenguaje de
alto nivel, debeos utilizar un compilador como PCW de CCS.
Independientemente de que lenguaje utilizaremos para la construccin del
programa fuente, ser necesario convertir dicho programa en lenguaje mquina que
es el empleado por los microcontroladores PIC, utilizando el ensamblador MPASM que
vienen incluido en el entorno de desarrollo integrado MPLAB IDE
Durante la fase de construccin, detectaremos los errores de sintaxis que se
hayan podido cometer en la edicin del programa fuente, ya que automticamente, el
ensamblador o el compilador que estemos usando nos remarcar todas aquellas
lneas que no sea capaz de traducir a cdigo mquina. Una vez solucionados los
problemas obtendremos el cdigo mquina o hexadecimal, es decir, un archivo con
extensin .HEX. El resto de los archivos suelen ser archivos auxiliares con informacin
necesaria para la traduccin, empleados por la herramienta de depuracin, emulacin
o simulacin.
Concluida la fase de construccin del proyecto llega la fase de construccin
del proyecto, comprobando que el cdigo generado tiene el funcionamiento deseado,
entrando en la fase de depuracin del programa.

Pg. 114

Universidad de Sevilla

CAPITULO 9
Desarrollo Software

Diseo
Integrado

Una vez tengamos el programa completamente construido y depurado,


entramos en la fase final, de volcado sobre la memoria del PIC, terminando entonces
la fase ltima de programacin.

9.3 Manejo de las Aplicaciones.

9.3.1 Caractersticas de memoria e instrucciones para comenzar a


programar
Con los ejemplos de las lecciones que Microchip proporciona de forma gratuita
en su pgina web, podemos comenzar a entender el funcionamiento del dispositivo.
Como ya se ha comentado en la introduccin de la memoria, los
microprocesadores poseen una distribucin de la memoria que separa las aplicaciones
de datos de las funciones de instruccin. Vemos estos aspectos de forma detallada:
ORGANIZACIN DE LA MEMORIA:
Los microprocesadores se disean de forma que encontramos separada la
memoria de datos de la memoria de programas, lo que permite una rpida
ejecucin ya que tendremos buses de datos y direcciones separados.
La Memoria de Datos esta formada con file registers. Las instrucciones que
necesitan acceder a estos datos utilizan 12 bits, por lo que slo pueden direccional
4096 posiciones. Estos file registers son agrupados en pginas de forma que
podemos acceder a distintas pginas con dos bits ms significativos del Registro
BSR<3:0>. Para cargar un valor literal en el registro BSR se utiliza la instruccin
MOVLB.
En la memoria de datos existen posiciones que actan como Funciones
Especiales de Registro (SFRs), las cuales hacen posible la comunicacin del
programa con los perifricos, actuando como registros de control de la CPU.
Comienzan desde la posicin superior del Banco 15 y extendindose hacia las
direcciones inferiores. Adems, en la memoria de datos existen posiciones que
estn reservadas para el Registro de Propsito General (GPRs), donde se pueden
almacenar las variables del programa. Los GPR comienzan desde la direccin
inferior (0x000) del Banco 0 y se expansionan hacia direcciones superiores.
Para la programacin y el uso del USB con el PIC18F2550 hemos de tener en
cuenta que los bancos de datos 4 y hasta el 7 sern los que asignemos como
buffer para la comunicacin con el USB. Este rea ser compartida entre el
microcontrolador y el Motor de Interfaz USB Sucesivo (SIE) y ser usada para
transferir datos directamente entre los dos.

Universidad de Sevilla

Pg. 115

CAPITULO 9

Diseo
Integrado

Desarrollo Software

La Memoria de Programa es de tipo Flash y contempla un espacio de 2MB


direccionable por byte a partir del Contador de Programa (PC) de 21 bites. Cada
instruccin tiene una longitud de 16 bit y en consecuencia su direccin siempre
debe de ser par.
La memoria Flash puede ser escrita, leda y borrada durante el
funcionamiento del dispositivo, siempre que sea correcta a VDD.

Fig. 88 Memoria de Programa

Fig. 89 Memoria de Datos.

Pg. 116

Universidad de Sevilla

CAPITULO 9
Desarrollo Software

Diseo
Integrado

FORMATO DE LAS INSTRUCCIONES


Todas las instrucciones se pueden ajustar a uno de los tres formatos que
especificamos a continuacin:
1. Byte Instructions: Constituida por 7 bits para direcciones de datos, 1 bit
de destino y 6 bit de cdigo. Los 7 bit de la direccin del dato, junto con
los bits RP0 y RP1 del Registro de Estado forman un direccionamiento
de 9 bits para el dato con el que se pretende trabajar. Los otros datos
con los que realizar la operacin se van a encontrar en el Registro de
Trabajo (llamado W o W reg). Despus de realizar la operacin, el bit de
destino especifica donde debemos almacenar el resultado, si en el
registro de trabajo o bien en el registro original del dato.
2. Bit Instruction: Opera sobre un bit especifico dentro del registro. Formada
por 7 bits para la direccin del dato, 3 bit numricos y los restantes 4 bit
para el cdigo de la instruccin.
3. Literal Instructions: Contienen el valor del dato dentro de la propia
instruccin. Igual que antes el Registro de Trabajo nos indicar el valor
del otro dato necesario en la instruccin.
Existen adems 3 formas de declarar una variable:
#define Length 0x00
Length equ 0x00
cblock 0x00
Length
Width
Area:2
Girth
endc

; Localizamos la variable en una direccin


; Damos un valor inicial a la variable
; Comienza un bloque de variables
; Se almacena en la direccin 0x00
; Se guarda en 0x01
; Ocupa dos bytes, 0x02 y 0x03
; Se queda en la posicin 0x04

9.3.2 Primeros pasos en la programacin


La tarea aparentemente directa de simplemente conectar un LED a uno de los
pines de salida del PIC para hacer encender una luz nos aporta los siguientes
conocimientos:

La capacidad de usar un ambiente de desarrollo; para cambiar el


cdigo a lenguaje ensamblador conocido por el PIC
La capacidad de usar correctamente el programador del PIC para
cargar el cdigo en el chip
Colocar el PIC en el modo correcto de operacin
La escritura del cdigo que pondr en el pin de salida el nivel de seal
adecuado, alto o bajo, para hacer encender al LED.

Universidad de Sevilla

Pg. 117

CAPITULO 9

Diseo
Integrado

Desarrollo Software

Si conseguimos encender el LED, entonces sabremos que tenemos un


entorno de trabajo, programador, ensamblador... que comprende la arquitectura y
las instrucciones del PIC y que sern suficientes para comenzar a trabajar.
En las lneas siguientes podemos ver el cdigo de nuestro primer programa.
;******************************************************************
;
; PROYECTO FIN DE CARRERA
; PLACA DETECTOR DE MOVIMIENTO
; ENCENDER LED 1
;
; Realizado: MARTA ARENAS MAS
;
Fecha: 22-Mayo-2008
;
Versin: v1
;
;******************************************************************
;
; Ficheros Utilizados: P18F2550.INC
;
18F2550.LKR
;
;******************************************************************
LIST P=18F2550, F=INHX32
#include <P18F2550.INC>

; Procesador utilizado
; Incluir el fichero con smbolos y etiquetas

;******************************************************************
ORG
0x00
; Inicio en el Vector de Reset
goto INICIO
; Va a la primera instruccin del programa
ORG
0x18
; Salta los Vectores de Interrupcin
;******************************************************************
; Comienza el programa
INICIO
movlb
bcf
bsf
goto
end

B'00001111'
TRISB,7
PORTB,7
$

;
;
;
;

Selecciono Registro del Banco 1


Configuro pin RB7 como Salida
Enciende led conectado a RB7 LED 1
espera ah

;******************************************************************
; Fin del programa
END

Antes de programar el PIC con el cdigo anterior es necesario informar al


MPLAB que desactive el Watchdog y de esta manera evitar que se produzca un
reset del PIC y tambin hay que indicarle el tipo de oscilador que estamos utilizando,
en nuestro caso un oscilador HS+PLL.
Para configurar estos bits tenemos que ir al men de Configura y en la
pestaa de Configure bits podemos configurarlos.

Pg. 118

Universidad de Sevilla

CAPITULO 9
Desarrollo Software

Diseo
Integrado

Este primer programa es mejorable tanto en extensin como en el uso de


instrucciones, pero como ya dijimos anteriormente su funcin era simplemente para
aprender a programar con el software MPLAB y saber utilizar diferentes instrucciones
en assembler, por eso no cremos necesario mejorarlo ya que no aportaba nada a
nuestro proyecto.

9.4 Conexin PC - USB

USB es un bus punto a punto, con inicio en el HOST y destino en un dispositivo


o en HUB. El protocolo de comunicacin se basa en el paso de testigo, donde el
HOST proporciona el testigo al dispositivo seleccionado para la comunicacin.
La conexin del USB pasa por la definicin de un conjunto de descriptores que
defina el comportamiento del dispositivo que se pretende conectar y la utilizacin de
un driver que configure el PC la comunicacin establecida con ese dispositivo.
Como ya hemos comentado existen varias clases de descriptotes. Los que
vamos a destacar a la hora de definir y configurar un nuevo dispositivo USB son los
descriptotes de dispositivo y de interfaz que contienen tres campos especialmente
relevantes para su clasificacin, el campo de Clase, subclase y protocolo. Estos son
los campos usados por el sistema operativo para asociar un dispositivo o una interfaz
a un driver genrico.
Una clase USB, como ya hemos indicado, es una agrupacin de dispositivos
de caractersticas comunes, es decir, que utilizan una misma forma de comunicarse
con el entorno. La clase de dispositivo permite conocer la forma en que la interfaz se
comunica con el sistema, el cual puede localizar el driver que puede controlar la
conectividad entre interfaz y el sistema. [11]
USB slo permite al driver comunicarse con el perifrico a travs de las
tuberas (pipes) establecidas entre el sistema USB y los Endpoints del perifrico. Los
tipos de transferencia a travs de las pipes dependen de los Enpoints y pueden ser:
Bulk, Control, Interrupt e Isocronous.
Estos enlaces, que definen el ancho de banda, el tipo de transferencia, la
direccin, el flujo de datos y el tamao del paquete de datos, se implementan en la
inicializacin del USB. Un Endpoint es un buffer dentro del dispositivo o el perifrico
donde se almacenan paquetes de informacin. Todos los dispositivos deben admitir al
EP0, el cual recibe el control y las peticiones de estado durante la enumeracin del
dispositivo. Cuando se conecta un dispositivo al HOST se produce la enumeracin,
asignando la direccin y permitiendo la transferencia de datos.
En el sistema que disearemos existir una librera ****.h en la que se
configura el dispositivo que vamos a emplear, es decir, se inicializan los descriptores
necesarios para la configuracin del USB.

Universidad de Sevilla

Pg. 119

CAPITULO 9

Diseo
Integrado

Desarrollo Software

En la librera de cabecera es necesario indicar:


1. En el descriptor de dispositivo existe un campo (bDeviceClass) que indica
si el dispositivo pertenece a una clase USB definida. En este caso, el
campo presentar un valor entre 01h y FEh dependiendo de la clase a la
que pertenezca. El valor FFh significa que la clase es especfica de un
vendedor y est definida por este.
Algunos dispositivos especifican la clase en el descriptor de interface, para
este tipo de dispositivos este campo ser 00h y en el campo
bInterfaceClass del descriptor de interfaz se indicar la clase a la que
pertenece. No todos los dispositivos pertenecen a una clase.

2. Si el perifrico no pertenece a una clase ya definida o se le quiere asignar


un driver especfico (no genrico), los campos de clase, subclase y
protocolo del descriptor de dispositivo o interfaz deben de valer FFh (clase
especfica de un vendedor) y en los campos del descriptor de dispositivo
idVendor y idProduct se debe indicar tanto el identificador de vendedor y
como el del producto. Cada fabricante tiene un identificador de vendedor
nico que debe incluir en el descriptor de dispositivo de sus productos. El
identificador de producto lo decide el fabricante para identificar a los
dispositivos. Estos dos valores se deben incluir tambin en un fichero INF
que el sistema operativo utilizar para decidir que driver debe asignar al
perifrico en funcin de estos dos valores.

Cuando el sistema operativo enumera un nuevo dispositivo USB, el


Administrador de Dispositivos compara los datos de todos los ficheros INF con la
informacin de los descriptores obtenida del dispositivo durante la enumeracin. Para
evitar tener que leer todos los INF cada vez que se detecta un nuevo dispositivo,
Windows tiene una base de datos de informacin sobre drivers con informacin
obtenida de los ficheros INF. [10]
El perifrico que se va a desarrollar no pertenece a ninguna clase genrica, as
que habr que indicar el driver que se le quiere asignar. El driver que se utilizar ser
un driver USB de propsito general para Windows suministrado por Microchip
(mchpusb.sys). As mismo, Microchip proporciona un identificador de vendedor
(0x04D8) que puede ser utilizado en productos desarrollados con microcontroladores
PIC.
Respecto a los puntos finales, adems del EP0 (que siempre se utiliza), se
necesitar otro ms para pasar los datos del perifrico al Host. La direccin de los
datos ser de entrada y el tipo de transferencia que utilizado ser tipo bulk, masiva.
Utilizaremos el EP1, que es bidireccional y tiene tres modos de comunicacin, bulk,
Interrupcin o iscrona.

Pg. 120

Universidad de Sevilla

CAPITULO 9
Desarrollo Software

Diseo
Integrado

9.5 Creacin del fichero INF.


Cuando el sistema operativo detecta un nuevo perifrico USB, intenta
determinar qu driver debe utilizar para comunicarse con el dispositivo y una vez
determinado, cargar el driver seleccionado. Esto lo lleva a cabo el Administrador de
Dispositivos, que utiliza instaladores de clase y dispositivo y archivos INF para
encontrar el driver adecuado para cada dispositivo.
El Administrador de Dispositivos adems de ser el responsable de instalar,
configurar y desinstalar dispositivos, tambin se encarga de aadir informacin sobre
cada dispositivo en el registro del sistema, el cual contiene informacin sobre el
hardware y el software instalados en el sistema.
Los instaladores de clase y dispositivo son DLLs. Windows tiene una serie de
instaladores por defecto que el Administrador de Dispositivos utiliza para localizar y
cargar drivers para dispositivos pertenecientes a clases soportadas por el sistema
operativo.
El archivo INF es un fichero de texto que contiene informacin que ayuda a
Windows a identificar el dispositivo. Este archivo indica al sistema operativo que
drivers debe utilizar y que informacin debe almacenar en el registro. [10]
La informacin en un archivo INF est dividida en secciones. Cada seccin
puede ser identificada porque su nombre est entre corchetes. Las principales
secciones son:
Versin: Especifica el sistema operativo para el que est destinado el fichero INF.
Para dispositivos que utilizan WDM (Windows Driver Model) drivers, el valor
puede ser $Windows 98$, $Windows NT$ o $Chicago$, independientemente del
sistema operativo que est instalado en el ordenador. En esta seccin se indica
tambin el nombre de la clase de los dispositivos instalados con este fichero as
como un identificador de clase que es utilizado por el registro del sistema para
identificar a los dispositivos pertenecientes a esta clase.
ClassInstall: En esta seccin se indica si se ha de instalar una nueva clase. El
Administrador de Dispositivos nicamente procesa la seccin si una clase de
dispositivo an no est instalada en el sistema. Aqu ser donde indicaremos el
icono, el nombre y la descripcin de la clase as como el nombre del archivo DLL
(tempusbci.dll) que instalar la nueva clase en el Administrador de Dispositivos.
Manufacturer: Esta seccin contiene el identificador de vendedor y de producto,
que en nuestro caso se corresponde con (USB\ VID_04D8 & PID_0011). Cuando
el Administrador de Dispositivo encuentra una coincidencia entre estos valores y
los identificadores obtenidos del dispositivo durante la enumeracin, sabe que ha
encontrado el archivo INF correcto.
DestinationDirs: Indica el directorio o directorios donde se copiarn los ficheros.
Strings: Define las cadenas referenciadas en las otras secciones.

Universidad de Sevilla

Pg. 121

CAPITULO 9

Diseo
Integrado

Desarrollo Software

9.6 Creacin de una nueva clase.


El ltimo paso ha sido la edicin del Driver suministrado por Microchip de tal
forma que apareciera en el Administrador de Dispositivos una nueva clase con un
icono personalizado.
El perifrico desarrollado no pertenece a ninguna de las clases USB definidas,
as que lo que debemos crear una nueva clase que aparezca en el Administrador de
Dispositivos con un icono personalizado. Para esto, ha sido necesario crear una DLL
que exporte ese icono. Se necesita para ello el DDK (Driver Development Kit
Windows_Server_2003_sp1_ddk) de Microsoft:. Esta herramienta incluye muchos
ejemplos y se ha utilizado uno de ellos para crear la DLL. El ejemplo utilizado se llama
Toaster y es un ejemplo genrico sencillo con cdigo comentado que puede ser usado
para aprender a escribir drivers, filtros, ficheros INF o cmo instalar una clase o un
paquete. La direccin en la que encontramos este fichero, una vez instalado el DDK
de la pgina principal de Micrsoft, es la siguiente:
C:\WINDDK\3790.1830\src\general\toaster\classinstaller.
Incluye varios directorios que contienen todos estos ficheros, aunque el nico
interesante para nosotros es el directorio classinstaller. Dentro de este directorio
sustituiremos el icono del ejemplo por el que nosotros vayamos a utilizar, en este caso
el icono se llama icon.ico, y el fichero tostrcls.def lo sustituiremos por otro llamado
picusbci.def que contendr el siguiente cdigo:
LIBRARY PICUSBCI
EXPORTS
PicUSBClassInstaller

El resto de ficheros del directorio no hace falta sustituirlos pero si que es


necesario realizar algunos cambios en ellos (bsicamente es cambiar el nombre de la
clase utilizada en el ejemplo por el que utilizaremos nosotros y que es
PicUSBClassInstaller). De esta forma, en el fichero sources habr que poner la lnea
TARGETNAME=picusbci, y en classinst.c habr que sustituir el nombre, quedando de
la siguiente forma:
DWORD CALLBACK
PicUSBClassInstaller(
IN DI_FUNCTION
InstallFunction,
IN HDEVINFO
DeviceInfoSet,
IN PSP_DEVINFO_DATA
DeviceInfoData
)

OPTIONAL

En la plantilla de recursos classinst.rc se tiene que cambiar por una parte el


icono que se utilizar y por otra, en la informacin de la versin, se incluye informacin
sobre la descripcin de la clase, el nombre del fabricante y el nombre del fichero
resultante encargado de realizar la instalacin de la clase en el Administrador de
Dispositivos (archivo DLL).

Pg. 122

Universidad de Sevilla

CAPITULO 9
Desarrollo Software

Diseo
Integrado

Cuando se han realizado todos estos cambios se procede a crear el archivo


DLL que necesitamos. Para ello en la lnea de comandos del DDK se ejecuta build cZ
toaster. Con este comando se crearn todos los ficheros .sys, .exe y .dll del proyecto
Toaster, incluyendo el archivo DLL necesario para instalar la clase y que se llama
picusbci.dll. De todos los ficheros creados este ser el nico que nos servir y
permitir que al conectar el perifrico al ordenador.
Debemos entonces modificar el archivo .inf suministrado por Micrchip, para que
lea la dll creada por la DDK. El driver en s lo suministra Microchip y no debemos
modificarlo, aunque podra estudiarse, ya que existen limitaciones de velocidad en el
driver que proporciona y no acepta la velocidad completa de los dispositivos USB, sin
embargo es un estudio complejo que no es necesario en el proyecto.

9.7 Resultado de la comunicacin USB - PC


Cuando se conecta el dispositivo al ordenador, Windows muestra el mensaje
Nuevo Hardware Encontrado. Si el perifrico nunca ha sido enumerado en el sistema,
el sistema operativo necesita localizar un driver para l. Al ser la primera vez que se
conecta el dispositivo y no ser de una clase genrica, Windows no encontrar un
archivo INF que pueda utilizar para asignarle un driver y lanzar el Asistente para
Agregar Nuevo Hardware donde se puede indicar la localizacin del archivo INF
necesario para la instalacin del perifrico.
Una vez localizado, se carga el driver indicado, se aade el perifrico en el
Administrador de Dispositivos y se indica al usuario que la instalacin del dispositivo
ha finalizado de forma correcta. En el Administrador de Dispositivos se puede ver
tambin la descripcin del dispositivo y el fabricante, obtenidos del archivo INF.

Fig. 90 Nuevo Hardware USB funcionando correctamente.

Universidad de Sevilla

Pg. 123

CAPITULO 9

Diseo
Integrado

Desarrollo Software

Durante esta operacin, se ha copiado el fichero INF (PicUSB.inf) en el


directorio \windows\inf, el driver suministrado por Microchip (mchpusb.sys) en
\windows\system32\drivers
y
el
instalador
de
clase
(picusbci.dll)
en
\windows\system32, de forma que la prxima vez que se conecte el dispositivo, el
ordenador lo reconocer sin necesidad de indicar ningn dato.

9.8 Migracin RS232 a USB


La interfaz RS232 est desapareciendo de los ordenadores personales y esto
supone un problema, ya que muchas de las aplicaciones que se realizan con
microcontroladores utilizan este bus para la comunicacin con el PC. La solucin ideal
es migrar todo el protocolo de comunicacin a tecnologa USB, sin embargo, esto lleva
consigo el inconveniente de tener que redisear todo el software para que soporte un
nuevo tipo de transferencia de datos.
Para hacer la transicin de forma cmoda, lo ms conveniente es emular un
RS232 con el USB, con la ventaja de que el PC ver la comunicacin USB como una
conexin COM RS232 y no requerir cambios en el software existente.
Otra ventaja es que se utilizan drivers suministrados por Windows, como el
usbser.sys el ccport.sys, fcilmente accesibles.
Para realizar la comunicacin de esta forma debemos acudir a la definicin de
clase de dispositivo USB, campo del descriptor de dispositivo. Microchip estable la
especificacin Clase de Dispositivo de Comunicacin (CDC) que define algunos
modelos de comunicacin, incluyendo la comunicacin serie, que se apoya en el driver
usbser.sys de Windows.
Para la especificacin CDC USB se necesitan dos intefaces USB, primero la
interfaz Communication Class, utilizando Endpopint de entrada de Interrupcin y
despus la interfaz Data Class usando un Endpoint de Salida masiva de datos y un
Endppoint de Entrada masiva de datos. Esta interfaz es la utilizada para transferir
datos que normalmente deberan ser transmitidos por RS232.
El archivo necesario para definir la interfaz lo proporciona Microchip de forma
gratuita en su pgina web y es el llamado mchpcdc.inf, con el el PC ser capaz de
reconocer el dispositivo y asociarle le driver necesario para su configuracin, control y
manejo.
Tanto este fichero como el fichero de cabecera ****.h donde se definen la
interfaz que debe de adoptar el dispositivo son necesarios para la conexin del USB
CDC al ordenador. El resultado, una vez configurado el dispositivo y obtenido el
archivo. Inf y driver de la configuracin, tras pasar el asistente de Hardware de
Windows es el que se muestra a continuacin:

Pg. 124

Universidad de Sevilla

CAPITULO 9
Desarrollo Software

Diseo
Integrado

Fig. 91 Nuevo Hardware USB CDC funcionando correctamente

9.9 El Compilador y las libreras


El compilador utilizado para crear el programa e el PIC es el PCWH de la
empresa CCS, como ya hemos comentado.
La decisin de utilizar un compilador se realiz debido a las ventajas que
supone programar en lenguaje C, adems de incluir ayudas gracias al uso de libreras
con las que se facilita la tarea de programacin de la aplicacin, incorporando
funciones para el manejo de las aplicaciones como el USB, o el Convertidor A/D. Las
libreras imprescindibles para la generacin de la aplicacin son:

18F2550.h: Fichero de cabecera estndar para dispositivos


PIC18F2550. Librera con las direcciones de los pines del PIC 18F2550 y
la definicin de constantes esenciales para programar este controlador.

pic18_usb.h: Capa hardware de los dispositivos PIC18Fxx5x. Librera


que incluye las funciones y constantes necesarias para la comunicacin
USB con los microcontroladores de la familia 18Fxx5x.

usb.c: Manejador de peticiones USB estndar. Otra librera con ms


funciones generales sobre la comunicacin USB, maneja las
interrupciones USB y el USB Setup Requests en Endpoint 0.

Universidad de Sevilla

Pg. 125

CAPITULO 9

Diseo
Integrado

Desarrollo Software

usb.h: Librera con el prototipo de funciones, definiciones y variables


globales USB, utilizadas en el driver USB.

Usb_cdc.h: Driver que permite utilizar una clase de dispositivo CDC


USB, emulando un dispositivo RS232 y lo muestra como un Puerto COM
en Windows.

Para que la conversin A/D se realice de forma correcta es necesario aadir en


el fichero 18F2550.h la directiva #device PIC18F2550 ADC=10. Esta directiva indica el
nmero de bits que debe devolver la fucin read_adc(). Es necesario indicarlo ya que,
en caso contrario, slo nos devolvera los 8 bits ms significativos de la conversin
A/D (registro ADRESH). En la conversin A/D se utiliza justificacin a izquierdas, por lo
que, de los 10 bits resultantes de la conversin, los 8 ms significativos se
almacenarn en el registro ADRESH, mientras que los 2 bits menos significativos se
almacenarn en los bits ms significativos del registro ADRSL.

9.10 Funciones Utilizadas en la aplicacin del microcontrolador

Indicamos en este apartado algunas de las funciones que se utilizan en el


compilador CCS para manejar los recursos que nos ofrece el PIC

9.10.1

Manejo del Convertidor A/D

Las funciones ms importantes de configuracin y control del Convertidor A/D

Setup_port_A(AN0_TO_AN | VSS_VDD): Los pines 0,1 y2 del Puerto


A se establecen como entradas analgicas, y las tensiones de referencia
son las que entran en el PIC por los pines VDD y VSS.

Setup_adc(ADC_CLOCK_INTERNAL): Configuracin del uso de reloj


del PIC.

Set_adc_channel(1):
informacin.

Pg. 126

Indicarle

el

canal

donde

debe

recibir

la

Set_tris_A(0b00000111): Configuracin de la entrada del Puerto A


Read_adc(): Pasamos a la lectura del valor convertido, almacenndolo
en una variable que puede ser un entero.

Universidad de Sevilla

CAPITULO 9
Desarrollo Software

9.10.2

Diseo
Integrado

Manejo del USB

Las funciones ms importantes para el manejo del USB, son entre otras:

usb_init(): Inicializa el hardware USB. Espera en un bucle infinito hasta


que el perifrico USB es conectado al bus (aunque eso no significa que
haya sido enumerado por le PC). Habilita y utiliza la interrupcin USB.

usb_task(): Si se utiliza una deteccin de conexin para la inicializacin,


entonces se debe llamar peridicamente a esta funcin para controlar el
pin de deteccin de la conexin. Cuando el PIC es conectado o
desconectado del bus, esta funcin inicializa el perifric USB o resetea el
USB snack y el perifrico.

usb_enumerated(): Devuelve un TRUE si el dispositivo ha sido


enumerado por el PC y, en este caso, el dispositivo entra en modo de
operacin normal y puede enviar y recibir paquetes de datos.

usb_wait_for_enumerated(): Se encarga de mirar el estado de la


conexin, asegurando la correcta inicializacin del mismo.

usb_cdc_putc(c): Coloca un carcter en el buffer de transmisin; en el


caso de que este lleno esperar a que pueda enviarlo.

usb_put_packet(1, envia, 1, USB_DTS_TOOGGLE): Coloca paquetes


de bytes en el buffer para que el PC lo recoja. En este caso, enviamos el
paquete de tamao 1 byte utilizando la variable envia que es la que
contiene el byte a enviar.

9.11 Aplicacin del Microcontrolador.


El programa que se ejecutar en el microcontrolador tiene como objetivo el
envo de datos a travs del mdulo de comunicacin USB. Su funcionalidad ser
bastante intuitiva utilizando las funciones descritas anteriormente.
En primer lugar ser necesario establecer las palabras de configuracin del
dispositivo, sabiendo el modo en el que vamos a desarrollar la aplicacin y la clase de
dispositivo que usaremos en la comunicacin con el USB. Las opciones adecuadas:

Oscilador en modo HSPLL con los valores pre y post-escala adecuados para
obtener una frecuencia interna de 48MHz necesaria para la comunicacin con USB
de alta velocidad.
Habilitacin del regulador interno del mdulo USB
Deshabilitacin del Wachdog Timer que no vamos a utilizar en el proyecto

Universidad de Sevilla

Pg. 127

CAPITULO 9

Diseo
Integrado

Desarrollo Software

El programa, al conectar el perifrico al host y llegarle alimentacin, har que


se encienda un LED. Una vez alimentado se proceder a la inicializacin de los
registros USB, tras lo cual comenzar el proceso de enumeracin del dispositivo USB
por parte del host. Si este finaliza correctamente se apagar el LED que estaba
encendido y se encender un segundo LED, indicando que todo esta listo para
comenzar y esperando en esta situacin durante tres segundos, tiempo en el que
deberemos establecer la comunicacin con la aplicacin desarrollada en el PC para
recibir los datos ledos desde el dispositivo.
Tras la inicializacin del USB se configurarn los registros del convertidor A/D y
se comenzar con la lectura consecutiva de las seales analgicas procedentes de las
entradas AN0, AN1 y AN2 y el envo de los resultados obtenidos por el mdulo USB.
La conversin y el envo de datos se realiza insertando un retraso de 0.5ms entre cada
conversin y envo, lo que permite controlar que las conversiones y los envos se
realicen de forma ordenada.

LED ON
Inicializacin registros USB
Enumeracin

Dispositivo
Enumerado?
S
LED1 OFF / LED2 ON
Configuracin modulo A/D

Conversin A/D
Transmisin de datos

Fig. 92 Diagrama de Flujo del programa del Microcontrolador

Pg. 128

Universidad de Sevilla

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