Diagramas - estetousb

Anuncio
Especificación
de Diseño
Materia
Técnicas Digitales III – 2009
Alumno
Leandro Arcusin
Docentes
Prof.: Ing. Sebastián Viviani
JTP.: Ing. Gustavo Nudelman
Especificación de Diseño 2009
Indice
Diagramas............................................................................................................................................ 2
Descripción del Sistema ...................................................................................................................... 4
Esquemáticos ...................................................................................................................................... 5
Microcontrolador ............................................................................................................................ 5
Acondicionador de audio ................................................................................................................ 6
Circuitos impresos ............................................................................................................................... 8
Microcontrolador ............................................................................................................................ 8
Acondicionador de audio ................................................................................................................ 8
Firmware ........................................................................................................................................... 10
Introducción .................................................................................................................................. 10
Implementación del Dispositivo Clase Audio ................................................................................ 10
Comentarios sobre el código......................................................................................................... 13
Funciones principales ................................................................................................................ 14
USB callback functions .............................................................................................................. 17
Diagramas
Diagrama 1: Diagrama de bloques ...................................................................................................... 4
Diagrama 2: Esquemático del microcontrolador ................................................................................ 5
Diagrama 3: Esquemático del acondicionador de audio..................................................................... 6
Diagrama 4: Esquemático del acondicionador de audio..................................................................... 7
Diagrama 5: Impreso del microcontrolador ........................................................................................ 8
Diagrama 6: Impreso del acondicionador de audio ............................................................................ 9
Diagrama 7: Estructura del micrófono .............................................................................................. 11
Diagrama 8: Jerarquía de los descriptores para un micrófono ......................................................... 12
- | Leandro Arcusin
2
Especificación de Diseño 2009
- | Leandro Arcusin
3
Especificación de Diseño 2009
Descripción del Sistema
El sistema consiste en 3 partes principales que se observan en el siguiente diagrama de bloques
Esteto USB
Sonda
fonocaptora
Acondicionador
de audio
Conexión USB
Microcontrolador
Diagrama 1: Diagrama de bloques
El objetivo de esta cadena es la de obtener sonidos de la capsula de un estetoscopio y transferirlas
a una computadora, ya sea para su almacenamiento o procesamiento.
Sonda fonocaptora
Se trata de una capsula electret debidamente acoplada a la campana de un estetoscopio. Debe
dejarse entre la campana y la posición en la que se encuentra la sonda un pequeño pedazo de
manguera de forma tal de generar una columna de aire que aumente la sensibilidad de la capsula
electret a los sub-sonidos que se pretenden captar.
Acondicionado de audio
Esta etapa acondiciona la señal proveniente de la capsula electret a través de una serie de filtros y
amplificadores de forma tal de obtener una señal “limpia”, con información únicamente de las
frecuencias de interese (de 10 a 500 Hz aproximadamente) y con los niveles óptimos para ingresar
a conversor analógico digital del microcontrolador.
Microcontrolador
Cumple con dos funciones básicas: manejar la comunicación USB con la computadora y digitalizar
las señales provenientes de la etapa previa.
- | Leandro Arcusin
4
Especificación de Diseño 2009
Esquemáticos
Microcontrolador
El circuito del microcontrolador contiene los siguientes componentes a destacar:

Conector USB tipo B

Circuito de reset

Circuito de ingreso en modo bootloader

4 leds indicadores

Capacitor para regulador interno de 3,3 V
Se trata de un PIC18F4550, este fue elegido por dos motivos principales: la familiaridad del
alumnos con dicho dispositivo y su lenguaje de programación y el hecho de tener incorporado un
SIE (serial interface engine) USB compatible. Es decir que trae incorporado el hardware necesario
para conectarlo a un BUS usb y provee los recursos (hard y soft) para el desarrollo de distintas
aplicaciones.
Diagrama 2: Esquemático del microcontrolador
- | Leandro Arcusin
5
Especificación de Diseño 2009
Acondicionador de audio
El circuito desarrollado para esta etapa fue basado en el siguiente circuito:
Diagrama 3: Esquemático del acondicionador de audio
Este circuito presenta el inconveniente de utilizar una fuente partida de ± 9 V, y en nuestro caso se
quiere que el circuito sea alimentado enteramente a través de la conexión USB que es de solo 5 V.
Por otra parte se retiró el indicador de pulsos compuesto por el operacinal U4 y el led D1 y se
modificó la ultima etapa para obtener una señal de 0-5 V con un valor medio de 2,5 V para
aprovechar el rango dinámico del ADC incorporado en el microcontrolador.
El circuito resultante fue el siguiente:
- | Leandro Arcusin
6
Especificación de Diseño 2009
Diagrama 4: Esquemático del acondicionador de audio
- | Leandro Arcusin
7
Especificación de Diseño 2009
Circuitos impresos
Microcontrolador
Diagrama 5: Impreso del microcontrolador
Acondicionador de audio
- | Leandro Arcusin
8
Especificación de Diseño 2009
Diagrama 6: Impreso del acondicionador de audio
- | Leandro Arcusin
9
Especificación de Diseño 2009
Firmware
Introducción
El firmware es el programa cargado en el microcontrolador PIC18F4550. Está programado en
lenguaje C y compilado con la versión C18 Student Version que ofrece el fabricante Microchip.
El objetivo del programa es controlar las funciones del microcontrolador de forma tal que realice
las tareas necesarias para establecer la comunicación con la computadora y la adquisición de las
señales del estetoscopio.
El entorno de desarrollo (o IDE) fue el MPLAB v8.30, software que también proporciona el
fabricante del chip de forma gratuita.
Utilizamos para realizar nuestra aplicación una serie de ejemplos que provee Microchip,
mostrando la utilización del USB en sus microcontroladores y donde ofrece un framework que
implementa el stack USB facilitando el desarrollo de las aplicaciones sobre esta tecnología.
En cuanto a herramientas de debugging no disponíamos de ninguna al momento de desarrollar el
proyecto, con lo cual acudimos al rustico, pero siempre presente, debugging a LED. Esto es,
encender o apagar LEDs auxiliares para detectar en qué puntos del programa se detenía la
ejecución del firmware.
Para la comunicación USB utilizamos una versión de prueba del USBlyzer (v 1.5).
Implementación del Dispositivo Clase Audio
Para el funcionamiento del estetoscopio USB decidimos implementar un dispositivo clase audio.
Esta es una de las clases que define la norma USB. Hacerlo de esta forma permite utilizar para la
comunicación del mismo con la PC drivers genéricos que tanto Windows®, Mac® y GNU/Linux
contienen en forma nativa. Esto hace que el dispositivo sea reconocido inmediatamente por el
S.O. sin necesidad de instalar drivers externos y, claro, tener que desarrollarlos.
Como nuestro dispositivo entrega envía audio a la PC, y siguiendo con la lógica de utilizar un
dispositivo de la clase ya existente, decidimos implementar un micrófono.
Afortunadamente en la documentación de la clase audio (que se encuentra adjunta) hay un
ejemplo de cómo implementar este tipo de dispositivos. Por otra parte Microchip ofrece un
framework sobre el cual trabajar para implementar Audio Class devices .
- | Leandro Arcusin
10
Especificación de Diseño 2009
Todas estas definiciones se ponen de manifiesto en los descriptores que se encuentran en el
archivo usb_descriptors.c
Según la norma, debemos implementar una serie de descriptores que permitan representar la
siguiente estructura:
Diagrama 7: Estructura del micrófono
IT (Input Terminal) representa a la cápsula electret y al conversor analógico digital.
OT (Output Terminal) representa el endpoint de entrada para la función de audio.
Por otra parte se observa que hay dos interfaces definidas. La primera de ellas, AudioControl, es
obligatoria. Todos los dispositivos de audio deben definir esta interfase. En esta se encuentran (si
los tuviera) los controles del dispositivo como el volumen, tono, frecuencia de muestreo, etc.
La segunda interfase es la AudioStreaming y esta presenta 2 alternate settings. La primera (alt.
setting 0) no define ningún endpoint y por lo tanto tiene un ancho de banda asociado nulo. Este
setting lo elige el host cuando desea liberar ancho de banda, por ejemplo cuando el micrófono no
está en un porque no hay ningún programa que pueda procesar audio abierto. Al abrir algún
programa dónde se requiera la entrada de audio, el host envía un SET_INTERFACE que es un
standard request, y está definido en el capítulo 9 de la norma USB.
Este altérnate setting 1, define un endpoint isochronous de entrada, por donde envía el audio.
En todos los descriptores (salvo en el de device), se utilizan además de los descriptores estándar,
descriptores del tipo class especific, que son aquellos que define en particular la clase audio para
dispositivos de este tipo.
Es de gran ayuda para comprender como están articulados los descriptores un gráfico que se
encuentra en el documento Device Class Definition for Audio Devices (rev 1.0), apéndice B.
- | Leandro Arcusin
11
Especificación de Diseño 2009
Diagrama 8: Jerarquía de los descriptores para un micrófono
A nivel del firmware estos descriptores y los string descriptors están implementados como look up
tables alojadas en la ROM del micro. Estos se manejan a través de un conjunto de arrays que son
apuntados por unos arrays de punteros a descriptores y su utilización está implementada en el
framework que ofrece Microchip.
- | Leandro Arcusin
12
Especificación de Diseño 2009
Comentarios sobre el código
El firmware está compuesto por 3 archivos principales:

main.c: contiene las rutinas de lectura de señales del estetoscopio, actualización del
estado de los LEDs que indican el funcionamiento y la implementación de rutinas de
atención a eventos particulares del USB .

usb_device.c: es un archivo provisto como parte del framework que ofrece microchip,
contiene funciones y definiciones que hacen al uso del dispositivo USB y el manejo de los
datos asociados.

usb_descriptors.c: es un archivo donde se encuentran los descriptores del dispositivo USB.
También encontramos otros archivos que hacen de soporte a los primeros:

HardwareProfile.h: contiene definiciones respecto del hardware utilizado

usb_ch9.h: contiene definiciones y estructuras de datos que se pueden usar en un
dispositivo USB, especificadas en el capítulo 9 de la norma.

usb_common.h: contiene definiciones y estructuras de datos que se utilizaran con el SIE
(Serial Interface Engine), que es el periférico USB incorporado en el chip.

usb_device.h: son las definiciones, prototipos y estructuras de datos que se necesitan
para trabajar con el archivo usb_device.c

usb_function_audio.c: contiene todas las funciones, macros, definiciones, variables y
estructuras de datos que se necesitan para trabajar con un Audio class device.

usb_hal.h y usb_hal_pic18.h: como el framework que provee Microchip es genérico y
sirve para trabajar con micros de distintas familias, estos archivos se ocupan de adaptar
las definiciones al periférico especifico que contiene la familia PIC18, que es con el que
estamos trabajando.
- | Leandro Arcusin
13
Especificación de Diseño 2009
Funciones principales
Función principal (main)
La función llama a una función de configuración (InitializeSystem) y luego queda en un bucle
infinito en el que se ejecutan 2 funciones. Una que se ocupa de las tareas del dispositivo USB y
otra que se ocupa de procesar las entradas y salidas.
Debe notarse que se usa el método de polling para atender la comunicación USB. Sin embargo, se
deja toda una estructura de #defines e #ifdef para pasar de polling a interrupciones.
InitializeSystem
Llama a 2 funciones, MyInit() y USBDeviceInit(). La primera es la función de inicialización nuestra,
que es explicada más abajo, la otra es una función parte del framework que inicializa el SIE
(periférico USB) y será explicada en detalle más adelante.
El modificador static en la función indica que la función no es implícitamente extern como lo son el
resto de las funciones.
USBDeviceInit
Inicializa todos los registros, flags, variables y buffers que se utilizan para el manejo de la
comunicación USB.
MyInit
Inicializa entradas y salidas, configura el timer 0 y el ADC.
- | Leandro Arcusin
14
Especificación de Diseño 2009
ProcessIO
Llama a BlinkUSBStatus y en caso de que se encuentre configurada la interface 0, alternativa 1 (la
que tiene ancho de banda asociado), chequea si pasó el tiempo de muestreo (8 kHz) y agrega una
muestra al buffer de audio luego de hacerla pasar por un filtro de media móvil. En caso de
acumular 8 nuevas muestras (16 bytes) setea un flag que le indica a la función Microphone (ver
abajo) que envie esas muestras por el endpoint de entrada.
BlinkUSBStatus
Función que genera un patrón de parpadeos en los LEDs de la placa según el estado del dispositivo
USB.
Estado
DETTACHED
ATTACHED
POWERED
DEFAULT
ADDRESS
CONFIGURED
Código
Ambos LEDs apagados
Ambos encendidos
Sólo el LED1 encendido
Sólo el LED2 encendido
LED1 parpadeando, LED2 apagado
Ambos LEDs parpadeando
alternativamente
Este es el estado deseable de ver cuando
el dispositivo ha sido conectado
USBDeviceTasks
Esta función es la máquina de estados principal que atiende a la comunicación USB. Es
recomendado llamarla, según el framework, cada 100 µs al menos o a la velocidad que es esperan
los data out desde el host. Dada la envergadura de esta función se adjunta una tabla de los
estados posibles y acciones que ejecuta la función en cada uno de ellos.
Estado
Desconectado (físicamente)
DETACHED_STATE
ATTACHED_STATE
Acción
Deshabilita el SIE y pasa a DETACHED_STATE y retorna.
Inicializa los registros del SIE y configura el módulo llamando a la
macro SetConfigurationOptions (habilita pull ups, lo pone en full
speed, habilita los ping pong buffers y habilita el internal receiver;
además habilita algunas fuentes de interrupción). Pasa a
ATTACHED_STATE.
Si no hay una condición de SE0 (está reseteado o terminando de
resetearse) borra las interrupciones, enmascara todas las
interrupciones salvo la de Reset y la de Idle. Pasa a
- | Leandro Arcusin
15
Especificación de Diseño 2009
POWERED_STATE
DEFAULT_STATE
POWERED_STATE.
Si llega un Reset del bus, llama a USBDeviceInit() y luego apunta
los Buffer Descriptor Tables (BDT) del endpoint 0 out a la look up
table de configuración y se pone en DEFAULT_STATE.
Si llega una interrupción de Transaction Completei lee el USTAT y
analiza desde que endpoint llegó la comunicación. Si se trata del
endpoint 0 llama a USBCtrlEPService() sino utiliza un handler para
el evento pasándole una copia de USTAT como parámetro. Esto lo
hace 4 veces pues USTAT es en realidad una FIFO de 4 bytes.
USBCtrlEPService
Si la transacción fue EP0 OUT apunta al BDT del endpoint correspondiente y prepara el puntero a
la próxima transferencia de este tipo. Si EP0 Out era un SETUP PACKET entonces copia la trama
entrante al buffer que ha sido definido para este tipo de paquetes: SetupPkt. Luego llama a
USBCtrlTrfSetupHandler(). Si no era del tipo SETUP PACKET entonces llama a la función
USBCtrlTrfOutHandler().
Si se trataba de un EP0 IN llama a USBCtrlTrfInHandler().
Microphone
Si no hay una transmisión en progreso y el buffer de entrada ya tiene 16 nuevos bytes para enviar,
entonces calcula cual es el primero de estos bytes a enviar y copia la trama de 16 bytes al buffer
de salida. Una vez hecho esto llama la función USBTxOnePacket() pasándole como parámetros el
endpoint de salida (EP1_Out), un puntero a los datos y la cantidad de bytes a transmitir.
USBTxOnePacket
Carga el BDT del endpoint que recibió como parámetro con el puntero que recibió, la cantidad de
datos a enviar y las mascaras correspondientes según sea DATA0 o DATA1, y si esta trabajando con
ping pong buffers (es decir, uno para los datos EVEN y otro para los ODD) también setea el
próximo buffer.
Devuelve un USB_HANDLE, que es un puntero, a la BDT que utilizó para luego poder conocer el
estado de la comunicación.
- | Leandro Arcusin
16
Especificación de Diseño 2009
USB callback functions
Se trata de un conjunto de funciones previstas por el framework. Estas son invocadas ante
determinados eventos del stack USB, como el SOF, errores, la instrucción del host de wake from
suspend, etc. También implementan la atención a requests que no sean obligatorios como la
orden de SETUP: SET_DESCRIPTOR.
Comentaremos a continuación las funciones más importantes de esta serie, pues no todas ellas
fueron implementadas.
void USBCBInitEP(void)
Inicializa el endpoint por el que se va a realizar el envio de audio. Esto ocurre luego de que el host
envía un pedido de SET_CONFIGURATION.
i
Esta interrupción va a llegar cada vez que se termine una trama, para mayor claridad ver figura 17-9 del
documento DS39632D de Microchip “Pic 18F4550 Datasheet”
- | Leandro Arcusin
17
Descargar