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