52
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

Implementación de Interface USB con microcontrolador PIC

  • Upload
    others

  • View
    9

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Implementación de Interface USB con microcontrolador PIC

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

Page 2: Implementación de Interface USB con microcontrolador PIC

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.

Page 3: Implementación de Interface USB con microcontrolador PIC

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

Page 4: Implementación de Interface USB con microcontrolador PIC

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

Page 5: Implementación de Interface USB con microcontrolador PIC

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

Page 6: Implementación de Interface USB con microcontrolador PIC

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

Page 7: Implementación de Interface USB con microcontrolador PIC

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

Page 8: Implementación de Interface USB con microcontrolador PIC

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.

Page 9: Implementación de Interface USB con microcontrolador PIC

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.

Page 10: Implementación de Interface USB con microcontrolador PIC

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.

Page 11: Implementación de Interface USB con microcontrolador PIC

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

Page 12: Implementación de Interface USB con microcontrolador PIC

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).

Page 13: Implementación de Interface USB con microcontrolador PIC

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

Page 14: Implementación de Interface USB con microcontrolador PIC

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

Page 15: Implementación de Interface USB con microcontrolador PIC

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

Page 16: Implementación de Interface USB con microcontrolador PIC

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

Page 17: Implementación de Interface USB con microcontrolador PIC

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)

Page 18: Implementación de Interface USB con microcontrolador PIC

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

Page 19: Implementación de Interface USB con microcontrolador PIC

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

Page 20: Implementación de Interface USB con microcontrolador PIC

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.

Page 21: Implementación de Interface USB con microcontrolador PIC

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

Page 22: Implementación de Interface USB con microcontrolador PIC

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

Page 23: Implementación de Interface USB con microcontrolador PIC

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.

Page 24: Implementación de Interface USB con microcontrolador PIC

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

Page 25: Implementación de Interface USB con microcontrolador PIC

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.

Page 26: Implementación de Interface USB con microcontrolador PIC

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

Page 27: Implementación de Interface USB con microcontrolador PIC

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

Page 28: Implementación de Interface USB con microcontrolador PIC

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

Page 29: Implementación de Interface USB con microcontrolador PIC

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:

Page 30: Implementación de Interface USB con microcontrolador PIC

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.

Page 31: Implementación de Interface USB con microcontrolador PIC

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.

Page 32: Implementación de Interface USB con microcontrolador PIC

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

Page 33: Implementación de Interface USB con microcontrolador PIC

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

Page 34: Implementación de Interface USB con microcontrolador PIC

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

Page 35: Implementación de Interface USB con microcontrolador PIC

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”.

Page 36: Implementación de Interface USB con microcontrolador PIC

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.

Page 37: Implementación de Interface USB con microcontrolador PIC

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.

Page 38: Implementación de Interface USB con microcontrolador PIC

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.

Page 39: Implementación de Interface USB con microcontrolador PIC

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

Page 40: Implementación de Interface USB con microcontrolador PIC

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)

Page 41: Implementación de Interface USB con microcontrolador PIC

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.

Page 42: Implementación de Interface USB con microcontrolador PIC

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.

Page 43: Implementación de Interface USB con microcontrolador PIC

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.

Page 44: Implementación de Interface USB con microcontrolador PIC

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

Page 45: Implementación de Interface USB con microcontrolador PIC

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

Page 46: Implementación de Interface USB con microcontrolador PIC

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

Page 47: Implementación de Interface USB con microcontrolador PIC

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();

Page 48: Implementación de Interface USB con microcontrolador PIC

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:

Page 49: Implementación de Interface USB con microcontrolador PIC

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.

Page 50: Implementación de Interface USB con microcontrolador PIC

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.).

Page 51: Implementación de Interface USB con microcontrolador PIC

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.

Page 52: Implementación de Interface USB con microcontrolador PIC

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