Upload
others
View
9
Download
0
Embed Size (px)
Citation preview
PROYECTO FINAL
Implementación de Interface USB con microcontrolador PIC
Alumnos:
Isaac Aquino Aquino 98320177
Omar I. Avila Campos 98217031
Profesor:
Agustín Suárez Fernández
Febrero 2016.
UNIVERSIDAD AUTONOMA METROPOLITANA
CIENCIAS BASICAS E INGENIERIA
INGENIERIA EN ELECTRONICA
ii
RESUMEN
La necesidad de una actualización en la tarjeta de experimentación con microprocesador
80188 es necesaria, porque, si bien es cierto que es su época fue la base para la experimentación,
porque contaba con un sistema mínimo, el cual tenía los periféricos más utilizados en una tarjeta
madre y así poder realizar aplicaciones dedicadas.
El intercambio de información con el exterior se llevaba a cabo con un puerto serial, cosa
que dejo de ser funcional, pues los dispositivos actuales tienden a ser de más fácil conectividad a
las PC’s y de mayor simplicidad en su hardware. Es así que se tiene que implementar un circuito
con interfaz USB y la cual pueda ser compatible con dicha tarjeta, por todo esto, seleccionamos
un microcontrolador (PIC) de la empresa microchip.
iii Tabla de Contenidos
RESUMEN ..................................................................................................................................... ii
INTRODUCCIÓN ........................................................................................................................ 1
REQUERIMIENTOS PARA LA IMPLEMENTACIÓN DE USB ......................................... 2
ANTECEDENTES ........................................................................................................................ 2
EL ESTÁNDAR RS-232C ............................................................................................................ 3
EL PUERTO SERIE EN LA PC .................................................................................................... 5
1. ESPECIFICACIONES USB: ...................................................................................................... 7
1.1 Topología Bus ...................................................................................................................... 7
1.1.1 USB Host .................................................................................................................... 8
1.1.2 USB Devices ............................................................................................................... 8
2. INTERFAZ FÍSICA ............................................................................................................. 9
2.1 Eléctrico ......................................................................................................................... 9
2.2 Control de consumo ...................................................................................................... 9
3. PROTOCOLO DE BUS ........................................................................................................... 10
3.1. Capa de protocolo ....................................................................................................... 11
3.2. Formato de los campos ............................................................................................... 12
3.2.1. Campo identificador de paquete (PID) ............................................................. 13
3.2.2. Campo dirección (DIR) ...................................................................................... 13
3.2.3. Campo Punto Terminal (PT) ............................................................................. 13
3.2.4. Campo número de frame.................................................................................... 13
3.2.5. Campo de datos ................................................................................................... 14
3.2.6. Campo de redundancia cíclica (CRC) ................................................................. 14
3.3.Formato de los paquetes ...................................................................................................... 14
3.3.1. Paquetes de tipo token ........................................................................................ 14
3.3.2. Paquete inicio de frame (SOF) ........................................................................... 15
3.3.3. Paquete de datos .................................................................................................. 15
3.3.4. Paquetes "PACT"................................................................................................ 16
3.4. Transacciones .................................................................................................................. 16
3.4.1. Transacción IN .................................................................................................... 18
3.4.2. Sincronización mediante conmutación de bits ................................................. 19
3.4.3. Transacción OUT ................................................................................................ 19
3.4.4. Transacción SETUP............................................................................................ 20
3.4.5. Split ....................................................................................................................... 20
3.4.6. Transacciones Split ............................................................................................. 20
3.4.7. Formato del paquete SPLIT .............................................................................. 21
3.5. El protocolo y las transferencias ................................................................................. 22
3.5.1. Transferencias de bulto ("Bulk") ...................................................................... 22
3.5.2. Transferencias de control ................................................................................... 22
3.5.3. Transferencias de interrupción ......................................................................... 23
iv 3.5.4. Transferencias isócronas .................................................................................... 23
3.5.5. Codificación de datos .......................................................................................... 23
3.5.6. Relleno de bits ..................................................................................................... 24
3.5.8. Final de paquete EOP ......................................................................................... 25
4. Introducción a los Microcontroladores ............................................................................. 25
4.1. Arquitectura básica ............................................................................................................ 25
4.2. El procesador o CPU .......................................................................................................... 26
4.3. Memoria ............................................................................................................................. 26
4.3.1. ROM con máscara....................................................................................................... 27
4.3.2. OTP ............................................................................................................................ 27
4.3.3. EPROM ................................................................................................................ 27
4.3.4. EEPROM ................................................................................................................... 28
4.3.5. FLASH ....................................................................................................................... 28
5. PUERTAS DE ENTRADA Y SALIDA ............................................................................... 29
5.1. Reloj principal .................................................................................................................... 29
5.2. Recursos Especiales ...................................................................................................... 29
5.3. Temporizadores o “Timers” .......................................................................................... 30
5.4. Perro guardián o “Watchdog” ....................................................................................... 30
5.5. Protección ante fallo de alimentación o Brownout” ..................................................... 31
5.6. Estado de reposo o de bajo consumo ............................................................................ 31
5.7. Conversor A/D (CAD) .................................................................................................. 31
5.8. Conversor D/A (CDA) ................................................................................................. 31
5.9. Comparador analógico .................................................................................................. 31
5.10. Modulador de anchura de impulsos o PWM................................................................. 32
5.11. Puertas de E/S digitales ................................................................................................. 32
5.12. Puertos de comunicación .............................................................................................. 32
CONSIDERACIONES PREVIAS ............................................................................................. 33
6. REQUERIMIENTOS PARA LA IMPLEMENTACIÓN DE USB ............................... 34
7. DESARROLLO............................................................................................................... 34
POLARIZACIÓN DEL MICROCONTROLADOR .................................................................... 35
8.1. CIRCUITO DE PRUEBA ................................................................................................... 38
8.2. PRIMER PROGRAMA. ..................................................................................................... 41
CONCLUSIONES: ....................................................................................................................... 43
RECOMENDACIONES ............................................................................................................ 44
BIBLIOGRAFIA .......................................................................................................................... 45
v Lista de Figuras
Figura 1. Conector DB 25 y DB9. .................................................................................................. 4
Figura 2. Topología de USB Estrella a nivel de capas. .................................................................. 8
Figura 3.Detalle de cable USB. ...................................................................................................... 9
Figura 4. Transferencia de datos de USB 2.0. .............................................................................. 17
Figura 5. Transacciones por partes para establecer una transacción de tipo IN. .......................... 21
Figura 6. Diagrama a bloques de la arquitectura harvard. ............................................................ 26
Figura 7.Diagrama de Pines del PIC 18F2550.............................................................................. 35
Figura 8. Crystal/Ceramic. Operación del resonador .................................................................... 36
Figura 9. Circuito Eléctrico del PIC 18F2550 con modulo USB. ................................................ 37
Figura 10. Imagen desplegada de detección del puerto USB IDH. .............................................. 38
Figura 11. Conexiones del circuito de prueba al PIC 18F2550. ................................................... 39
vi Lista de Tablas
Tabla 1. Descripción de los pines de un puerto serial DB-25 y DB-9. ........................................... 4
Tabla 2. Función de los paquetes. ................................................................................................. 12
Tabla 3. Elementos que componen una transferencia de datos en USB 2.0. ................................ 18
Tabla 4. Funciones de la transacción IN. ...................................................................................... 19
Tabla 5. Respuesta de la transacción IN. ...................................................................................... 19
Tabla 6. Funciones de la Transacción OUT. ................................................................................. 20
Tabla 7. Funcionamiento ET......................................................................................................... 22
Tabla 8. Caractreristícas de los pines utilizados para polarizar el microcontrolador. .................. 38
Tabla 9. Descripción de los pines utilizados por el circuito de prueba. ........................................ 40
1
INTRODUCCIÓN
La instalación de periféricos ha sido un constante problema para los
ensambladores, que deben asignar los escasos recursos disponibles entre la creciente
variedad de dispositivos que debían conectarse a los sistemas. En este sentido, aunque el
estándar PnP ("Plug and Play”) vino a aliviar en parte las dificultades mecánicas de
cambiar "jumpers" en las placas, el problema seguía ahí, ya que desde la aparición del
AT el diseño del PC no había sufrido cambios sustanciales.
El USB o Universal Serial Bus es una interfaz para la transmisión serie de datos
y distribución de energía, que ha sido introducida en el mercado de las PC´s y periféricos
para mejorar las lentas interfaces serie (RS-232) y paralelo. Provee una mayor velocidad
de transferencia (de hasta 100 veces más rápido) comparado con el puerto Paralelo de
25-pin y el Serial DB-9, DB-25, RS-232 que son los puertos que se encuentran en la
mayoría de los computadores. Tenía en un principio como objetivo el conectar
periféricos relativamente lentos (ratones, impresoras, cámaras digitales, unidades ZIP,
etc.) de una forma realmente sencilla, rápida y basada en comunicaciones serie, aunque
por sus características también podía conectarse hasta discos duros.
Es un bus serie que hace posible la conexión de hasta 127 periféricos a un único
puerto de una PC, con detección y configuración automáticas, siendo esto posible con la
PC conectada a la red y sin tener que instalar software adicional, y sin tener que reiniciar
la PC (PnP) algo que con los puertos convencionales serie y paralelo no sucedía.
Tampoco hay que preocuparse por conflictos de IRQs1 o instalar tarjetas de adaptador
para cada periférico.
1 Solicitud de interrupción
2
REQUERIMIENTOS PARA LA IMPLEMENTACIÓN DE USB
Microcontrolador o CI que soporte la interface USB
Un programa sobre el periférico para transmitir la información en cualquier
lenguaje de Programación.
Una computadora con puertos USB.
Herramientas para programar los Microcontroladores.
Teoría de protocolos RS-232, RS-485
Teoría del Protocolo USB.
Diseño de Hardware.
Conocimientos en lenguaje de programación de Alto nivel (Vbasic, VC++, java,
etc.)
ANTECEDENTES
Uno de los primeros buses de expansión que incorporaron las PC’s fue el bus
ISA. Estos buses facilitaron enormemente la incorporación de nuevos dispositivos a las
PC’s. Sin embargo, la incorporación de un dispositivo a dicho bus requería
conocimientos de Arquitectura de computadoras ajenos a la mayoría de los usuarios.
Distintos fabricantes de la industria decidieron formar un consorcio con el
objetivo de promover un estándar de industria que simplificara el uso de periféricos: la
tecnología Plug & Play. Esto requería innovaciones tanto en el hardware como en el
sistema operativo. Ambos debían estar diseñados para esta tecnología. Se incorporó en
las últimas revisiones de ISA, aunque no fue hasta la llegada del bus PCI cuando el
estándar comenzó a funcionar correctamente.
Los periféricos plug-and-play deben estar completamente libres de jumpers y de
interruptores. El dispositivo también debe ser capaz de "anunciarse" por sí sólo al
sistema operativo. De esta manera, el propio sistema operativo es capaz de cargar los
controladores adecuados.
Finalmente, el dispositivo debe ser totalmente configurable desde el controlador
del sistema operativo. Lo que incluye la selección de su rango de direcciones de
entrada/salida e interrupciones a utilizar. Esto evita la intervención del usuario.
Anteriormente, esta asignación era responsabilidad de la BIOS de laPC, requiriendo una
configuración manual en el sistema operativo.
3
Como resultado de un intento de dotar al PC de un bus de alta velocidad que
ofreciera las características ideales PnP de universalidad; facilidad de conexión y
desconexión, incluso en caliente ("Hot Swappable"), y sobre todo, que consumiese pocos
recursos. Intel y otros líderes de la industria diseñaron el Bus Universal Serie, más
comúnmente conocido por su acrónimo inglés USB ("Universal Serial Bus"). Que como
su nombre indica, es un bus serie bidireccional y de bajo costo. Diseñado como una
extensión en la arquitectura estándar del PC y orientado principalmente en la integración
de periféricos, que aparecen como un solo puerto en lo que se refiere a utilización de
recursos.
EL ESTÁNDAR RS-232C
Antes de la creación del USB (universal serial bus), El puerto serie RS-232 era la
forma más comúnmente usada para realizar transmisiones de datos entren PC’s.
El RS232 (Recommended Standard 232, también conocido como Electronic
Industries Alliance RS-232C) es una interfaz 2 que designa una norma para el
intercambio de una serie de datos binarios entre un DTE (Equipo terminal de datos) y un
DCE (Data CommunicationEquipment, Equipo de Comunicación de datos.
El RS-232C consiste en un conector tipo DB-25 de 25 pines, aunque es normal
encontrar la versión de 9 pines DB-9, para cierto tipo de periféricos (como el ratón serie
del PC). En cualquier caso, las PCs no suelen emplear más de 9 pines en el conector DB-
25. Las señales con las que trabaja este puerto serie son digitales, de +12V (0 lógico) y -
12V (1 lógico), para la entrada y salida de datos, y a la inversa en las señales de control.
El estado de reposo en la entrada y salida de datos es -12V. Dependiendo de la velocidad
de transmisión empleada, es posible tener cables de hasta 15 metros.
Cada pin puede ser de entrada o de salida, teniendo una función específica cada
uno de ellos. Las másimportantes son:
2 una interfaz es el puerto (circuito físico) a través del que se envían o reciben señales desde un sistema o
subsistemas hacia otros.
4
PIN FUNCIÓN
TXD TransmitirDatos
RXD RecibirDatos
DTR Terminal de DatosListo
DSR Equipo de DatosListo
RTS Solicitud de Envío
CTS Libre para Envío
DCD Detección de Portadora
Figura 1. ConectorDB 25 y DB9.
Las señales TXD, DTR y RTS son de salida, mientras que RXD, DSR, CTS y
DCD son de entrada. La referencia para todas las señales es SG (Tierra de Señal).
NUMERO DE PIN SEÑAL DESCRIPCIÓN E/S
DB-25 DB-9
1 1 - chasis -
2 3 TxD Transmit Data S
3 2 RxD Receive Data E
4 7 RTS Request To Send S
5 8 CTS Clear To Send E
6 6 DSR Data Set Ready E
7 5 SG Signal Ground -
8 1 CD/DCD (Data) Carrier Detect E
15 - TxC(*) Transmit Clock S
17 - RxC([1]
) Receive Clock E
20 4 DTR Data Terminal Ready S
22 9 RI Ring Indicator E
24 - RTxC(*) Transmit/Receive Clock S
Tabla 1.Descripción de los pines de un puerto serialDB-25 y DB-9.
5
EL PUERTO SERIE EN LA PC
El host controla el puerto serie mediante un circuito integrado específico,
llamado UART (Transmisor-Receptor-Asíncrono Universal
Para controlar al puerto serie, la CPU emplea direcciones de puertos de E/S y
líneas de interrupción (IRQ). En el AT-286 se eligieron las direcciones 3F8h (o 0x3f8) e
IRQ 4 para el COM1, y 2F8h e IRQ 3 para el COM2. El estándar del PC llega hasta
aquí, por lo que al añadir posteriormente otros puertos serie, se eligieron las direcciones
3E8 y 2E8 para COM3-COM4, pero las IRQ no están especificadas. Cada usuario debe
elegirlas de acuerdo a las que tenga libres o el uso que vaya a hacer de los puertos serie
(por ejemplo, no importa compartir una misma IRQ en dos puertos siempre que no se
usen conjuntamente, ya que en caso contrario puede haber problemas). Es por ello que
últimamente, con el auge de las comunicaciones, los fabricantes de PCs incluyan un
puerto especial PS/2 para el ratón, dejando así libre un puerto serie.
Mediante los puertos de E/S se pueden intercambiar datos, mientras que las IRQ
producen una interrupción para indicar a la CPU que ha ocurrido un evento (por ejemplo,
que ha llegado un dato, o que ha cambiado el estado de algunas señales de entrada). La
CPU debe responder a estas interrupciones lo más rápido posible, para que dé tiempo a
recoger el dato antes de que el siguiente lo sobrescriba. Sin embargo, las UART 16550A
incluyen unos buffers de tipo FIFO, dos de 16 bytes (para recepción y transmisión),
donde se pueden guardar varios datos antes de que la CPU los recoja. Esto también
disminuye el número de interrupciones por segundo generadas por el puerto serie.
El RS-232 puede transmitir los datos en grupos de 5, 6, 7 u 8 bits, a unas
velocidades determinadas (normalmente, 9600 bits por segundo o más). Después de la
transmisión de los datos, le sigue un bit opcional de paridad (indica si el numero de bits
transmitidos es par o impar, para detectar fallos), y después 1 o 2 bits de Stop.
Normalmente, el protocolo utilizado ser 8N1 (que significa, 8 bits de datos, sin paridad y
con 1 bit de Stop).
Una vez que ha comenzado la transmisión de un dato, los bits tienen que llegar
uno detrás de otro a una velocidad constante y en determinados instantes de tiempo. Por
eso se dice que el RS-232 es asíncrono por caracter y síncrono por bit. Los pines que
portan los datos son RXD y TXD. Las demás se encargan de otros trabajos: DTR indica
que laPC está encendido, DSR que el aparato conectado ha dicho puerto esta encendido,
RTS que laPC puede recibir datos (porque no está ocupado), CTS que el aparato
conectado puede recibir datos, y DCD detecta que existe una comunicación, presencia de
datos.
Tanto el aparato a conectar como la PC (o el programa terminal) tienen que usar
el mismo protocolo serie para comunicarse entre sí. Puesto que el estándar RS-232 no
permite indicar en qué modo se está trabajando, es el usuario quien tiene que decidirlo y
configurar ambas partes. Como ya se ha visto, los parámetros que hay que configurar
6
son: protocolo serie (8N1), velocidad del puerto serie, y protocolo de control de flujo.
Este último puede ser por hardware (el handshaking RTS/CTS) o bien por software
(XON/XOFF, el cual no es muy recomendable ya que no se pueden realizar
transferencias binarias). La velocidad del puerto serie no tiene por qué ser la misma que
la de transmisión de los datos, de hecho debe ser superior. Por ejemplo, para
transmisiones de 1200 baudios es recomendable usar 9600, y para 9600 baudios se
pueden usar 38400 (o 19200).
7
1. ESPECIFICACIONES USB:
Un sistema USB se describe por las siguientes aéreas:
o Interconexión3 USB
o Dispositivo USB
o USB host
La manera en que se realiza la interconexión incluye:
Topología de bus: es el modelo de conexión entre el dispositivo USB y el
host
Relaciones entre capas: las tareas USB que se realizan en cada capa y la
capacidad para apilarlas
Modelo flujo de datos: La forma en que se mueven los datos en el sistema
a través de USB entre los que lo producen y consumen.
1.1 Topología Bus
El USB permite conectar dispositivos USB con el host. La interconexión física
USB utiliza una topología estrella en niveles de capas. Un hub está en el centro de cada
estrella. Cada segmento de cable es una conexión punto a punto entre el host y un hub, o
una función, o un hub conectado a otro hub o función. La Figura 1 ilustra la topología
de la USB.
El roothub está en el host. Un hub externo tiene un conector upstream (lado del
host) para comunicarse con el host y uno o más conectores downstream (lado del
dispositivo) o conexiones internas uniendo dispositivos. Un hub típico tiene dos, cuatro,
o siete puertos. Cuando se conectan en serie múltiples hub, se puede pensar en la serie
como una capa, una encima de la otra.
La capa de la estrella describe solo una conexión física. En un programa no
importa si todas las conexiones son lógicas. Las aplicaciones del host y el firmware del
dispositivo no necesitan saber o preocuparse de si la comunicación pasa a través de un
hub o cinco
Hasta cinco hubs externos pueden conectarse en serie con un límite de 127
periféricos y hubs, incluyendo el roothub. Sin embargo, el ancho de banda y los limites
3La interconexión USB es la manera en que los dispositivos USB están conectados y se comunican con el host
8
de planificación puede evitar que un controlador de host se comunique con muchos
dispositivos, al incrementarse el ancho de banda disponible para los dispositivos USB,
muchos PC's tiene múltiples controlador de host, cada controlador un bus independiente.
HOST
ROOT HUBCAPA1
CAPA 2
CAPA 3
CAPA 4
DEVICE DEVICE
DEVICE
DEVICEDEVICE DEVICE DEVICE
DISPOSITIVO COMPUESTO
DEVICEDEVICE
HUB HUB
HUB HUB
Figura 2. Topología de USB Estrella a nivel de capas.
1.1.1 USB Host
No es sólo un host en cualquier sistema USB. La interfaz USB con el sistema de
cómputo se refiere al host como controlador.
El controlador de host puede ser implementado en una combinación de hardware,
firmware o software. Un hub raíz está integrado dentro del sistema de host para
proporcionar uno o más puntos de fijación.
1.1.2 USB Devices
9
Hubs, que proporcionan puntos adicionales para unir a las USB’s
Función, que proporcionan capacidades para el sistema, tales como una
conexión ISDN4, un joystick digital, o bocinas.
2. INTERFAZ FÍSICA
2.1 Eléctrico
La USB transfiere la señal y la alimentación a través de un cable de cuatro hilos,
que se muestra en la Figura 3. La señalización se produce en dos cables en cada
segmento de punto a punto.
VBUS
D+D-GND
VD+D-GND
BUS
Figura 3.Detalle de cable USB.
A nivel de alimentación, el cable proporciona la tensión nominal de 5 V. Es
necesario definir correctamente el diámetro del hilo con el fin de que no se produzca una
caída de tensión demasiado importante en el cable. Una resistencia de terminación
instalada en la línea de datos permite detectar el puerto y conocer su configuración (1,5 o
12 Mbits/s).
A nivel de señal, se trata de un par trenzado con una impedancia característica de
90 Ω La velocidad puede ser tanto de 12 Mbits/s como de 1,5 Mbits/s. La sensibilidad
del receptor puede ser de, al menos, 200mV y debe poder admitir un buen factor de
rechazo detención en modo común.
2.2 Control de consumo
La PC gestiona el consumo, teniendo capacidad de poner en reposo (suspend) o
en marcha a un periférico USB. En reposo, este reduce su consumo (si puede),
quedándose la parte USB funcional. Esta gestión está orientada especialmente a los
equipos portátiles.
4(IntegratedServices Digital Network). La RDSI (o ISDN) es un protocolo estandar de red de comunicaciones, que
contempla tanto las comunicaciones de voz, como las de datos, transmitiendo ambas en formato digital, y a distintas velocidades
10
3. PROTOCOLO DE BUS
Hay dos tipos de datos:
USB full-speed, velocidad de bits de señalización es de 12 Mb/s.
USB low-speed, velocidad de señalización también se define en el 1,5
Mb/s.
En la USB 2.0 los controladores de host y los hubs proporcionan capacidades
velocidad alta (full-speed) y velocidad baja (low-speed), los datos pueden ser
transmitidos a alta velocidad entre los controladores de host y el hub, pero la transmisión
entre el hub y el dispositivo es a velocidad alta o velocidad baja. Esta capacidad reduce
al mínimo el impacto que la alta velocidad y baja velocidad tiene en el ancho de banda
disponible para dispositivos de alta velocidad.
El modo de velocidad baja se define como el apoyo de un número limitado de
dispositivos de bajo ancho de banda, tales como ratones, por que el uso más general
degradaría la utilización del bus.
El reloj se transmite codificado, junto con los datos diferenciales. El esquema de
codificación de reloj es NRZI5, que garantiza que la frecuencia de reloj permanezca
constante. Existiendo un dispositivo que generan bit de relleno (bit stuffing) para
asegurar una transición adecuada. Un campo de sincronización (SYNC) precede a cada
paquete para permitir que el receptor(s) sincronice sus relojes de recuperación de bit.
El USB es un bus de encuestados (Polled). El controlador de host inicia todas las
transferencias de datos. La mayoría de las transacciones de bus suponen la transmisión
de hasta tres paquetes. Cada transacción se inicia cuando el Controlador de host, de
forma programada, envía un paquete de USB que describe el tipo y la dirección de la
transacción, la dirección del dispositivo USB, y el número de punto Terminal. Este
paquete se conoce como el paquete de token (PTKN)6. El dispositivo USB que se trata se
selecciona mediante la decodificación de los campos de dirección adecuados. En una
determinada transacción, los datos se transfieren ya sea desde el PC a un dispositivo o
desde un dispositivo a la máquina. La dirección de la transferencia de datos es
especificada en el paquete de token. La fuente de la transacción, entonces envía un
5No retorno a cero invertido (NRZI) Es una forma de codificar una señal binaria en una señal digital para transmitirla
por un medio.
6PTKN abreviación del paquete de token
11
paquete de datos o indica que no tiene. El destino, en general, responde con un paquete
de aceptación (PACT)7 “handshake” que indica si la transferencia se ha realizado
correctamente.
Algunas de las transacciones entre los controladores de host bus y hub implican
la transmisión de cuatro paquetes. Estos tipos de transacciones se utilizan para gestionar
las transferencias de datos entre el host y los dispositivos de velocidad alta/baja.
El modelo de transferencia de datos USB entre una fuente o destino en el host y
un punto final en un dispositivo se conoce como un pipe. Hay dos tipos de pipes: flujo
(PF) y mensaje (PM). Flujo de datos no tiene estructura USB definida. Este tipo de pipe
soporta las transferencias bulk, isócronas, e interrupt.Mientras que los datos del mensaje
pueden o no, tener la estructura USB definida. Además, los pipes tienen asociación con
el ancho de banda de datos, transferencia de tipo de servicio, y el punto terminal (PT)8,
como las características de direccionalidad y tamaños de búfer. La mayoría de pipes
entran en existencia cuando un dispositivo USB está configurado. En un pipe de
mensajes, el pipe de control por defecto, siempre existe una vez que un dispositivo está
encendido, con el fin de facilitar el acceso a la configuración del dispositivo, el estado y
el control de la información.
3.1. Capa de protocolo
La forma en la que las secuencias de bits se transmiten en USB es la siguiente;
primero se transmite el bit menos significativo, después el siguiente menos significativo
y así hasta llegar al bit más significativo. Cuando se transmite una secuencia de bytes se
realiza del byte menos significativo al byte más significativo.
En la transmisión se envían y reciben paquetes de datos, cada paquete de datos
viene precedido por un campo Sync y acaba con el delimitador EOP (final de paquete),
todo esto se envía codificado además de los bits de relleno insertados. En este punto
cuando se habla de datos se refiere a los paquetes sin el campo Sync ni el delimitador
EOP, y sin codificación ni bits de relleno.
El primer campo de todo paquete de datos es el PID. El PID indica el tipo de
paquete y por lo tanto, el formato del paquete y el tipo de detección de errores aplicado
al paquete. En función de su PID podemos agrupar los diferentes tipos de paquetes en
cuatro clases:
7PACT Abreviación del paquete handshake
8Abreviación de punto terminal (endpoint)
12
Tipo PID Nombre PID ID Descripción
PTKN
OUT
IN
SOF
SETUP
0
001B
1
001B
0
101B
1
101B
Dirección + número de PT en una transacción host a función.
Dirección + número de PT en una transacción función a host.
Indicador de inicio de frame (Start Of Frame) y número de
frame.
Dirección + número de PT en una transacción host a función
para realizar un Setup de un pipe de control.
DATOS
DATA0
DATA1
DATA2
MDATA
0
011B
1
011B
0
111B
1
111B
PID de paquete de datos par.
PID de paquete de datos impar.
PID de paquete de datos de alta velocidad, elevado ancho de
banda en una transferencia isócrona en un microframe.
PID de paquete de datos de alta velocidad para split y
elevado ancho de banda en una transferencia isócrona.
PACT
ACK
NAK
STALL
NYET
0
010B
1
010B
1
110B
0
110B
El receptor acepta el paquete de datos libre de errores.
El dispositivo receptor no puede aceptar los datos o el
dispositivo emisor no puede enviar los datos.
PT sin servicio o una petición de control sobre un pipe no
está soportado.
Aún no se ha recibido una respuesta del receptor.
ESPECIAL
PRE
ERR
SPLIT
PING
Reservado
1
100B
1
100B
1
000B
0
100B
0
000B
(Token) Habilita tráfico de bajada por el bus a dispositivos de
velocidad baja.
(Handshake) Error de transferencia Split.
(Token) Transferencia de alta velocidad Split.
(Token) Control de flujo sobre PT de tipo control o bulk.
PID reservado.
Tabla2. Función de los paquetes.
3.2. Formato de los campos
13
Los paquetes se dividen en campos, los diferentes campos son:
3.2.1. Campo identificador de paquete (PID)
Es el primer campo que aparece en todo paquete. El PID indica el tipo de paquete, y por
tanto el formato del paquete y el tipo de detección de error aplicado a este. Se utilizan
cuatro bits para la codificación del PID, sin embargo el campo PID son ocho bits, que son
los cuatro del PID seguidos del complemento a 1 de esos cuatro bits.
Estos últimos cuatro bits sirven de confirmación del PID. Si se recibe un paquete
en el que los cuatro últimos bits no son el complemento a 1 del PID, o el PID es
desconocido, se considera que el paquete está corrupto y es ignorado por el receptor.
(bms) (bMs)
PID 0 PID 1 PID 2 PID 3 PID 0 PID 1 PID 2 PID 3
Dónde: bms: bit menos significativo y bMs: bit más significativo
3.2.2. Campo dirección (DIR)
Este campo indica la función, a través de la dirección, que envía o es receptora
del paquete de datos. Se utilizan siete bits, de lo cual se deduce que hay un máximo de
128 direcciones.
(bms) (bMs)
DIR 0 DIR 1 DIR 2 DIR 3 DIR 4 DIR 5 DIR 6
3.2.3. Campo Punto Terminal (PT)
Se compone de cuatro bits e indica el número de PT al que se quiere acceder
dentro de una función, como es lógico este campo siempre sigue al campo dirección.
(bms) (bMs)
PT 0 PT 1 PT 2 PT 3
3.2.4. Campo número de frame
14
Es un campo de 11 bits que es incrementado por el host cada (micro) frame en
una unidad. El máximo valor que puede alcanzar es el 7FFH, si se vuelve a incrementar
pasa a cero.
3.2.5. Campo de datos
Los campos de datos pueden variar de 0 a 1024 bytes. En el dibujo se muestra el
formato para múltiples bytes.
(bms) (bMs)
D 0 D 1 D 2 D 3 D 4 D 5 D 6 D 7
(bMS) (bms)
D 0D 7
Byte N-1 Byte N Byte N+1
3.2.6. Campo de redundancia cíclica (CRC)
El CRC se usa para proteger todos los campos no PID de los PTKN y de datos. El
CRC siempre es el último campo y se genera a partir del resto de campos del paquete, a
excepción del campo PID. El receptor al recibir el paquete comprueba si se ha generado
de acuerdo a los campos del paquete, si no es así, se considera que alguno o más de un
campo están corruptos, en ese caso se ignora el paquete.
El CRC utilizado detecta todos los errores de un bit o de dos bits. El campo de
CRC es de cinco bits para los paquetes de tipo IN, SETUP, OUT, PING y SPLIT. El
polinomiogeneradores el siguiente:
En el caso de los paquetes de datos se utiliza un campo CRC de 16 bits, el
polinomio generador es el siguiente:
3.3. Formato de los paquetes
3.3.1. Paquetes de tipo token
Un token está compuesto por un PID que indica si es de tipo IN, OUT o SETUP.
El paquete especial de tipo PING también tiene la misma estructura que token. Después
del campo PID viene seguido de un campo dirección y un campo PT, por último hay un
campo CRC de 5 bits.
15
(bm s ) (bM s )
C a m p o
B its
P ID D IR P T C R C 5
8 7 4 5
En los paquetes OUT y SETUP esos campos identifican al PT que va a recibir el
paquete datos que va a continuación. En los paquetes IN indican el PT que debe
transmitir un paquete de datos. En el caso de los paquetes PING hacen referencia al PT
que debe responder con un (PACT).
3.3.2. Paquete inicio de frame (SOF)
Estos paquetes son generados por el host cada un milisegundo en buses de
velocidad media y cada 125 microsegundos para velocidad alta. Este paquete está
compuesto por un campo número de frame y un campo de CRC de 5 bits.
(bm s ) (bM s )
C a m p o
B its
P ID C R C 5
8 5
Número de Frame
11
3.3.3. Paquete de datos
Este paquete está compuesto por cero o más bytes de datos seguido de un campo
de CRC de 16 bits. Existen cuatro tipos de paquetes de datos: DATA0, DATA1, DATA2
y MDATA. El número máximo de bytes de datos en velocidad baja es de ocho bytes, en
media de 1023 bytes y en alta de 1024 bytes. El número de bytes de datos ha de ser
entero.
(bm s ) (bM s )
C a m p o
B its
P ID C R C 1 6
8 5
DATO
0-8192
16
3.3.4. Paquetes "PACT"
Los paquetes PACT, se utilizan para saber el estado de una transferencia de
datos, indicar la correcta recepción de datos, aceptar o rechazar comandos, control de
flujo, y condiciones de parada. El único campo que contiene un paquete de este tipo es el
campo PID.
Existen cuatro paquetes de tipo "PACT" además de uno especial:
ACK: Indica que el paquete de datos ha sido recibido y decodificado
correctamente. ACK sólo es devuelto por el host en las transferencias IN y por una
función en las transferencias OUT, SETUP o PING.
NAK: Indica que una función no puede aceptar datos del host (OUT) o
que no puede transmitir datos al host (IN). También puede enviarlo una función durante
algunas fases de transferencias IN, OUT o PING. Por último se puede utilizar en el
control de flujo indicando disponibilidad. EL host nuncapuedeenviarestepaquete.
STALL: Puede ser devuelto por una función en transacciones que
intervienen paquetes de tipo IN, OUT o PING. Indica que una función es incapaz de
transmitir o enviar datos, o que una petición a una tubería control no está soportada. El
host no puede enviar bajo ninguna condición paquetes STALL.
NYET: Sólo disponible en alta velocidad es devuelto como respuesta bajo
dos circunstancias. Como parte del protocolo PING, o como respuesta de un hub a una
transacción SPLIT indicando que la transacción de velocidad media o baja aún no ha
terminado, o que el hub no está aún habilitado para realizar la transacción.
ERR: De nuevo sólo disponible en alta velocidad y de nuevo formando
parte del protocolo PING, permite a un hub de alta velocidad indicar que se ha producido
un error en un bus de media o baja velocidad.
3.4. Transacciones
La figura muestra los elementos de una transaccion tipica de un USB2.0, en ella
hay transferencias y transacciones, etapas y fases, transaccion de datos y paquetes de
datos. Hay etapas de estado y fases de aceptacion (handshake). Etapa de paquetes de
datos que tienen PACT y la etapa de estado, que tiene paquetes de datos.
Bms bMs
Campo PID
Bits 8
17
Figura 4. Transferencia de datos de USB 2.0.
La fig.4., muestra los elementos que componen cada uno de los cuatro tipos de
transferencia.
Cada transferencia consiste de una o más transacciones, y cada transacción en
turno consiste de dos o tres paquetes. La especificación de un USB 2.0 define a una
transacción como la entrega de servicios a un PT. En este caso, servicios puede tomar el
significado que el host envía información al dispositivo o el host a solicitado y recibido
información del dispositivo. La transacción setup envía una solicitud de transferencia de
control al dispositivo. La transacción OUT envía otro dato o estado de la información al
dispositivo la IN envía datos o estado de la información al host.
Cada transacción USB incluye la identificación, comprobación de errores, el
estado y el control de la información, así como cualquier intercambio de datos. Una
transferencia puede tener lugar durante varios frames o microframes, pero cada
transacción USB se completa dentro de un frame o microframe sin interrupción. Otros
paquetes no pueden entrar en medio de una transferencia, porque en el bus se puede
romper la transacción. El dispositivo debe responder con rapidez con los datos
solicitados o el estado de la información. El típico firmware del dispositivo, por lo
general arma (crea, o configura) una respuesta a los PT’s de un paquete recibido, y/o se
recibe un paquete.
18
TIPODE
TRANSFERENCIA DIRECCION Y NÚMERO DE LA TRANSACCION FASE
(PAQUETES)
CONTROL
SETUP STAGE
(SETUP)
Token
Data
PACT
DATA
STAGE Cero o más(IN o OUT)
Token
Data
PACT
SETUP STAGE
Uno (dirección opuesta de la transacción en
el DATA STAGE o IN si este no es DATA
STAGE)
Token
Data
PACT
BULK Uno o mas (IN o OUT)
Token
Data
PACT
INTERRUPTCION Uno o mas (IN o OUT)
Token
Data
PACT
ISOCRONO Uno o mas (IN o OUT)
Token
Data
PACT
Tabla3.Elementos que componen una transferencia de datos en USB 2.0.
3.4.1. Transacción IN
La transacción empieza con el envío de un paquete de tipo IN por parte del host a
un determinado PT en una función. Un PT cuando recibe un paquete de tipo IN debe
comportarse como muestra la siguiente tabla.
Token
recibidocorrupto Estado de punto final
La función puede
transmitir los datos Acción
Si No responde
No Deshabilitado Envía STALL
No Habilitado No Envía NAK
19
No Habilitado si Envía el paquete de
datos
Tabla4. Funciones de la transacción IN.
La respuesta que del host al recibir un paquete de datos en la transacción se puede
observar en la siguiente tabla:
A El host puede aceptar los datos Respuesta del host
Si -- Descarta el paquete, no responde
No No Descarta el paquete, no responde
No Si Envía ACK
Tabla5. Respuesta de la transacción IN.
3.4.2. Sincronización mediante conmutación de bits
USB ofrece un mecanismo que garantiza la sincronización entre el emisor y el
receptor de datos a lo largo de múltiples transacciones. La idea es garantizar que los dos
sean conscientes de que los PACT han sido recibidos correctamente. Para ello se utilizan
los dos PID DATA0 y DATA1 que sólo varían en un bit. De manera que inicialmente
tanto el emisor y el receptor están sincronizados en la secuencia de bits. De modo que, el
que recibe datos conmuta su bit cuando puede aceptar datos y ha recibido un paquete de
datos libre de errores. Por su parte el que envía conmuta su bit cuando recibe un ACK,
tal que si el último paquete de datos tenía PID DATA0 el siguiente tendrá DATA1, y
viceversa, además si todo ha salido bien, el PID del paquete coincidirá con la secuencia
de bits del receptor.
3.4.3. Transacción OUT
El host envía un paquete OUT a un determinado PT y seguidamente envía el
paquete de datos. Suponiendo que el PT ha decodificado correctamente el token, en caso
contrario se ignora el token y lo datos, espera a recibir un paquete de datos. El
comportamiento del PT cuando recibe el paquete de datos es el siguiente.
20
Paquete de
datoscorrupto
Estado del
receptor
Coincidencia de la
secuencia de bits
La función puede
aceptar los datos Acción
Si No
responde
No Deshabilitado Envía
STALL
No Habilitado No Envía ACK
No Habilitado Si Si Envía ACK
No Habilitado Si No Envía NAK
Tabla 6. Funciones de la Transacción OUT.
3.4.4. Transacción SETUP
La transacción SETUP es una transacción especial que tiene las mismas fases que
una transacción OUT, que sólo se puede utilizar con PT de tipo control y cuya finalidad
es la de indicar el inicio de la fase setup.
3.4.5. Split
El token especial SPLIT es utilizado para poder soportar transacciones en varias
partes entre un hub que trabaja a velocidad alta con dispositivos de velocidad media o
baja. Se definen nuevas transacciones que utilizan el token SPLIT, en concreto dos
transacciones con sus respectivos paquetes: "start-splittransaction (SSPLIT)" y
"complete-splittransaction (CSPLIT)".
3.4.6. Transacciones Split
La transacción split es utilizada solamente por el host y un hub cuando se quiere
comunicar con un dispositivo de velocidad media o baja conectado con el hub. El host
21
puede iniciar una transacción por partes a través del paquete SSPLIT y puede
completarla, recibiendo las respuestas de la función de velocidad baja o media, a través
del paquete CSPLIT. Esto permite al host realizar otras transacciones a velocidad alta
sin tener que esperar a que acabe la transacción.
Figura 5. Transacciones por partes para establecer una transacción de tipo IN.
3.4.7. Formato del paquete SPLIT
Campos del paquete SSPLIT y CSPLIT:
(Ls b) (M s b)
C a m p o
B its
S P L ITP ID
2
HUBTDIR
SC PUERTO S E ET CRC5
8 7 1 7 1 1 5
El campo "HubAddr" es un campo dirección que indica la dirección del hub. El
bit SC indica el tipo de paquete, si SC=0 se trata de un SSPLIT, y si SC=1 de un
CSPLIT. El campo "puerto del hub destino" hace referencia al puerto del hub al que está
destinado esta transacción por partes, el formato de este campo es idéntico al de un
campo dirección. El significado de los bits S y E dependen del tipo de transferencia de
22
datos que se esté utilizando, y puede hacer referencia a como se relaciona los tamaños de
los paquetes de datos de alta y media velocidad, o hacer referencia a la velocidad de la
transacción. El bit E en los paquetes CSPLIT nunca se utiliza, de hecho se llama bit U.
Por último el campo de dos bits ET indica el tipo de transferencia de datos, es decir, el
tipo de PT. En la siguiente tabla se puede observar el funcionamiento de ET.
ET
Tipo de PT
00
Control
01
Isócrono
10
"Bulk"
11
Interrupción
Tabla 7. Funcionamiento ET.
3.5. El protocolo y las transferencias
En este apartado se muestra de forma general las transacciones que se realizan, y
las particularidades de cada tipo de transferencia.
De forma general toda función en principio está esperando a que el host le envíe
un paquete, si este paquete es de tipo token entonces cambia el estado de la función
iniciándose una transacción. También se debe de tener en cuenta, que cuando o bien el
host, o bien una función se encuentran en un estado que no es el de reposo, aparecen los
timeouts como otra causa de error.
3.5.1. Transferencias de bulto ("Bulk")
En las transferencias Bulk se puede hablar en parte de transacciones de Bulk,
pues la idea es enviar datos de paquete en paquete sin que tenga que haber un flujo de
datos continuo. La diferencia reside en que si hablamos de transferencia, no se puede
considerar que haya terminado hasta que el host haya conseguido enviar los datos, o bien
que después de varios intentos fallidos de un error.Cada transacción de Bulk se puede
dividir en tres fases: token, datos y "handshake", si bien gracias al token PING pueden
haber transacciones de dos fases: token y "handshake".
3.5.2. Transferencias de control
23
Estas transferencias constan de tres fases: transacción setup, fase de datos y
transacción de estado. La transacción siempre la inicia el host, y sirve para enviar
información de control para indicar al Pt que se quiere realizar. El siguiente esquema
representa una transacción setup.
A continuación se inicia la fase de transferencia de datos, que consiste en una
secuencia de transacciones de datos siempre en la misma dirección alternando DATA0 y
DATA1. Esta fase no es obligatoria, la dirección se establece en la fase setup.
Finalmente tiene lugar una transacción estado, esta transacción es idéntica a una
transacción de Bulks. La dirección de esta transacción es siempre la contraria a la de la
fase de transferencia de datos, y si esta no existiese, la dirección es del PT al host.
3.5.3. Transferencias de interrupción
Las transferencias de interrupción son solamente transacciones de tipo IN y OUT.
Desde el punto de vista de las transacciones es muy similar a una transferencia de Bulks.
A continuación el esquema de unatransacción de interrupción.
3.5.4. Transferencias isócronas
Una transferencia isócrona se plantea como una secuencia de transacciones muy
sencillas para enviar o recibir datos. Estas transacciones no utilizan "handshakes" y por
lo tanto no se reenvían paquetes, ya que el objetivo de la transferencia es simular un flujo
constante de datos. A continuación un esquema de una transacción.
De forma que después del reset el estado de reposo de la línea es diferente si se
trata de baja o media velocidad. En el caso de dispositivos de alta velocidad lo que se
hace es que en un principio se conecta como un dispositivos de velocidad media y más
tarde a través de un protocolo se pasa a velocidad alta.
3.5.5. Codificación de datos
El USB utiliza la codificación NRZI para la transmisión de paquetes. En esta
codificación los "0" se representan con un cambio en el nivel, y por el contrario los "1"
se representan con un no cambio en el nivel. De modo que las cadenas de cero producen
transiciones consecutivas en la señal, mientras que cadenas de unos produce largos
periodos sin cambios en la señal. A continuación un ejemplo:
24
3.5.6. Relleno de bits
Debido a que cadenas de unos pueden producir largos periodos en los que la
señal no cambia dando lugar a problemas de sincronización, se introducen los bits de
relleno. Cada 6 bits consecutivos a "1" se inserta un bit a "0" para forzar un cambio, de
esta forma el receptor puede volverse a sincronizar. El relleno bits empieza con el patrón
de señal Sync. El "1" que finaliza el patrón de señal Sync es el primer uno en la posible
primera secuencia de seis unos.
En las señales a velocidad media o baja, el relleno de bits se utiliza a lo largo de
todo el paquete sin excepción. De modo que un paquete con siete unos consecutivos será
considerado un error y por lo tanto ignorado.
En el caso de la velocidad alta se aplica el relleno de bits a lo largo del paquete,
con la excepción de los bits intencionados de error usados en EOP a velocidad alta.
3.5.7. Sync
Teniendo en cuenta que K y J representan respectivamente nivel bajo y nivel alto, el
patrón de señal Sync emitido, con los datos codificados, es de 3 pares KJ seguidos de 2
K para el caso de velocidad media y baja. Para velocidad alta es una secuencia de 15
pares KJ seguidos de 2 K. A continuación el caso de velocidad media y baja:
El patrón de señal Sync siempre precede al envío de cualquier paquete, teniendo
como objetivo que el emisor y el receptor se sincronicen y se preparen para emitir y
recibir datos respectivamente.
Si partimos de que el estado de reposo de la señal es J, podemos interpretar Sync
como una secuencia impar de "0's" y un "1" que se inserta antes de los datos.
25
3.5.8. Final de paquete EOP
A todo paquete le sigue EOP, cuya finalidad es indicar el final del paquete.
En el caso de velocidad media y baja el EOP consiste en que, después del último bit de
datos en el cual la señal estará o bien en estado J, o bien en estado K, se pasa al estado
SE0 durante el periodo que se corresponde con el ocupado por dos bits, finalmente se
transita al estado J que se mantiene durante 1 bit. Esta última transición indica el final
del paquete.
En el caso de la velocidad alta se utilizan bits de relleno erróneos, que no están en
el lugar correcto, para indicar el EOP. Concretamente, el EOP sin aplicar codificación
consistiría en añadir al final de los datos la secuencia 0111 1111.
4. Introducción a los Microcontroladores
Un microcontrolador es un circuito integrado programable que contiene todos los
componentes necesarios para controlar el funcionamiento de una tarea determinada.
Para esto, el microcontrolador utiliza muy pocos componentes asociados.
Un microcontrolador dispone normalmente de los siguientes componentes:
Procesador o UCP (Unidad Central de Proceso).
Memoria RAM para Contener los datos.
Memoria para el programa tipo ROM/PROM/EPROM.
Líneas de E/S para comunicarse con el exterior.
Diversos módulos para el control de periféricos (temporizadores, Puertas Serie y
Paralelo, CAD: Conversores Analógico/Digital, CDA: Conversores Digital/Analógico, etc.).
Generador de impulsos de reloj que sincronizan el funcionamiento de todo el sistema.
4.1. Arquitectura básica
Aunque inicialmente todos los microcontroladores adoptaron la arquitectura
clásica de von Neumann, en el momento presente se impone la arquitectura Harvard. La
arquitectura de von Neumann se caracteriza por disponer de una sola memoria principal
donde se almacenan datos e instrucciones de forma indistinta. A dicha memoria se accede
a través de un sistema de buses único (direcciones, datos y control). La arquitectura
Harvard dispone de dos memorias independientes una, que contiene sólo instrucciones y
otra, sólo datos. Ambas disponen de sus respectivos sistemas de buses de acceso y es
posible realizar operaciones de acceso (lectura o escritura) simultáneamente en ambas
memorias. Figura 5.
26
Figura 6. Diagrama a bloques de la arquitectura harvard.
Los microcontroladores PIC responden a la arquitectura Harvard.
4.2. El procesador o CPU
Es el elemento más importante del microcontrolador y determina sus principales
características, tanto a nivel hardware como software.
Se encarga de direccionar la memoria de instrucciones, recibir el código de Operación de
la instrucción en curso, su decodificación y la ejecución de la operación que implica la
instrucción, así como la búsqueda de los operandos y el almacenamiento del resultado.
Existen tres orientaciones en cuanto a la arquitectura y funcionalidad de los procesadores
actuales.
CISC: (Computadores de Juego de Instrucciones Complejo). Disponen de más de 80
instrucciones máquina en su repertorio, algunas de las cuales son muy sofisticadas y
potentes, requiriendo muchos ciclos para su ejecución.
RISC: (Computadores de Juego de Instrucciones Reducido). En estos procesadores el
repertorio de instrucciones máquina es muy reducido y las instrucciones son simples y,
generalmente, se ejecutan en un ciclo.
SISC: (Computadores de Juego de Instrucciones Específico).las instrucciones se adaptan
a las necesidades de la aplicación prevista.
4.3. Memoria
En los microcontroladores la memoria de instrucciones y datos está integrada en el propio
chip. Una parte debe ser no volátil, tipo ROM, y se destina a contener el programa de
instrucciones que gobierna la aplicación. Otra parte de memoria será tipo RAM, volátil, y
se destina a guardar las variables y los datos.
UNIDAD
OPERATIVA
MEMORIA
DEDATOS
MEMORIA DE
INSTRUCCIONES
INSTRUCCIONES
UC
P CONTR
OL
CONTR
OL
DIRECCION DE
INSTRUCCIONE
S
DIRECCION DE
DATOS
INSTRUCCIONE
S
DATOS
INS
TR
UC
CI
ON
ES
DATOS
UNIDAD
DE
CONTROL
27
Hay dos peculiaridades que diferencian a los microcontroladores de los computadores
personales:
No existen sistemas de almacenamiento masivo como disco duro o disquetes.
Como el microcontrolador sólo se destina a una tarea en la memoria ROM, sólo hay que
almacenar un único programa de trabajo.
La RAM en estos dispositivos es de poca capacidad pues sólo debe contener las variables
y los cambios de información que se produzcan en el transcurso del programa. Por otra
parte, como sólo existe un programa activo, no se requiere guardar una copia del mismo
en la RAM pues se ejecuta directamente desde la ROM.
Los usuarios de computadores personales están habituados a manejar Megabytes de
memoria, pero, los diseñadores con microcontroladores trabajan con capacidades de
ROM comprendidas entre 512 bytes y 8 k bytes y de RAM comprendidas entre 20 y 512
bytes.
Según el tipo de memoria ROM que dispongan los microcontroladores, la aplicación y
utilización de los mismos es diferente. Se describen las cinco versiones de memoria no
volátil que se pueden encontrar en los microcontroladores del mercado.
4.3.1. ROM con máscara
Es una memoria no volátil de sólo lectura cuyo contenido se graba durante la fabricación
del chip. El elevado coste del diseño de la máscara sólo hace aconsejable el empleo de los
microcontroladores con este tipo de memoria cuando se precisan cantidades superiores a
varios miles de unidades.
4.3.2. OTP
El microcontrolador contiene una memoria no volátil de sólo lectura “programable una
sola vez” por el usuario. OTP (One Time Programmable). Es el usuario quien puede
escribir el programa en el chip mediante un sencillo grabador controlado por un programa
desde un PC.
La versión OTP es recomendable cuando es muy corto el ciclo de diseño del producto, o
bien, en la construcción de prototipos y series muy pequeñas.
Tanto en este tipo de memoria como en la EPROM, se suele usar la encriptación
mediante fusibles para proteger el código contenido.
4.3.3. EPROM
28
Los microcontroladores que disponen de memoria EPROM
(ErasableProgrammableReadOnIyMemory) pueden borrarse y grabarse muchas veces. La
grabación se realiza, como en el caso de los OTP, con un grabador gobernado desde un
PC. Si, posteriormente, se desea borrar el contenido, disponen de una ventana de cristal
en su superficie por la que se somete a la EPROM a rayos ultravioleta durante varios
minutos. Las cápsulas son de material cerámico y son más caros que los
microcontroladores con memoria OTP que están hechos con material plástico.
4.3.4. EEPROM
Se trata de memorias de sólo lectura, programables y borrables eléctricamente EEPROM
(ElectricalErasableProgrammableReadOnIyMemory). Tanto la programación como el
borrado, se realizan eléctricamente desde el propio grabador y bajo el control programado
de un PC. Es muy cómoda y rápida la operación de grabado y la de borrado. No disponen
de ventana de cristal en la superficie.
Los microcontroladores dotados de memoria EEPROM una vez instalados en el circuito,
pueden grabarse y borrarse cuantas veces se quiera sin ser retirados de dicho circuito.
Para ello se usan “grabadores en circuito” que confieren una gran flexibilidad y rapidez a
la hora de realizar modificaciones en el programa de trabajo.
El número de veces que puede grabarse y borrarse una memoria EEPROM es finito, por
lo que no es recomendable una reprogramación continúa. Son muy idóneos para la
enseñanza y la Ingeniería de diseño.
Se va extendiendo en los fabricantes la tendencia de incluir una pequeña zona de
memoria EEPROM en los circuitos programables para guardar y modificar cómodamente
una serie de parámetros que adecuan el dispositivo a las condiciones del entorno. Este
tipo de memoria es relativamente lenta.
4.3.5. FLASH
Se trata de una memoria no volátil, de bajo consumo, que se puede escribir y borrar.
Funciona como una ROM y una RAM pero consume menos y es más pequeña.
A diferencia de la ROM, la memoria FLASH es programable en el circuito. Es más
rápida y de mayor densidad que la EEPROM.
La alternativa FLASH está recomendada frente a la EEPROM cuando se precisa gran
cantidad de memoria de programa no volátil. Es más veloz y tolera más ciclos de
escritura/borrado.
Las memorias EEPROM y FLASH son muy útiles al permitir que los microcontroladores
que las incorporan puedan ser reprogramados “en circuito”, es decir, sin tener que sacar
29
el circuito integrado de la tarjeta. Así, un dispositivo con este tipo de memoria
incorporado al control del motor de un automóvil permite que pueda modificarse el
programa durante la rutina de mantenimiento periódico, compensando los desgastes y
otros factores tales como la compresión, la instalación de nuevas piezas, etc. La
reprogramación del microcontrolador puede convertirse en una labor rutinaria dentro de
la puesta a punto.
5. PUERTAS DE ENTRADA Y SALIDA
La principal utilidad de los pines que posee la cápsula que contiene un
microcontrolador es soportar las líneas de E/S que comunican al computador interno con
los periféricos exteriores.
Según los controladores de periféricos que posea cada modelo de microcontrolador,
las líneas de E/S se destinan a proporcionar el soporte a las señales de entrada, salida y
control.
5.1. Reloj principal
Todos los microcontroladores disponen de un circuito oscilador que genera una onda
cuadrada de alta frecuencia, que configura los impulsos de reloj usados en la
sincronización de todas las operaciones del sistema.
Generalmente, el circuito de reloj está incorporado en el microcontrolador y sólo se
necesitan unos pocos componentes exteriores para seleccionar y estabilizar la frecuencia
de trabajo. Dichos componentes suelen consistir en un cristal de cuarzo junto a elementos
pasivos o bien un resonador cerámico o una red R-C.
Aumentar la frecuencia de reloj supone disminuir el tiempo en que se ejecutan las
instrucciones pero lleva aparejado un incremento del consumo de energía.
5.2. Recursos Especiales
Cada fabricante oferta numerosas versiones de una arquitectura básica de
microcontrolador. En algunas amplía las capacidades de las memorias, en otras incorpora
nuevos recursos, en otras reduce las prestaciones al mínimo para aplicaciones muy
simples, etc. La labor del diseñador es encontrar el modelo mínimo que satisfaga todos
los requerimientos de su aplicación. De esta forma, minimizará el coste, el hardware y el
software.
Los principales recursos específicos que incorporan los microcontroladores son:
• Temporizadores o “Timers”.
• Perro guardián o “Watchdog”.
30
• Protección ante fallo de alimentación o “Brownout”.
• Estado de reposo o de bajo consumo.
• Conversor A/D.
• Conversor D/A.
• Comparador analógico.
• Modulador de anchura de impulsos o PWM.
• Puertos de E/S digitales.
• Puertos de comunicación.
5.3. Temporizadores o “Timers”
Se emplean para controlar periodos de tiempo (temporizadores) y para llevar la
cuenta de acontecimientos que suceden en el exterior (contadores).
Para la medida de tiempos se carga un registro con el valor adecuado y a
continuación dicho valor se va incrementando o decrementando al ritmo de los impulsos
de reloj o algún múltiplo hasta que se desborde y llegue a 0, momento en el que se
produce un aviso
Cuando se desean contar acontecimientos que se materializan por cambios de nivel
o flancos en alguna de las pines del microcontrolador, el mencionado registro se va
incrementando o decrementando al ritmo de dichos impulsos.
5.4. Perro guardián o “Watchdog”
Cuando el computador personal se bloquea por un fallo del software u otra causa,
se pulsa el botón del reset y se reinicializa el sistema. Pero un microcontrolador funciona
sin el control de un supervisor y de forma continuada las 24 horas del día. El Perro
guardián consiste en un temporizador que, cuando se desborda y pasa por 0, provoca un
reset automáticamente en el sistema.
Se debe diseñar el programa de trabajo que controla la tarea de forma que refresque
o inicialice al Perro guardián antes de que provoque el reset. Si falla el programa o se
bloquea, no se refrescará al Perro guardián y, al completar su temporización, “ladrará y
ladrará” hasta provocar el reset.
31
5.5. Protección ante fallo de alimentación o Brownout”
Se trata de un circuito que resetea al microcontrolador cuando el voltaje de
alimentación (VDD) es inferior a un voltaje mínimo (“brownout”). Mientras el voltaje de
alimentación sea inferior al de brownout el dispositivo se mantiene reseteado,
comenzando a funcionar normalmente cuando sobrepasa dicho valor.
5.6. Estado de reposo o de bajo consumo
Son abundantes las situaciones reales de trabajo en que el microcontrolador debe
esperar, sin hacer nada, a que se produzca algún acontecimiento externo que le ponga de
nuevo en funcionamiento. Para ahorrar energía, (factor clave en los aparatos portátiles),
los microcontroladores disponen de una instrucción especial (SLEEP en los PIC), que les
pasa al estado de reposo o de bajo consumo, en el cual los requerimientos de potencia son
mínimos. En dicho estado se detiene el reloj principal y se “congelan” sus circuitos
asociados, quedando sumido en un profundo “sueño” el microcontrolador. Al activarse
una interrupción ocasionada por el acontecimiento esperado, el microcontrolador se
despierta y reanuda su trabajo.
5.7. Conversor A/D (CAD)
Los microcontroladores que incorporan un Conversor A/D (Analógico/Digital)
pueden procesar señales analógicas, tan abundantes en las aplicaciones. Suelen disponer
de un multiplexor que permite aplicar a la entrada del CAD diversas señales analógicas
desde las pines del circuito integrado.
5.8. Conversor D/A (CDA)
Transforma los datos digitales obtenidos del procesamiento del computador en su
correspondiente señal analógica que saca al exterior por una de las pines de la cápsula.
Existen muchos efectores que trabajan con señales analógicas.
5.9. Comparador analógico
Algunos modelos de microcontroladores disponen internamente de un
Amplificador Operacional que actúa como comparador entre una señal fija de referencia
y otra variable que se aplica por una de las pines de la cápsula. La salida del comparador
proporciona un nivel lógico 1 ó 0 según una señal sea mayor o menor que la otra.
También hay modelos de microcontroladores con un módulo de tensión de
referencia que proporciona diversas tensiones de referencia que se pueden aplicar en los
comparadores.
32
5.10. Modulador de anchura de impulsos o PWM
Son circuitos que proporcionan en su salida impulsos de anchura variable, que se
ofrecen al exterior a través de las pines del encapsulado.
5.11. Puertas de E/S digitales
Todos los microcontroladores destinan algunas de sus pines a soportar líneas de E/S
digitales. Por lo general, estas líneas se agrupan de ocho en ocho formando Puertas.
Las líneas digitales de las Puertas pueden configurarse como Entrada o como Salida
cargando un 1 ó un 0 en el bit correspondiente de un registro destinado a su
configuración.
5.12. Puertos de comunicación
Con objeto de dotar al microcontrolador de la posibilidad de comunicarse con otros
dispositivos externos, otros buses de microprocesadores, buses de sistemas, buses de
redes y poder adaptarlos con otros elementos bajo otras normas y protocolos. Algunos
modelos disponen de recursos que permiten directamente esta tarea, entre los que
destacan:
UART, adaptador de comunicación serie asíncrona.
USART, adaptador de comunicación serie síncrona y asíncrona
Puerta paralela esclava para poder conectarse con los buses de otros microprocesadores.
USB (Universal Serial Bus), que es un moderno bus serie para los PC.
Bus I2C, que es un interfaz serie de dos hilos desarrollado por Philips.
CAN (ControllerArea Network), para permitir la adaptación con redes de conexionado
multiplexado desarrollado conjuntamente por Bosch e Intel para el cableado de
dispositivos en automóviles. En EE.UU. se usa el J185O.
33
CONSIDERACIONES PREVIAS
Las especificaciones USB proveen de propiedades y funciones que pueden ser usadas
por los dispositivos que tengan características similares por ejemplo: un mouse o un
teclado, por sus características pertenecen a la misma clase llamada Dispositivos de
Interfaz Humana (IHD)
La ventaja de utilizar este dispositivo, es evitarnos crear un controlador compatible con el
exterior, como es el caso de la clase CDC (communicationdeviceclass), el cual se tendría
que cargar un programa que realice la detección del puerto por la PC, mientras que en la
HID se instalan sin necesidad de un programa específico (PnP).
Con el entorno de desarrollo de Microchip y bibliotecas libres, se puede integrar las
funciones de USB en cualquier aplicación existente, ya que cuenta con la documentación
34
y herramientas de desarrollo disponibles, así como las características necesarias para la
solución de la actividad requerida. Esto reduce el costo total del sistema.
Por esa razón se selecciona el microcontrolador PIC (ProgrammableIntegratedCircuits)
18F2550, ya que reúne los requisitos necesarios para la comunicación entre el circuito y
el exterior, así como las aplicaciones necesarias para el desarrollo del proyecto, para lo
cual se usara MPLAB para grabar el programa, ensamblarlo en C18 y Visual BASIC
como interfaz gráfica.
6. R
EQUERIMIENTOS PARA LA IMPLEMENTACIÓN DE USB
Microcontrolador o Circuito Integrado que soporte la interface USB
Un programa sobre el periférico para transmitir la información en cualquier
lenguaje de Programación.
Una PC con puertos USB.
Herramientas para programar los Microcontroladores.
Teoría de protocolos RS-232, RS-485
Teoría del Protocolo USB.
Diseño de Hardware.
7. DESARROLLO
La finalidad de este proyecto es establecer una comunicación con el puerto USB del
PIC y la PC controlando tres LED’s conectados al puerto C de salida, por medio de un
par de microswitch que representaran la entrada del mismo puerto del PIC, además
probar la parte analógica del PIC.
Las características de este PIC 18F2550 son las siguientes:
Modulo USB V2, soportando baja velocidad (1.5Mb/s) y alta velocidad (12Mb/s).
Tres puertos de entrada-salida (bidireccionales A,B,C) y uno solo de entrada (E)
35
Un puerto EAUSART
Frecuencia de trabajado hasta 48Mhz, pudiendo utilizar reloj interno.
32 KBytes de memoria Flash.
Soporta más de 32 ENDPOINTS (16 bidireccionales)
16384 palabras de instrucciones.
2048 Bytes SRAM.
Módulos CCP.
Conexión USART, .
10 canales de ADC de 10bits.
Programación en circuito (ICSP).
Niveles de prioridad de interrupciones.
En la Figura 6. Se muestra el encapsulado del PIC 18f2550 PDIP (Plastic Dual In-Line
Package) de 28 pines.
Figura 7.Diagrama de Pines del PIC 18F2550.
POLARIZACIÓN DEL MICROCONTROLADOR
La primera parte del proyecto es polarizar el circuito y cargar el programa para su
funcionamiento. El programa para este microcontrolador podemos dividirlo en dos
partes: un programa residente en un block de memoria del PIC, comúnmente llamado
bootloader, encargado de verificar la existencia del Firmware correspondiente al conectar
el programador al puerto USB. En caso de no encontrarse, los leds comenzarán una
secuencia de encendido en forma intermitente. En caso contrario, el firmware tomará el
control y los leds quedarán encendidos en forma continua.
36
Y la segunda parte, con la cual demostraremos la comunicación entre el circuito y el
exterior, probando los puertos de entrada-salida, el puerto analógico y el serial.
El PIC 18F2550 incluye un circuito PLL (PhaseLockedLoop). Este ha sido previsto
específicamente para aplicaciones USB con osciladores de baja velocidad y también
para ser usado como fuente de reloj para el CPU del microcontrolador.
El oscilador primario forma parte del módulo USB y no se puede asociar a ninguna otra
fuente de reloj.
El módulo USB tiene que ser controlado por la fuente primaria y los otros dispositivos o
el microcontrolador se pueden controlar por fuentes secundarias u osciladores internos
como en el resto de microcontroladores PIC.
Para establecer la operación del oscilador interno del microcontrolador seleccionamos un
cristal externo. Tenemos que dividir el valor de la frecuencia del cristal externo por 4
(divisor PLL Poscaler), para tener la frecuencia de operación del microcontrolador, que
es de 4Mhz. por lo que el valor del cristal será de 20 MHz.
En los modos de oscilador HS, HSPLL, XT y XTPLL de un cristal o resonador cerámico
se conecta en los pines de OSC1 (pin9) y OSC2 (pin 10) para establecer la oscilación. En
la figura 7., muestra la forma de conexión.
Figura 8. Crystal/Ceramic. Operación del resonador
Por las especificaciones del PIC 18F2550 es necesario conectar en paralelo dos
capacitores cerámicos de 15pF, (ver figura5.1.) esto con la finalidad de evitar ruido en el
oscilador. Para el reset, utilizamos POR (reset por subida de tensión), para esto
agregamos un circuito con 1 resistencia (10K), un diodo (1N4148) y un switch en el pin
uno del PIC hacia el voltaje de alimentación VDD.
Queremos que la subida de tensión sea rápida, por lo que seleccionamos este diodo, ya
que es útil para aplicaciones de conmutación de alta respuesta, hasta alrededor de 100
MHz con un tiempo de recuperación inversa de no más de 4 ns, esto nos ayudara a la
pronta respuesta del circuito.
37
Por último e los pines 19 y 20 se conecta un capacitor cerámico con valor de 1uF, esto
con la finalidad de eliminar el ruido a la entrada del voltaje (VDD).
De acuerdo a lo anterior, utilizamos los siguientes elementos:
Cristal oscilador de 20Mhz
Capacitor electrolítico de 470nF
Capacitores cerámicos de 15 pF y 1 de 0.1uF
1 Resistencia de 10K
Conector USB (D+, D-, GND, VDD).
Botón Reset
En la Figura 8. Se muestran los elementos conectados al PIC para su funcionamiento.
Figura 9. Circuito Eléctrico del PIC 18F2550 con modulo USB.
Solo se utilizan los pines descritos en la Fig.8.y en la tabla 8. Se muestran sus
características.
NOMBRE DEL PIN No.
PIN
TIPO DE
PIN
TIPO
DE
BUFER
DESCRIPCION
MCLR/VPP/RE3
1 I
ST
Borrado General (entrada) o tensión de programación (de entrada).
MCLR Borrado (Reset) de entrada. Este pin se activa en bajo
VPP P Entrada de tensión de programación.
38
RE3 I entrada digital
OSC1/CLKI 9 I Analog
Oscilador de cristal o entrada de reloj externo.
OSC1 Entrada del Cristal Oscilador o entrada de la fuente de reloj externa.
OSC2/CLKO/RA6 10
I/O
oscilador de cristal o salida de reloj
OSC2 O Salida de oscilador de cristal. Se conecta al cristal o resonador
VSS 8,19 p referencia a tierra para I/O
VDD 20 p fuente de energía positiva para I/O
Tabla 8.Caractreristícas de los pines utilizados para polarizar el microcontrolador.
Una vez terminado el circuito y cargando el programa en el PIC se conecta al puerto
USB de la PC, enviándonos la pantalla que se muestra en la Figura 9.
Figura 10. Imagen desplegada de detección del puerto USB IDH.
La Figura 9., muestra que el nuevo puerto se ha detectado. Así podemos concluir que
el programa, así como el microprocesador está funcionando.
8.1. CIRCUITO DE PRUEBA
Para poder ver el funcionamiento del circuito polarizado y probar los puertos de entrada,
salida y A/D, agregamos el circuito mostrado en la Figura 10., el cual contiene switch’s
para representar las entradas PIN 13(RC2) Y PIN 17(RC6), leds para representar las
39
salidas PIN11 (RC0), PIN1 (RC1), 2PIN18 (RC7), y una resistencia variable para
representar el convertidor analógico de entrada PIN2 (AN0).
Figura 11. Conexiones del circuito de prueba al PIC 18F2550.
Los componentes se conectaron a los pines de la figura 9., los cuales se describen en la
tabla 9.
NOMBRE DEL PIN No.
PIN
TIPO DE
PIN
TIPO
DE
BUFER
DESCRIPCION
RA0/AN0
2
Bidireccional
RA0 I/O TTL Digital I/O
AN0 I Analog Analógico de entrada 0
RC0/T1OSO/T13CKI
11
ST
puerto C Bidireccional I/O
RC0 I/O Digital I/O
T1OSO O salida del oscilador
RC1/T1OSI/CCP2/UOE
12 I/O ST
RC1 Digital I/O
CCP2(2) Captura 2 de entrada / salida de comparación 2 / PWM 2 de salida.
RC2/CCP1
13 I/O ST
RC2 Digital I/O
CCP1 Captura 2 de entrada / salida de comparación 2 / PWM 2 de salida.
VUSB 14 O regulador interno de voltaje a 3.3 v
RC4/D-/VM 15
RC4 I TTL Entrada digital
DVM I/O línea diferencial negativa USB (I/O)
RC5/D+/VP 16
RC5 I TTL Entrada digital.
D+ I/O Diferencial USB plus de línea (entrada / salida).
RC6/TX/CK 17
40
RC6 I/O ST Digital I / O.
TX O EUSART asíncrono de transmisión.
CK I/O ST EUSART reloj síncrono (ver RX / DT).
RC7/RX/DT/SDO 18
RC7 I/O ST Digital I / O.
RX I Receptor Asíncrono EUSART.
DT I/O EUSART datos síncronos (ver TX / CK).
Tabla 9.Descripción de los pinesutilizados por el circuito de prueba.
Como se había mencionado anteriormente tenemos tres puertos de entrada-salida
y uno solo de entrada. Para nuestros fines demostrativos, solo utilizaremos un puerto (C).
El PORTC es un puerto bidireccional de 7bits de ancho. El registro de la
dirección de los datos es TRISC. Activar el bit TRISC (=1) hará que el pin
correspondiente de PORTC sea una entrada (es decir, pone el conductor correspondiente
de la salida en un modo alta impedancia). Borrar un bit de TRISC (=0) hace que el pin
correspondiente de PORTC sea una salida (es decir, pone el contenido del latch de
salida en el pin seleccionado).
Al permitir funciones periféricas en los pines de PORTC con excepción de RC4 y
de RC5, hay que tener cuidado al definir los bits de TRIS. Algunos periféricos eliminan el
bit TRIS para configurar un pin como salida, mientras que otros periféricos activan el bit
TRIS para configurar un pin como entrada.
Este puerto lo utilizaremos como entrada para los switch’s y como salida para los
leds, esto para fines prácticos y de programación, haciendo mención que los puertos
restantes están disponibles y pueden utilizarse para otras actividades; esto es lo práctico y
robusto de nuestro PIC.
En cuanto a la programación utilizaremos el lenguaje C y el compilador C18 de
microchip. Iniciamos definiendo las variables requeridas para decirle a la función main
que realizara dentro del circuito de prueba.
/************ DEFINICIONES DE LOS LED’S ************/ #define mInitAllLEDs() LATCbits.LATC0 = 0; TRISCbits.TRISC0=0; LATCbits.LATC1 = 0; TRISCbits.TRISC1=0; LATCbits.LATC7 = 0; TRISCbits.TRISC7=0; #define mLED_1 LATCbits.LATC0 #define mLED_2 LATCbits.LATC1 #define mLED_3 LATCbits.LATC7 #define mGetLED_1() mLED_1
41
#define mGetLED_2() mLED_2 #define mGetLED_3() mLED_3 #define mLED_1_On() mLED_1 = 1; #define mLED_2_On() mLED_2 = 1; #define mLED_3_On() mLED_3 = 1; #define mLED_1_Off() mLED_1 = 0; #define mLED_2_Off() mLED_2 = 0; #define mLED_3_Off() mLED_3 = 0; #define mLED_1_Toggle() mLED_1 = !mLED_1; #define mLED_2_Toggle() mLED_2 = !mLED_2; #define mLED_3_Toggle() mLED_3 = !mLED_3; /************DEFINICION DE SWITCH**************/ #define mInitAllSwitches() TRISCbits.TRISC2=1;TRISCbits.TRISC6=1; #define mInitSwitch2() TRISCbits.TRISC2=1; #define mInitSwitch3() TRISCbits.TRISC6=1; #define sw2 PORTCbits.RC2 #define sw3 PORTCbits.RC6 /************DEFINICION DE POT**************/ #define mInitPOT() {TRISAbits.TRISA0=1;ADCON0=0x01;ADCON2=0x3C;ADCON2bits.ADFM = 1;} /** USBtransreceptor externo (opcional) ******************/ #define tris_usb_vpo TRISBbits.TRISB3 // Output #define tris_usb_vmo TRISBbits.TRISB2 // Output #define tris_usb_rcv TRISAbits.TRISA4 // Input #define tris_usb_vp TRISCbits.TRISC5 // Input #define tris_usb_vm TRISCbits.TRISC4 // Input #define tris_usb_oe TRISCbits.TRISC1 // Output #define tris_usb_suspnd TRISAbits.TRISA3 // Output /************ DEFINICION DE LOS PUERTOS I/O ********************/ #define INPUT_PIN 1 #define OUTPUT_PIN 0
8.2. PRIMER PROGRAMA.
Una vez establecida la comunicación entre el circuito y la PC, queremos probar
los puertos de entrada y salida, así como el puerto analógico del PIC. Para esto utilizamos
el siguiente programa.
En el archivo processIO se encarga de decidir las posibles entradas y salidas, de acuerdo
a los datos recibidos vía USB.
voidProcessIO(void)
{
//los leds parpadean de acuerdo al estado del dispositivo USB. Esta o no desconectado del exterior
if(blinkStatusValid)
{
BlinkUSBStatus();
42
}
if((USBDeviceState< CONFIGURED_STATE)||(USBSuspendControl==1)) return;
if(!HIDRxHandleBusy(USBOutHandle)) //verifica si los datos son recibidos desde el host.
{
switch(ReceivedDataBuffer[0]) // ve que datos envió el host, para ver qué tipo de
//comando se envió para usar la aplicación necesaria.
{
case 0x80: //ToggleLEDscommand
blinkStatusValid = FALSE; //detiene automáticamente el parpadeo de los leds, ahora se
hará //de forma manual
if(mGetLED_1() == mGetLED_2())
{
mLED_1_Toggle();
mLED_2_Toggle();
mLED_3_Toggle();
}
else
{
if(mGetLED_1()
{
| mLED_3_Off();
mLED_2_On();
}
else
{
mLED_2_Off();
mLED_3_On();
}
}
break;
Cuando conectamos el circuito a la PC, los led’s inician con una frecuencia intermitente,
lo cual nos indica que el microcontrolador está en funcionamiento y en espera de
instrucciones, al oprimir el switch le estamos enviando una determinada instrucción, lo
cual deja de parpadear e inicia el programa anterior, el cual hace lo siguiente:
Va a encender el led 1 y 2 mientras que el tercero estará apagado, de lo contrario si el led
3 está encendido el led 1 y 2 se apagaran.
Con esto podemos demostrar que los puertos tanto de entrada como salida están
funcionando correctamente.
Para probar el puerto analógico vamos a utilizar la resistencia variable (potenciómetro)
conectada en el puerto 2 (AN0) del PIC, para medir el voltaje analógico de este puerto, y
el programa para hacerlo es el siguiente:
Se define la variable WORD_VAL y se llaman las siguientes funciones:
43
WORD_VAL ReadPOT(void) { WORD_VAL w; mInitPOT(); ADCON0bits.GO = 1; // Start AD conversion while(ADCON0bits.NOT_DONE); // Wait for conversion w.v[0] = ADRESL; w.v[1] = ADRESH w.Val = ADC1BUF0; #endif return w; } case 0x37: //lee el comando del POT. Utiliza ADC para medir el voltaje analógico en uno de los pines
//de I/O (AN0), y regresa el resultado al host. { WORD_VAL w; if(!HIDTxHandleBusy(USBInHandle)) { mInitPOT(); w = ReadPOT(); // /utiliza ADC para leer el voltaje en los pines de I/O. ToSendDataBuffer[0] = 0x37; ToSendDataBuffer[1] = w.v[0]; //Mide el voltaje analógico LSB ToSendDataBuffer[2] = w.v[1]; //Mide el voltaje analógico MSB USBInHandle = HIDTxPacket(HID_EP,(BYTE*)&ToSendDataBuffer[0],64); } } break; }
CONCLUSIONES:
En un principio la decisión era usar un microcontrolador AVR de ATMEL
porque esta opción era la más viable, por su diseño simple y la facilidad de
programación, pero tenía un inconveniente; que no existía en el mercado con puerto serial
e interfaz USB, por lo que, decidimos utilizar el PIC de la empresa microchip, está fue la
solución a nuestras necesidades, principalmente por contar con los dos puertos, además
de la existencia de herramientas de desarrollo gratuitas y/o de bajo costo.
44
Estos microcontroladores están soportados por tarjetas de desarrollo de costo
razonable, capaces de descargar el código al microcontrolador, y por una versión de las
herramientas GNU. Esto último, es posible por su uniformidad en el acceso al espacio de
memoria, propiedad de la que carecen los procesadores de memoria segmentada o por
bancos.
La decisión específica del uso del PIC 18F2550 fue tomada bajo los parámetros
de bajo costo y facilidad de funcionamiento, en relación a los AVR’s. Otro de los
motivos por los cuales seleccionamos este PIC fue la disponibilidad en el mercado y
características suficientemente robustas para implementar este proyecto, las cuales se
adaptan a las necesidades requeridas.
Si bien es cierto, que en este proyecto no se están utilizando todas las
características del PIC 18F2550, podemos decir que se utiliza lo necesario para el
funcionamiento de nuestra aplicación como lo es el puerto USB, con lo que se puede
hacer la comunicación con elexterior y el puerto EUSART que se puede utilizar para la
comunicación de la PC a la tarjeta y enviar datos desde el puerto USB.
Otra de las razones por el cual escogimos este microcircuito es la utilización de
librerías libres para el desarrollo de la aplicación y el lenguaje de programación de alto
nivel, el cual se reduce en código comparado con el lenguaje ensamblador.
RECOMENDACIONES
En el momento de iniciar la implementación de cualquier proyecto, en el cual se utilizara
un microcontrolador debemos decidirnos por un que emplee un diseño concreto y sea
robusto y fácil su lenguaje de programación. Hay que tener en cuenta varios factores,
como la documentación y herramientas de desarrollo disponibles y su precio, la
disponibilidad en el mercado y por supuesto las características del microcontrolador (tipo
de puertos que contiene, de memoria de programa, número de temporizadores,
interrupciones, etc.).
45
En el presente proyecto se utilizó el PIC 18F2550, este microcontroladores tiene la
opción de grabarse desde circuito utilizando el puerto ICSP.
Este medio de grabación tiene la ventaja de que sólo una vez se programa, los cambios y
actualizaciones del firmware se podrán realizar directamente desde la interfaz de usuario
en la PC, solo hay que utilizar pines 2 y 3 (RA0 - RA1) del puerto A, ya que están
destinados como interfaz de comunicación del protocolo ICSP entre el programador y los
microcontroladores soportados por éste, a través del conector ICSP (terminales 1 y 2,
Figura5.). Los datos por el pin 2 son bidireccionales, sincronizados por una señal de reloj
con salida por el pin 3.
Se puede optar por utilizar otra opción para realizar este proyecto, esta es utilizando una
clase diferente a la HID (Human Interface Device), por ejemplo la CDC
(ComunicationDiveceClass), esta puede utilizarse si queremos rapidez de respuesta y
ocupar un puerto virtual para simular el puerto serial, pero tendríamos que utilizar
controladores (drivers) para su funcionamiento (archivo INF) para instalar, lo cual se
traduciría en más tiempo y costo para la realización del proyecto.
BIBLIOGRAFIA
Jan Axelson. (1999-2009). Serial Port Complete: COM Ports, USB Complete Fourth
Edition, and Developer´s guide. Lakeview Research LLC, 5310 Chinook Ln., Madison
WI 53704
http://ww1.microchip.com/downloads/en/DeviceDoc/manual_STD952.pdf
HI-TECH Software. (2010). HI-TECH PICC-18 STD Compiler. Manual, 435.
46
http://ww1.microchip.com/downloads/en/DeviceDoc/39632b.pdf
Microchip. (2004). 28/40/44-Pin High-Performance, Enhanced Flash USB
Microcontrollers with nanoWatt Technology. Data Sheet, 424.
Eric López Pérez. (2010). Protocolo USB (UNIVERSAL SERIAL BUS) Teoría. 2014, de
Ingeniería en Microcontroladores Sitio web: http://www.i-
micro.com/pdf/articulos/usb.pdf