Video-tutorial de la semana

domingo, 26 de septiembre de 2010

El PSoC CY8C29466

En un post pasado se vio la introducción a los PSoC, puedes verlo dando clic aquí, el articulo créanme ha tenido muy poco interés, lo veo en el contador de visitas de la página, el contador de la página muestra las visitas que vienen de búsquedas desde Google, y la verdad son contadas las visitas que recibo haciendo referencia a búsquedas relacionadas con los circuitos integrados PSoC, recibo más visitas desde Google que provienen de búsquedas de VHDL, FPGA, sistemas digitales, el objetivo que me he trazado en relación a este tema, es mostrar esta tecnología para promover su uso, pues estos circuitos integrados son muy poderosos, imagine el lector estos chips tienen componentes que ni los microcontroladores de Microchip tienen (por ejemplo un simple amplificador o un ADC y DAC juntos, ningún microcontrolador de Microchip lo tiene), así que vale la pena conocerlos, entonces, iniciemos con el segundo artículo de esta serie.

El PSoC CY8C29466


Cypress al igual que Microchip o cualquier fabricante de microcontroladores tiene una larga lista de chips, muy parecidos, y los agrupan en familias, por eso está la familia PIC16, PIC18 de Microchip como referencia, Cypress no es la excepción tiene tres familias de PSoC, el PSoC 1 y otras dos familias la PSoC3 y la PSoC 5, cada familia consta de muchos circuitos integrados, por ejemplo, regresando a Microchip, la familia PIC16, tiene un muchos chips, por ejemplo, el PIC16F84A, el PIC16F73 o el PIC16F877A etc. así también los PSoCs de Cypress, la familia PSoC 1, tiene varios exponentes, por ejemplo el CY8C29466, el CY8C29866 etc, de toda esa familia se elige uno para su análisis, y para en un futuro realizar algnos diseños con ellos, el PSoC elegidos es el CY8C29466, por la simple y sencilla razón que es el que se tiene en el laboratorio del ITESI.

Diagrama a bloques del CY8C29466

La figura muestra el diagrama a bloques de la familia PSoC 1, especificamente de la serie de circuitos integrados cuyo numero de parte es el: CY8C29X66



En la figura anterior se puede ver que El PSoC cuenta con cuatro grandes bloques:

• El nucleó PSoC (PSoC Core)
• El Sistema analógico (Analog System)
• El Sistema digital (Digital System)
• El sistema de recursos (system Resources)

PSoC CORE

El núcleo PSoC dispone de un potente procesador con una velocidad de 24 MHz, que ejecuta hasta 4 MIPS (millones de instrucciones por segundo) con un arquitectura Harvard de 8 bits. Dispone de una memoria de 32 KB tipo flash para el almacenamiento del programa, 2 KB de SRAM para almacenamiento de datos y la posibilidad de emular 2 KB de EEPROM en la flash.

El PSoC Core, incorpora generadores internos de señal de reloj muy flexibles, incluye un Oscilador interno principal de 24 MHz. Un reloj de 32 KHz interno de baja velocidad, es el encargado del Sleep Timer y WDT (watch dog timers). Si se desea generar tiempos mas precisos se puede usar un cristal de cuarzo, el ECO (external crystal oscillator, oscilador de cristal externo) de 32.768 KHz está disponible para usarse como RTC (real time clock, reloj de tiempo real). Las señales de reloj, se pueden programar mediante software utilizando factores de división proporcionando flexibilidad para integrar diferentes requerimientos de tiempo.

Las GPIOs (general purpose input output, entradas o salidas de propósito general) conectan la CPU, los bloques digitales y los analógicos con el mundo exterior, en la familia PSoC 1 se tienen hasta 5 puertos algunos dispositivos, los puertos son llamados port 0, port 1 y asi hasta el port 5, por medio de ellos puedo conectar todos los periféricos necesarios para mi diseño, se puede conectar LED´s Displays de 7 segmentos, LCD, push button, switch etc..

Sistema digital

El Digital System está formado por 16 bloques digitales PSoC, en una matriz de 4x4. Cada bloque PSoC es de 8 bits que puede ser utilizado individualmente o combinada con otros bloques para conseguir capacidades de 16, 24 o 32 bits. Los periféricos reciben el nombre de "user modules" (módulos del usuario).

Las configuraciones de periféricos incluidas son:

• PWMs (8, 16, 24 y 32 bit)
• Contadores (8, 16, 24 y 32 bit)
• Temporizadores (8, 16, 24 y 32 bit)
•UART ("Universal Asynchronous Receiver-Transmitter" , Transmisor-Receptor Asíncrono Universal ) de 8 bit con paridad (hasta 4)
• SPI (“Serial Peripheral Interface”, bus estándar de comunicaciones, hasta 4)

Los bloques digitales pueden conectarse con cualquier puerto de Entrada/salida desde una serie de buses globales y estos pueden interconectar cualquier señal con cualquier pin. Los buses también permiten multiplexar señales y realizar operaciones lógicas. Esta configuración de buses ofrece flexibilidad en las conexiones de los periféricos.

Sistema Analógico

El sistema analógico se compone de 12 bloques configurables distribuidos en una matriz de 3x4 bloques, cada uno incluye un circuito con un OP-AMP (operational amplifier, amplificador operacional) para trabajar con señales analógicas. Los periféricos analógicos son muy flexibles y pueden ser optimizados según las especificaciones de la aplicación a diseñar.

Los bloques analógicos más comunes son son listados enseguida:

• ADCs (hasta 4, de 6 a 14 bit resolución, del tipó incremental y delta sigma)
• Filtros (2, 4, 6 o 8 polos paso-banda, paso-bajo)
• Amplificadores (hasta 4, ganancia máxima 48x)
• Amplificadores instrumentación (hasta 2, ganancia máxima 93x)
• Comparadores (hasta 4)
• DACs (hasta 4, de 6 a 9 bit resolución)
• Moduladores
• Detectores de pico

Sistema de Recursos

Adicionalmente los PSoC tienen una serie de recursos para complementar los bloques analógicos y digitales entre ellos se tienen los siguientes:

• Divisores del reloj digital, para proporcionar frecuencias de reloj personalizable para su uso en aplicaciones. Los relojes pueden ser usados tanto a los sistemas digitales y analógicos. Los relojes adicionales pueden generarse usando bloques digitales de PSoC como divisores del reloj.

• El bloque multiplicador-acumulador (MAC) proporciona un rápido multiplicador de 8 bits con un acumulador de 32 bis para ayudar en cálculos matemáticos o en el diseño de filtros digitales.

• El “decimator” proporciona un filtro en hardware usado para el procesamiento digital de señales incluyendo la conversión analógica-digital usada por ADCs del tipo Delta-Sigma

• El módulo I2C proporciona 100 y 400 kHz de velocidad para la comunicación usando solo dos cables. El modulo soporta la programación del I2C como Esclavo, maestro, y los modos multi-maestro.

• Un voltaje de referencia interno de 1.3V proporciona una referencia absoluta parael sistema analógico, incluyendo ADCs y DACs.

Diagrama de terminales del CY8C29466

El dispositivo CY8C29x66 PSoC está disponible en una variedad de empaquetados, el que se usará en estos artículos es el chip con empaquetado DIP (Dual in Line, doble en línea) como se observa en la figura:

En la tabla siguiente se muestran la descripción de todas las terminales del PSOC, fue sacada de la hoja de datos y no esta traducida.
Con esto se termina este artículo que fue muy tecnico, pero se esta preparando el camino para poder realizar diseños cone estos fascinantes dispositivos.
Clic AQUI para leer más...

lunes, 20 de septiembre de 2010

VHDL - FPGA - Ejemplo #3 Simulación de un Multiplexor usando Active-HDL

El objetivo de esta entrada es mostrar la edición, compilación y simulación usando el Active-HDL de un multiplexor de 2 a 1 (dos entradas, una salida), por otro lado este ejemplo también sirve para usar una nueva instrucción de VHDL, la instrucción de condición.

Multiplexor

Un multiplexor (MUX) es un dispositivo que permite dirigir la información digital procedente de diversas fuentes a una única línea para ser transmitida a través de dicha línea a un destino común.

El multiplexor más básico pose dos líneas de entrada de datos (I0 e I1 en la siguiente figura) y una única línea de salida (Y). También posee una entrada de selección de datos, que permiten elegir los datos digitales provenientes de cualquier entrada hacia la línea de salida. También se les conoce como selectores de datos. La figura siguiente muestra el diagrama lógico de un multiplexor de 2 a 1.



"I0" e "I1" son las entradas de datos, "Y" es la salida de datos y finalmente "S" es la entrada de selección, el funcionamiento del mux se puede obaervar en la tabla de verdad para el multiplexor que es la siguiente:
     S         Y    
     0         I0
     1         I1

Código VHDL del MUX 2 a 1

El código VHDL inicia con la entidad (bueno realmente inicia con las librerías pero ahorita estoy omitiendo este paso, que ya se vio en la entrada anterior de VHDL), la entidad básicamente es la declaración de terminales y para el ejemplo del mux de 2 a 1 el código con la sintaxis correcta para la entidad queda así:

entity Mux2_1 is
   port(
        I0 : in STD_LOGIC;
        I1 : in STD_LOGIC;
         S : in STD_LOGIC;
        Y : out STD_LOGIC
  );
end Mux2_1;
La arquitectura describe el funcionamiento del circuito, en nuestro caso el MUX se pude describir haciendo uso de la instrucción de condición simple que en VHDL es casi como en la gran mayoría de los lenguajes de programación, como se verá enseguida.

Instrucción de condición

Este tipo de instrucciones evalúa una condición y si es verdadera ejecuta unas instrucciones y si es falsa ejecuta otras. Enseguida se muestra la sintaxis genérica para la instrucción de condición de VHDL:

If condición then
    --Instrucciones cuando la condicicón es verdadera
Else
-- Instrucciones para cuando la condición es falsa.
End if;

Todo inicia con la palabra “if” después va la condición, para el caso del multiplexor la condición es bien simple y se puede ver en la tabla de verdad que depende de la entrada de selección (S), si s es 0 hace una cosa y si S es 1 hace otra, entonces el código VHDL va quedando así:

If s = ‘0’ then
   --Instrucciones cuando la condicicón es verdadera
Else
   -- Instrucciones para cuando la condición es falsa.
End if;

Note como se colocan apostrofes para realizar la comparación de una variable de un bit con el valor de 0 lógico.

Cuando la condicón sea verdadera, simplemente la entrada I0 pasa a la salida Y estos se puede realizar con esta instrucción:

Y <= I0;

Si la condición es falsa, pasa la entrada I1 a Y así:

Y <= I1;

Queda entonces el código completo para el if así:

If s = ‘0’ then
   Y <= I0;
Else
   Y <= I1;
End if;

Con ese código queda descrito el Mux de 2 a 1, solo que este código así como está no está completo,  falta algo como se verá en la siguiente sección, tenga cuidado con los ; a la hora de ingresar el código en el Active-HDL.

Procesos en VHDL

En VHDL las instrucciones de condición son instrucciones que no se ejecutan en paralelo que es una de las virtudes del lenguaje, estas instrucciones dependen de una condición, es decir, primero se evalúa la condición y después se ejecuta una o más instrucciones si la condición es verdadera o falsa, esto nos habla de que se ejecutan las instrucciones en forma secuencial, para que VHDL acepte las instrucciones secuenciales estas deben ser escritas dentro de un proceso.

Un proceso es una manera formal de escribir una lista de instrucciones secuenciales, la sintaxis VHDL para un proceso es así:

Process ( lista_de_sensitividad)
Begin
   --instrucciones secuenciales
End process;

Lo primero que lleva el proceso es la palabra reservada “process” seguido por la lista de sensitividad, aquí van las señales que hacen que el proceso se ejecute, las señales que se colocan en la lista, generalmente son las entradas, así pues el proceso va quedando de la siguiente forma ya con las señales de entrada del MUX en la lista de sensitividad:

Process (I0, I1, S)
Begin
  -- instrucciones secuenciales
End process;

Recuerde las señales que se colocan en lista de sensitividad hacen que las instrucciones dentro del proceso se ejecuten, cada vez que cambia de valor una señal de la lista el proceso se ejecuta.

Ahora si el código del proceso junto con las isntrucciones secuneciales queda así:

Process (I0, I1, S)
Begin
   If s = '0' then
        Y <= I0;
   Else
       Y <= I1;
   End if;
End process;

Todo eso va dentro de la arquitectura, así que el código completo para la arquitectura del MUX es así:

architecture Multiplexor of MUX2_1 is
Begin
  Process (I0, I1, S)
  Begin
       If s = '0' then
           Y <= I0;
       Else
           Y <= I1;
       End if;
   End process;
end Multiplexor;

Edición del código en Active-HDL

El siguiente video-tutorial muestra como se crea, edita y simula el código para el multiplexor de 2 a 1 usando el software Active-HDL.


Finalmente la figura siguiente muestra una pantalla del Active-HDL, como la simulación que se vio en el video, solo que con otros valores en las señales, pero es lo mismo, ahí se puede apreciar el funcionamiento exacto del mux, si S=0 pasa la señal I0 a Y como se observa en la flecha. Y si S= 1 pasa I1.

Clic AQUI para leer más...

jueves, 9 de septiembre de 2010

Introducción a los circuitos integrados PSoC

Nos es grato presentar el primero de una larga serie de artículos relacionados con los circuitos integrados PSoC de la empresa Cypress Semiconductor de USA, este es el primer “post” sobre estos fabulosos dispositivos, hoy se muestra la introducción solamente, pero en un futuro no muy lejano se mostrarán video tutoriales sobre su programación y algunas aplicaciones que se tienen planeados hacer aquí en el grupo de sistemas digitales del ITESI.

¿Qué significa PSoC?

PSoC Es la abreviación de Programmable System On Chip que significa sistema programable en un solo circuito integrado, es una tecnología muy novedosa (bueno, apareció por el 2003, quizá exagere y ya no sea tan novedosa :) que me permite elegir bloques analógicos o digitales en el mismo circuito integrado, también le llaman circuitos integrados de señal mixta. La siguiente figura muestra un chip con algunos de los componentes que tiene un PSoC




¿Qué tal? Por fin se hizo realidad el sueño de todo diseñador electrónico, tener componentes tanto digitales como analógicos ¡en un solo circuito integrado!.

El PSoC usa como núcleo de procesamiento un microcontrolador muy versátil, pero además, el chip cuenta con una serie de periféricos analógicos y digitales, los cuales se pueden modificar para crear de forma interna, filtros analógicos y digitales, amplificadores, comparadores, convertidores analógicos de varios tipos y resolución, moduladores de ancho de pulso (PWM) de 8, 16, 32 Bits, contadores de 8, 16, 32 Bits entre muchos otros componentes, el microcontrolador se pueden programar usando lenguaje C o Ensamblador y el software para configurar los módulos es muy amigable como se verá en el futuro.

Familias de dispositivos PSoC

Hay tres diferentes familias de dispositivos PSOC:

   • La familia PSoC1 que usa una CPU llamada M8C
   • La familia PSoC2 que usa una CPU llamada 8051
   • La familia PSoC3 que usa una CPU llamada Arm Cortex M3

La familia PSoc 2 y PSoC3 son relativamente nuevas, en esta serie de artículos se estudia la familia PsoC1, por la sencilla razón de que, son los que tenemos en el laboratorio, por lo que de aquí en adelante al usar PSoC se habla únicamente de la familia PSoC1 y se usará indistintamente PSoC o PSoC1 como un solo término.

Características generales de los PSoC

Los chips PSoC como ya se ha mencionado cuenta con tres grandes bloques:

   • La CPU M8C
   • Los bloques analógicos
   • Los bloques digitales

En las siguientes secciones se enumeran las características generales de cada uno de estos tres grandes bloques:

Características de la CPU M8C

La unidad central de procesamiento de los PSoc tiene como características más importantes las siguientes.
• Bus del sistema de 8 bits
• Memoria flash de 32K bits de 29x66
• SRAM -2048 Bits en 29x66
• Controlador de interrupciones
• Fuentes de reloj interno de 930KHz – 24MHz

La figura siguiente resume estas características:

Bloques analógicos de un PSoC

Los PSoC tienen varias funciones analógicas que pueden variar entre dispositivos de la misma familia pero en términos generales un PSoC tiene los siguientes bloques analógicos que el usuario puede configurar y usar:

• ADC (Convertidor analógico - digital) incremental de 6 a 14 bits
• ADC Delta Sigma de 6 a 14 bits
• DCA (Convertidor digital - analógico) 6,8 Y 9 Bits
• Filtros pasa bajas
• Filtros pasa banda
• Marcador DTMF (“Dual Tone Multi-Frequency”, multifrecuencia por tonos duales)
• Modulador
• Detector de picos
• Convertidor voltaje a corriente
• Amplificadores de ganancia programable
• Amplificadores instrumentales
• Amplificadores de inversión
• Comparadores programables
• Comparadores de histéresis
• Comparadores de cruce cero

Bloques digitales de un PSoC

Enseguida se resumen los bloques o funciones digitales que tienen la mayoria de los PSoCs:

• Temporizador de 8, 16, 24 y 32 bits
• Contador de 8,16,24 y 32 bits
• Modulador de ancho de pulso 8,16,24 y 32 bits
• Generador de banda muerta de 8,16,24 y 32 bits
• Comprobación de redundancia cíclica
• Interfaz de comunicaciones I2C

Ventajas de usar los PSoC

Los PSoC tiene una gran cantidad de ventajas que supera a muchas familias de microcontroladores, algunas se enumeran enseguida:

• Cuenta con bloques analógicos y digitales en un solo chip.
• El software es muy amigable ya que permite programar el PSoC en un lenguaje parecido al C e incluso puedo programar el PSoC sin necesidad de código alguno.
• Este tipo de arquitectura es muy flexible, ya que me permite cambiar las configuraciones de los periféricos analógicos y/o digitales según nuestras necesidades o si los resultados obtenidos no son satisfactorios. Estas configuraciones se realizan vía software.
• Dispone de una librería muy amplia de periféricos, alrededor de 50 componentes en un único chip
• Con los PSoCs podemos abarcar un amplio abanico de aplicaciones que al estar integrados tantos periféricos dentro de un único encapsulado, se consigue reducir el tamaño del circuito electrónico de manera considerable y esto repercute en un descenso de los costes de fabricación del circuito impreso.

Bueno aquí terminamos nuestro primer post sobre los PSoC de Cypress, ojala que haya quedado bien claro lo que es, y los componentes con los que cuenta, el próximo articulo se analizará un PSoC en especifico el PSoC CY8C29466 qué es con el que realizaremos los diseños electrónicos.
Clic AQUI para leer más...

lunes, 6 de septiembre de 2010

Monitoreo de Ritmo Cardiaco usando la tarjeta de sonido de una PC -- Parte IV

Finalmente se muestra la parte IV de este reporte de proyecto, esta parte trata de los resultados obtenidos.

Hardware

Se fabrico un circuito impreso para el hardware del sistema, este se muestra en la siguiente figura con los convertidores ya soldados.


En la figura siguiente se observa el sistema ya con la tapa de la cajita puesta además se notan los tres cables de de conexión listo para conectarse al paciente y note también el conector que va a la terjeta de sonido de la PC.



En la siguiente figura se muestra la posición exacta de los tres electrodos en la persona:



Después de conectar los cables al paciente, se inicia el software, el primer paso es registrar los datos del paciente como se vio en el post anterior, al terminar se inicia el monitoreo de la señal, el resultado se muestra en un formulario como el de la figura siguiente

En la figura se observa la señal de ecg, los latidos por minuto, la frecuencia máxima varía de acuerdo a la edad de la persona, también muestra los datos de la persona obtenidos del registro y muestra los niveles de frecuencia que son: muy buena, buena, normal y mala.

Para indicar a cual indicador pertenece la frecuencia del paciente se ilumina de color el nivel donde se encuentra la frecuencia de la persona también se ilumina de color si es una taquicardia y la describe o si es un ritmo normal. En este caso el nivel de la persona fue muy bueno 57 Lpm (latidos por minuto). se observa iluminado de color el nivel. La frecuencia máxima de 197 y está iluminado de color que es un ritmo sinusal regular .

Conclusiones

Se cumplio con el objetivo de diseñar un sistema de monitoreo de ECG o electrocardiógrafo de simple diseño para detectar los niveles de frecuencia cardiaca de una persona y su frecuencia máxima de acuerdo a su edad, también puede detectar algunas taquicardias como la taquicardia sinusal y la taquicardia auricular.

El sistema que se construyo, es un sistema de bajo costo comparado con los electrocardiógrafos simples que se venden en el mercado pudiendo así tener un ahorro económico considerable.

Nos deja gratamente sorprendidos la librería AudioLab de Mitov para la manipulación de audio, fue realmente sencillo usarla, pero siento que se puede sacar más provecho al estudiarla con más detalle, no dudaremos en volver a usarla para otros proyectos relacionados con audio.
Clic AQUI para leer más...

martes, 31 de agosto de 2010

Monitoreo de Ritmo Cardiaco usando la tarjeta de sonido de una PC -- Parte III

Esta es la tercera entrega del monitoreo de señales ECG, trata del desarrollo del software.

Desarrollo del Software

Esta parte fue bastante exhaustiva, puesto que se desconocía completamente como manipular la tarjeta de sonido de una computadora y se requería de algún software o librería que me permitiera por ejemplo obtener los valores de la tarjeta de sonido, analizarlos para después graficarlos, algo que era nuevo para nosotros.

Se inició con búsquedas en la red, usando como lenguaje Java, pensando en alguna clase o paquete de clases para Java, pero no se obtuvo gran cosa por este lado, después pensamos en Microsoft y su plataforma de desarrollo .Net, y se dio en el clavo, se logro encontrar una serie de librerías especialmente usadas para la manipulación del sonido desde la tarjeta de audio de cualquier PC, la librería corre sobre el .Net de Microsoft, es llamada AudioLab de la empresa Mitov Software, se puede descargar desde la página de Mitov.



AudioLab

AudioLab es un conjunto de componentes para el procesamiento de audio. La biblioteca permite la captura, la reproducción, mezcla, complejas manipulaciones de audio, análisis y visualización, con prácticamente cero líneas de código del programa.

La librería estaba perfecta para nuestros propósitos, así que la descargamos desde la página de Mitov, y se inicio el estudio para aplicarla en la adquisición de datos desde la tarjeta de sonido.

La librería está diseñada para que se ejecute en varios entornos de programación entre ellos como ya se mencionó el .Net de Microsot, después de instalar la librería AudioLab, se procedió a descargar alguna herramienta de Microsoft, la elección fue el Visual C# 2008 Express Edition.

Visual C# 2008 Express Edition.

Microsoft Visual C# 2008 es un lenguaje de programación diseñado para crear una amplia gama de aplicaciones que se ejecutan en .NET Framework de Microsoft, C# es simple, eficaz, con seguridad de tipos y orientado a objetos, C# permite desarrollar aplicaciones rápidamente por eso fue el elegido.

Para descargar el Visual C# solo visita el siguiente enlace y desde ahí se puede descargar:


Integración del AudioLab en el Visual C# 2008 Express Edition
El AudiLab se debe integrar al C# para poder usarlo, esto se hace fácilmente siguiendo las instrucciones que nos da Mitov y que viene en la documentación de la librería, la siguiente figura muestra como queda la librería AudioLab ya integrada en C#.

En este punto, basta con arrastrar y soltar los componentes de AudioLab en el Form de C#, aquí radica la facilidad de AudioLab, pero ahora regresemos al proyecto.

Diseño del Software
El diseño del software para el proyecto se dividió en los “Forms” qué se muestran en la tabla siguiente


 Formulario                       Descripción                           
Form de fondo           Formulario de presentación del programa
Form menú               Formulario que presenta el menú con tres opciones
Form registro           Formulario de registro del paciente bajo prueba
Form monitoreo          Formulario de monitoreo del paciente


En la siguiente sección se muestra una imágen de cada uno de los formularios.

Form de Fondo
Este form es la presentación del programa, la form aparece como fondo al inicio, no tiene código de programación solo contiene elementos Picturebox para las imágenes que se ven en ella.
Form Menú Principal
La figura muestra el form Menu o principal, esta contiene tres botones para las tres opciones del menú principal: registro (del paciente), monitoreo (de la señal ECG) y salir.


Al iniciar solo tiene dos funciones habilitadas, el registro y la opción de salir. Al dar clic en el otón de Registro el software abre un nuevo formulario para registrar los datos del paciente, esto con la finalidad de registrar el paciente para poder obtener sobre todo la edad, es la que interesa, recuerde que a diferentes edades la señal ECG es más rápida o más lenta. La imágen siguiente muestra este formulario.
Después de registrar al paciente se procede al monitoreo, dando clic en el botón de monitoreo del menú principal al hacerlo, se abre una form como la siguiente



Ahí se grafican en tiempo real los datos de la señal ECG y hace un análisis para saber si el paciente está sano.

Justo en esta form se agregaron los componenetes de AudioLab, se usaron los siguientes:

• AudioIn .- Para capturar la señal ECG.

• AudiotoReal – Para obtener los valores a graficar se usa junto con el componente GenericReal.

• lowPass –para aplicar un filtro pasabajas por software.

• GenericReal – Junto con el AudiotoReal generan los eventos para la captura de datos que se van a gráficar.

• AudioOut – Para pruebas al programa.

Otro componente que se uso también de Mitov fue el Scope que sirve para graficar, pero está en otra librería no en AudioLab, la figura siguiente muestra los componentes usados de AudioLab dentro de C#


Bueno eso es todo por lo pronto, de esta tercera entrega, en la siguiente se mostrarán algunos resultados del software y hardware.
Clic AQUI para leer más...

miércoles, 25 de agosto de 2010

Monitoreo de Ritmo Cardiaco usando la tarjeta de sonido de una PC -- Parte II

Hoy se va a mostrar la segunda parte del proyecto que gráfica las señales ECG en la computadora, la parte que se muestra es la del desarrollo del hardware.


Desarrollo del hardware

La figura siguiente muestra el diagrama esquemático del sistema desarrollado:

En la figura se notan claramente las tres grandes partes del sistema, el acondicionamiento de señal, el filtro pasa-bajas y la computadora. Enseguida se muestran más detalles técnicos del hardware.

Acondicionamiento de la señal

La adquisición y acondicionamiento de la señal fue realizada por dos circuitos principales:

• Amplificador AD620A
• Amplificador OP97


Enseguida se detallan cada uno de ellos.

Amplificador AD620

El amplificador de instrumentación AD620, es el encargado de la adquisición y amplificación de las señales del corazón, el circuito junto con las resistencias asociadas a él son recomendadas por el fabricante en su hoja de datos, por lo que no se requirió calculo alguno para obtener los valores, pues ¿por qué habríamos de inventar de nuevo la rueda?

El AD620 dispone de 8 terminales y viene en empaquetado tipo DIP, las características generales de este circuito se muestran enseguida:

• La ganancia de voltaje es de 1 a 10,000.
• La ganancia se coloca utilizando una sola resistencia.
• Opera con voltajes BIPOLARES de +- 2.3 a +- 18 volts.
• Disponible en empaquetado de 8 pines.
• Consumo de 1.3 mA.
• El desempeño en DC es excelente ya que solo tiene un máximo de 50 uV de offset.
• Desvío máximo de 0.6 uV/°C

En la figura siguiente muestra las terminales que tiene el amplificador



La descripción de cada terminal es mostrada en la siguiente tabla

# de pin  Nombre        Descripción                         
   1          RG       Conexión de la resistencia de ganancia
   2       In(-)    Etrada inversora
   3       In(+)    Etrada no inversora
   4       Vss      Amentación negativa
   5       Ref      Referencia
   6       Out      Salida
   7       Vcc      Aimentación positiva
   8       RG       Cnexión de resistencia de ganancia

Amplificador de Precisión OP97

Este circuito es el complemento del AD620, el circuito se coloca de forma invertida como se observa en el diagrama esquemático, con el objetivo de cancelar la interferencia que se esté generando por los electrodos, la figura 3.6 muestra el diagrama de terminales de este chip.
La descripción de cada terminal es mostrada en la siguiente tabla

# de pin  Nombre        Descripción     
   1       NULL        
   2       In(-)        Entrada inversora
   3       In(+)        Entrada no inversora
   4       Vss          Alimentación negativa
   5       OVER COMP    Referencia
   6       Out          Salida
   7       Vcc          Alimentación positiva
   8       NULL          

Filtro pasa-bajas


El filtro pasa-bajas fue realizado con un amplificador de propósito general el LM741

Amplificador LM741.

La serie LM741 son de uso general amplificadores operacionales está dirigido a una amplia gama de aplicaciones analógicas. La figura siguiente muestra el diagrama de conexión para el encapsulado típico de un amplificador operacional.
La descripción de cada terminal es mostrada en la siguiente tabla:


# de pin  Nombre            Descripción               
   1      OFFSET       Anulamiento sobrecompensación
   2      In(-)        Entrada inversora
   3      In(+)        Entrada no inversora
   4      Vss          Alimentación negativa
   5      OFFSET       Anulamiento sobrecompensación
   6      Out          Salida
   7      Vcc          Alimentación positiva
   8      NC           No conectar      


En este proyecto el LM741 se configura como filtro activo pasa bajas, el filtro se hace con el circuito RC y el operacional se utiliza como amplificador de ganancia unitaria como se observo en el diagrama esquemático del sistema, en este caso los valores de las resistencias, si fueron calculadas para una frecuencia de corte de aproximadamente 60 Hz.

Tarjeta de sonido de la computadora

La señal que se genera en la salida del filtro pasa bajas se inyecta a la tarjeta de sonido de la PC, usando la entrada del micrófono, a continuación se muestran las características generales de una tarjeta de sonido de una PC, la figura siguiente muestra el diagrama bloques de la tarjeta de sonido.

Como se puede observar la tarjeta de sonido tiene incluido un convertidor analógico digital (ADC) entre muchos otros componentes que no se describirán aquí.

El ADC es el encargado de recibir la señal ECG por medio de la entrada del micrófono, la adquisición de esta señal, por medio de la tarjeta, es realizada por el software que se desarrollo, en otras palabras aquí es donde entra el software creado, esto con la finalidad de manipular la tarjeta de sonido, el software se describe después, en la próxima entrada.

Clic AQUI para leer más...

viernes, 20 de agosto de 2010

Monitoreo de Ritmo Cardiaco usando la tarjeta de sonido de una PC -- Parte I

Hoy se va a mostrar el reporte del último de los proyectos realizados en el grupo de sistemas digitales, este fue realizado por el alumno Edgar Eduardo Franco Arguijo.

Edgar Eduardo le ha dado grandes satisfacciones al ITESI ya que ha ganado en varios concursos a nivel estatal, pero esa es otra historia, por lo pronto veamos de que se trato es te proyecto.

Resumen del proyecto
El sistema desarrollado permite captar las señales cardiacas para después graficarlas y hacer un análisis de la señal mostrando algunos indicadores más relevantes, por ejemplo, el sistema indica cuando una persona puede tener riesgos en base a los latidos por minuto del corazón.

En cuanto al hardware del sistema desarrollado, se compone por dos elementos un sistema electrónico capaz de captar las señales del corazón y una computadora que se uso para la graficación y análisis de las señales cardiacas.

Cabe mencionar que el proyecto realiza la captura de la señal haciendo uso de la tarjeta de sonido que todas las computadoras tienen, algo innovador al menos aquí en el ITESI puesto que, este, es el primer proyecto que hace uso de la tarjeta de sonido de una computadora como sistema de adquisición de datos.

Diagrama a bloques del sistema desarrollado
El diagrama a bloque del sistema que se desarrollo se muestra en la figura siguiente:

Una rápida descripción de lo que hace cada bloque es mostrada enseguida:

1. La detección de la señal de del corazón es obtenida por medio de tres electrodos.
2. La señal es trasportada por los cables con punta de broche.
3. La señal es recibida por el bloque de amplificación donde los amplificadores realizan una diferencia de potencial y ana amplificación para obtener la señal del corazón.
4. Después la señal es filtrada para eliminar el ruido indeseado.
5. Finalmente, la señal ingresa a la computadora por la tarjeta de sonido, (la entrada del micrófono) .
Enseguida se muestran más detalles de cada uno de los bloques.

Electrodos para ECG tipo broche

Los electrodos tipo broche se pegan al paciente, la finalidad de los parches es obvia captar las señales eléctricas del corazón. Electrodos para ECG tipo broche utilizados en el sistema son mostrados en la figura

Cables para electrodos ECG.
Los cables para ECG conducen los potenciales captados por los electrodos hacia la etapa de acondicionamiento de señal, los cables con punta de broche los llevara el paciente por debajo de su ropa conduciendo las señales del corazón a la etapa de acondicionamiento de la señal, los cables usados se muestran en la figura:


Amplificador de instrumentación.
Los amplificadores de instrumentación realizan una diferencia de potencial percibida en sus terminales de entrada, proveniente de los electrodos que porta la persona, y la multiplica por un factor de amplificación. El amplificador usado es el AD620 de National Instrument, es un amplificador de instrumentación de alta precisión que sólo requiere una resistencia externa para establecer las ganancias de 1 a 1000. El amplificador usado es mostrado en la figura siguiente.


2.2.3 Filtro Pasa-Bajas
El filtro se utiliza para limpiar la señal que sale con ruido de la etapa de acondicionamiento de señal con el propósito de eliminar el ruido indeseado que no es propio de la señal del corazón y que aparte dificulta el procesamiento de la señal pudiendo diagnosticar erróneamente.

Para realizar el filtro se utilizo un simple amplificador operacional LM741 cuya imagen es mostrada en la figura
2.2.4 Tarjeta de sonido de la computadora
La tarjeta de sonido permite la entrada de la señal analógica a la computadora, la señal es recibida por la entrada del micrófono. La señal recibida se transforma a su equivalente digital en la misma tarjeta de sonido. De esta forma se puede manipular la señal por medio del software programado en la PC.

Esa es la primera parte del reporte, después se mostrará con detalle el diseño del hardware y software del sistema desarrollado.
Clic AQUI para leer más...

lunes, 16 de agosto de 2010

Ejemplo #1 (Arduino) Programación del Arduino

Hoy se muestra un video tutorial del ejemplo más sencillo que puede haber para la plataforma Arduino, aquí no se va a explicar que es y las ventajas que tiene esta plataforma por sobre otras, ya existe muchísima información de ello, cientos, miles de páginas hablan del Arduino, basta colocar en Google la palabra Arduino y encuentra miles de páginas de Arduino, no se va a repetir la teoría, en este blog se van a mostrar los ejercicios que se hagan con esta plataforma, los ejemplos prácticos, los programas, muchos de ellos se mostrarán como video-tutoriales, el objetivo es que el lector aprenda a programar en el lenguaje de Arduino.

Agrego algunos links de página oficial de Arduino en ingles, para que el lector revise la teoría:


Aquí está en español:


Y solo se pondrá un link más el de la famosa WiKipedia para el Arduino:


Arduino Duemilanove

La tarjeta en la que se han probado los ejercicios es la tarjeta Arduino Duemilanove, la cual se muestra en la siguiente imagen:
En los enlaces anteriores se encuentra mucha de la documentación para esta tarjeta.

Software para programar el Arduino

Para programar Arduino necesito el software donde voy a editar, compilar y programar, este se puede bajar de forma gratuita en el enlace siguiente:


Ahí eliges la versión del sistema operativo y listo. El archivo esta comprimido, simplemente se descomprime y se guarda en algún lado de tu PC, no se requiere instalar nada de software, la carpeta contiene todo listo para ejecutar el programa.

Ejemplo #1

El ejemplo que se muestra es el de simplemente encender y apagar un LED cada segundo.

Conexión a la tarjeta

Lo primero que se debe hacer es conectar el LED a la tarjeta, es un solo LED el que se desea encender y apagar, se conecta por facilidad a la terminal 13 del Arduino, esto porque al lado está la terminal de tierra, la conexión queda como se observa en la imagen.



Programa

Las instrucciones de Arduino, que hacen lo que se pide en el ejercicio están ampliamente comentadas en la página de Arduino, aquí les dejo el link



Volver a explicarlas sería repetir lo que ahí dice, simplemente se muestra el video-tutorial donde se observa la edición, compilación y programación del ejemplo #1.



Nota: Este ejemplo ya viene en el software de Arduino simplemente se abre el ejemplo llamado “blink”, esto se hace desde:

file > Examples > Digital > Blink

En el video no se hizo así porque este video fue parte de un taller de Arduino que se impartió en el ITESI y se requería ingresar las instrucciones línea por línea para fines didácticos.
Clic AQUI para leer más...

viernes, 13 de agosto de 2010

Ejemplo #2 (VHDL-FPGA) Programación de la tarjeta DE2 de Altera

Siguiendo con la serie de video-tutoriales, de lógica programable, se presenta ahora como programar la tarjeta DE2 de la compañía Altera usando el programa realizado en el ejemplo #1 el de la compuerta XOR que se edito y simulo en el software Active-HDL.

La tarjeta DE2 de Altera
La figura siguiente muestra los componentes de la tarjeta DE2

Como corazón de la tarjeta se usa un FPGA de la familia Cyclone II de Altera, el cual se puede observar fácilmente en la figura anterior, tiene muchos componentes esta tarjeta, poco a lo largo del blog se verá como programar algunos componentes, en este ejemplo se usa solamente un LED y dos Switch.


Programación de un FPGA

Recuerde el flujo de diseño que yo uso para programar el FPGA:

   1. Editar, compilar y simular usando el software Active-HDL.
   2. Programar el FPGA de Altera, usando el software Quartus II (obviamente también de la empresa Altera).
   3. Probar el funcionamiento de la práctica.

En la entrada anterior de este blog se mostró en el Ejemplo #1, el paso 1 del flujo de diseño, se uso el Active-HDL para editar compilar y simular un programa en VHDL, el programa era el de una simple compuerta XOR, ahora se muestra como se programa ese ejemplo.

Programar la tarjeta DE2 usando el Software Quartus II de Altera

Ahora se muestra el paso #2 del flujo de diseño, programar el FPGA.

Primero se obtiene el software Quartus II de la compañía Altera que nos permite programar sus FPGAs, se usa la versión Web Edition en su versión , totalmente gratuita y sin necesidad de licencia para su uso, se puede descargar del siguiente enlace:


Hay que tener paciencia el software pesa más de 2 gigas, de hecho yo lo baje, lo instale y por alguna razón no lo pude ejecutar en mi máquina, así que tuve que bajar la versión 9.2 con el service pack 2, no hay un enlace directo o al menos no lo encontre, pero la página de altera trae la opció para buscar, justo ahi se puede buscar el enlace para bajar el Quartus II 9.1

Antes de iniciar recuerde que el programa en VHDL ya esta realizado, se hizo en el Active-HDL, lo que se necesita es conocer la ruta donde esta guardado para después seleccionarlo en el Quartus II, la imagen siguiente muestra la ruta exacta donde Active-HDL almaceno el archivo fuente de VHDL para la compuerta XOR.


En la figura se observa la ruta, por otro lado, la tarjeta DE2 requiere la primera vez que se conecta los controladores, afortunadamente estos ya vienen en el Quartus así que automáticamente se instalan.

Finalmente se requiera conocer las conexiones de la tarjeta DE2, esto se puede ver fácilmente en el manual de usario de la tarjeta DE2 dando clic en el siguiente enlace la puedes bajar:


En el documento se observa que terminal del FPGA se va a usar para nuestro diseño, recuerde el diseño es una compuerta XOR, que tiene dos entradas (A y B) y una salida (X), las dos entradas se agregaran a switch y la salida a un LED, la figura siguiente muestra donde están ubicados los switches en la tarjeta y el LED

Ya que se identificaron los switch y leds se procede a ver el manual de usuario de la DE2 para saber que terminal del FPGA está conectado a esos componentes, para los switch son las terminales que se muestran en la imagen siguiente:


La imagen siguiente muestra las terminales del FPGA para el LED que se va a usar:


Con esto ahora si se tiene todo para programar el FPGA de la tarjeta DE2, el siguiente video tutorial muestra como se programa la DE2 usando el Quartus II.


Clic AQUI para leer más...

martes, 3 de agosto de 2010

VHDL-Ejemplo #1 Como editar, compilar y simular usando el software Active-HDL

Se presenta en este post el primer video tutorial de una serie de videos que estoy preparando sobre lógica programable, específicamente de VHDL y programación de CPLDs y FPGAs.

El software Active-HDL es usado en varias materias de la especialidad de sistemas digitales de la carrera de ingeniería electrónica del Instituto Tecnológico Superior de Irapuato, se usa para editar, compilar y simular los programas creados en el lenguaje de descripción de hardware llamado VHDL, puedes ver más detalles de lo que es el VHD, CPLDs y FPGAs desde la famosa Wikipedia dando clic en los enlaces de arriba.

Este es el flujo de diseño que se usa por nosotros para la programación de los dispositivos lógicos programables:

Paso 1: Usar el software Active-HDL para crear el programa en el lenguaje VHDL.

Paso 2: Se elige una de dos variantes:

        • Usar el software Xilinx ISE para programar CPLDs o FPGAs de la compañía Xilinx.
        • Usar el software Quartus II para programar FPGAs de la compañía Altera.

Paso 3: Programar el FPGA y se prueba físicamente para ver si hace lo que se pidió.

Eso hacemos aquí en el Instituto, nosotros no nos consideramos expertos en esta área aquí solo se muestra lo que hacemos, si a alguien le sirve excelente para nosotros.

Active-HDL

Este software es sin duda uno de los mejores programas, como ya se mencionó, para editar, compilar y simular los programas en VHDL, el software es diseñado por la compañía estadounidense ALDEC cuya dirección electrónica es la siguiente:

Afortunadamente para nosotros Aldec tiene un programa universitrio y nos ofrece una versión estudiantil 100% funcional totalmente gratuita y que puede ser bajada desde:

 
Solo hay que registrarse para obtenerlo, despues se registra el Active-HDL para obtener una licencia valida para usar el software por todo un año.

Ejemplo #1 Compuerta Ex-Or


Se muestra el uso del Active-HDL realizando un programa en VHDL que describa el funcionamiento de una compuerta or-exclsiva (XOR), la figura siguiente muestra el símbolo y tabla de verdad de esta compuerta para recordarla:







Un programa en VHDL consta de tres partes principales:

          • Librerias
          • Entidad
          • Arquitectura

Dando clic aquí puedes ver detalles del VHDL de su sintaxis desde la wikipedia, el código VHDL para resolver el programa de la ExOR qué es la que nos interesa, se muestra en el siguiente listado, se incluyen comentario para que se entienda mejor.


-- Declaración de librerías
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

-- Declaración de la entidad ---
entity CompuertaXOR is
Port (
  A,B : in std_logic; -- Se declaran las entradas de la compuerta
  F : out std_logic -- Se declara la salida

);
end CompuertaXOR;
-- Declaración de la arquitectura ---
architecture Compuerta of CompuertaXOR is
begin
  F <= A XOR B; -- código para la compuerta XOR
end simple;

Active-HDL crea automáticamente mucho del código anterior usando un asistente (wizard del Active-HDL), prácticamente para este ejemplo, solo se teclea la ecuación, como se verá en el siguiente video, se muestra también como se simula un programa en VHDL.
Clic AQUI para leer más...