viernes, 31 de agosto de 2012

USO DEL MODULO COMP

En esta ocasión se va a trabajar con el modulo COMP el cual hace parte de los módulos de usuario de PSoC designer 5.1 que permiten trabajar con amplificadores operacionales. 

El modulo de usuario COMP es un comparador de voltajes que permite distintas maneras de configuración con las cuales se pueden obtener diferentes formas de comparar las señales de entrada, alguna de las configuraciones y sus funciones son las siguientes:

• COMPZ (Detector de cruces por cero): Entrega un valor lógico alto cuando la señal de entrada es superior a cero y un nivel lógico negativo cuando la señal de entrada es inferior a cero.


(Figura 1. Esquema y diagrama de funcionamiento del COMPZ)

• COMPA (Comparador con referencia variable): Con este comparador se puede escoger un nivel de disparo como punto de referencia (pre-programado), cuando la señal de entrada supere esta referencia se entrega un nivel lógico alto y cuando es menor entrega un nivel lógico bajo.


(Figura 2. Esquema y diagrama de funcionamiento del COMPA)

• COMPH (Detector de cruce por cero con histéresis variable): Permite determinar un nivel de umbral superior e inferior a cero, cuando la señal de entrada supera el umbral positivo la señal de salida tendrá un valor lógico alto, este nivel se mantiene hasta que la señal de entrada cruce el nivel de umbral inferior con lo cual la señal de salida tendrá un nivel lógico bajo.


(Figura 3. Esquema y diagrama de funcionamiento del COMPH)

• COMPW (Comparador de ventana): Permite establecer un valor umbral o ventana, cada vez que la señal de entrada cruce por algunos de los límites de la ventana el estado lógico de la señal de salida cambiara.


(Figura 4. Esquema y diagrama de funcionamiento del COMPW)

• COMPD (Comparador por diferencia de voltaje): Permite establecer una referencia de voltaje por medio de una de las entradas del amplificador operacional, cuando la señal de entrada supera la señal de referencia se obtiene a la salida un nivel lógico alto, por su parte cuando la señal de entrada es menor a la señal de referencia se obtiene un nivel lógico bajo.  


(Figura 5. Esquema y diagrama de funcionamiento del COMPD)

• COMPDH (Comparador por diferencia de voltaje con histéresis): Permite establecer una referencia de voltaje por medio de una entrada del amplificador, además permite establecer un umbral en esta señal de referencia, cuando la señal de entrada supera el límite superior del umbral a la salida se obtiene un nivel lógico alto, por el contrario cuando la señal de entrada es inferior al límite inferior del umbral se obtiene a la salida un nivel lógico bajo.


(Figura 6. Esquema y diagrama de funcionamiento del COMPDH)

COMP wizard:

Esta es una herramienta bastante útil para observar previamente el funcionamiento del comparador que se quiere implementar, esta herramienta despliega una interfaz grafica en la que se pueden variar los parámetros del comparador y observar la respuesta que se va a obtener (figura 7), esta interfaz se puede observar haciendo clic derecho sobre el bloque que contiene al modulo del usuario y seleccionando la opción COMP wizard.


(Figura 7.Wizard de un comparador de ventana)

Configuración del modulo:

Al igual que en los módulos expuestos anteriormente es necesario inicializar el modulo de usuario mediante el comando COMP_Start(x), donde el valor de “x” representa la potencia con la que se quiere configurar el modulo teniendo los siguientes valores posibles:

DAC8_LOWPOWER = 1
DAC8_MEDPOWER = 2
DAC8_HIGHPOWER = 3

Los demás parámetros del modulo como son la polaridad, el valor de las ventanas o las referencias se pueden configurar de manera grafica, sin embargo si se quiere realizar mediante código también es posible y se pueden utilizar los siguientes códigos:

COMP_SetPolarity(x);
COMP_SetVTHH(x);
COMP_SetVTHL(x);

Los valores que puede tomar cada parámetro se pueden observar en la hoja de datos del modulo de usuario COMP que contiene PSoC designer.

martes, 31 de julio de 2012

USO DEL MODULO AMUX4


En algunas ocasiones es necesario tomar y convertir muestras de diferentes tipos de señales análogas, para esto es conveniente utilizar uno de los multiplexores análogos con los que cuenta PSoC, el que se va a presentar en este caso es el “AMUX4” este es un modulo de usuario que permite utilizar un multiplexor análogo de cuatro entradas y una salida. Para el caso del microcontrolador CY8C29466 se puede contar con cuatro multiplexores de este tipo (uno por cada columna), a continuación se muestra la manera de configurar este modulo.

Los parámetros esenciales para la configuración son:

•   Analog Column Mux.
•   AMUX4_InputSelect.

Analog Column Mux: este parámetro permite escoger cual de los cuatro multiplexores va a ser el escogido para realizar el trabajo, esta opción puede ser configurada de manera grafica y los cuatro valores que puede tomar son AlnMux_0, AlnMux_1, AlnMux_2, AlnMux_3, tal como se puede apreciar en la figura 1.


(Figura 1. Configuración Analog Column Mux)

AMUX4_InputSelect: este parámetro y más específicamente este código permite seleccionar el pin análogo que se va a tomar como entrada en ese instante de multiplexación, la sintaxis de dicho código es la siguiente: 

AMUX4_InputSelect(nombre del puerto a usar);

Por ejemplo para seleccionar el pin 1 del puerto 0 la sintaxis quedaría de la siguiente manera:

AMUX4_InputSelect(AMUX4_PORT0_1);

También hay que tener en cuenta que para cada multiplexor a utilizar existen unos puertos análogos predeterminados, lo cual hay que recordarlo en el momento de configuración del enrutamiento con el código AMUX4_InputSelect(), la disposición de los multiplexores con los respectivos puertos análogos se puede observar en la figura 2.


(Figura 2. Disposición de los multiplexores)

A manera de ejemplo se propone realizar una práctica en la cual en cada una de las cuatro entradas al multiplexor se conecte un potenciómetro configurado como divisor de voltaje con el fin de ir variando el valor de las entradas análogas, la selección de la entrada a multiplexar se va a realizar por medio de un dip-switch, por último la salida del multiplexor se va a conectar a un modulo PGA con ganancia unitaria y la salida de este amplificador nos retorna el valor de la señal por un pin configurado como salida análoga.

A continuación se presenta el código escrito en C de la práctica propuesta.  

//----------------------------------------------------------------------------
// C main line
//----------------------------------------------------------------------------

#include <m8c.h>       
#include "PSoCAPI.h"   
  
void main(void)
{
       AMUX4_1_Start();//Inicializacion del modulo multiplexor
       PGA_Start(3); //Iniciación del modulo PGA
      
while(1)
{
if(PRT1DR==0x00) //selección con el dip-switch
{
AMUX4_1_InputSelect(AMUX4_1_PORT0_0);//Selección del puerto 0_0 para multiplexar
}
if(PRT1DR==0x01)//selección con el dip-switch
{
AMUX4_1_InputSelect(AMUX4_1_PORT0_2);//Selección del puerto 0_2 para multiplexar
}
if(PRT1DR==0x02)//selección con el dip-switch
{
AMUX4_1_InputSelect(AMUX4_1_PORT0_4);//Selección del puerto 0_4 para multiplexar
}
if(PRT1DR==0x03)//selección con el dip-switch
{
AMUX4_1_InputSelect(AMUX4_1_PORT0_6);//Selección del puerto 0_6 para multiplexar
}
}
}

En este ejemplo se utilizo el multiplexor AlnMux_1 el cual corresponde a la segunda columna del sistema análogo del PSoC CY8C29466.

NOTA: El ejemplo anterior, es un ejercicio muy básico solo con el fin de mostrar el funcionamiento de estos multiplexores, pero existen diversas aplicaciones en las que se puede obtener un mayor provecho de este dispositivo.

sábado, 30 de junio de 2012

VOLTAJES DE REFERENCIA EN PSOC


Teniendo en cuenta que cuando se trabaja con microcontroladores PSoC es posible implementar fases análogas, en algunos momentos puede llegar a ser necesario utilizar niveles de voltaje duales, al hablar de este tipo de voltajes me refiero a tener un nivel de voltaje positivo y un nivel negativo, ambos respecto a un punto de referencia (-5V , 0V, +5V).  


PSoC nos ofrece la posibilidad de trabajar con diferentes niveles de voltaje dependiendo de las referencias que sean seleccionadas para dicho trabajo, en un principio se tienen tres niveles de referencia estables con los cuales es posible trabajar, estos valores son denominados AGND, REFHI, REFLO.


AGND: esta es una referencia de tierra análoga, es utilizada cuando se requieren valores de voltaje tanto positivos como negativos, los cuales van referenciados ante este punto de tierra análoga AGND.


REFLO: es el parámetro que simboliza el voltaje negativo.


REFHI: es el parámetro que simboliza el voltaje positivo.


Los valores de voltaje de REFLO y REFHI pueden cambiar dependiendo de la configuración que sea escogida para el RefMux en los parámetros globales del sistema (Figura 1), este parámetro tiene una gran variedad de posibles configuraciones con las cuales se obtienes diferentes valores como se observa en la siguiente tabla:


(Tabla 1. Valores de voltajes según el Ref Mux)

(Imagen 1. Posibles Valores de configuración del Ref Mux)


domingo, 27 de mayo de 2012

CONVERTIDOR ANÁLOGO A DIGITAL CON MODULO ADCINC



En la publicación anterior se realizo una pequeña revisión del modulo DAC8 de PSoC con el cual se pueden hacer conversiones de datos digitales a análogos, en esta ocasión se va a llevar a cabo el proceso contrario con el modulo ADCINC, el cual es tan solo uno de los tantos módulos que ofrece PSoC Designer para realizar conversiones análogas a digitales, además también se llevara a cabo una práctica sencilla en la cual se pretende convertir una señal análoga a digital y luego retornarla de nuevo de manera análoga, de esta manera se integraran los temas vistos en esta publicación y la anterior.

Los módulos que ofrece PSoC Designer para hacer conversiones análogo a digital son los siguientes:

• ADCINC 
• ADCINCVR
• DelSig
• DualADC
• DualADC8
• SAR6
• TriADC
• TriADC8

El modulo que se va a referenciar es el ADCINC, este es un convertidor análogo a digital que cuenta con una resolución de 6 a 14 bits y provee una velocidad de muestreo de 15,6 Ksps (para 6 bits de resolución), el formato de la salida digital se puede entregar con signo o sin signo, la frecuencia máxima a la que se puede alimentar el bloque (DataClock) es de 8 MHz, sin embargo es recomendable que se utilice una frecuencia de 2 MHz con la cual se provee una linealidad en la conversión. 

Este ADCINC es posible implementarlo de primer o segundo orden, si se implementa una de primer orden son utilizados un bloque digital y un bloque análogo, por su parte al implementar un ADC de segundo orden se utilizaran un bloque digital y dos análogos, la configuración de estos ADC se pueden observar en las figuras 1 y 2 mostradas a continuación, estos esquemas fueron tomados de la hoja de datos del modulo ADCINC. 


(Figura 1. ADCINC de primer Orden)
(Figura 2. ADCINC de segundo Orden)

Configuración modulo ADCINC: 

Al igual que se hizo con el modulo DAC8 los aspectos que se van a tener en cuenta en esta publicación, son solo aspectos mínimos para la puesta en funcionamiento del modulo, para una mayor profundidad sobre el funcionamiento del mismo y mayores características, se recomienda leer la hoja de datos del modulo.

Los parámetros a configurar para este modulo se pueden apreciar en la figura 3.

(Figura 3. Parámetros de configuración del modulo)

DataFormat: Es el formato del valor binario al que será convertido el valor análogo ingresado al sistema, permite dos posibilidades unsigned y signed, en caso de seleccionar unsigned el dato binario se ofrece sin signo, si se escoge signe se utiliza un bit para determinar el signo del valor digital.

Resolution: Es el numero de bits utilizado para realizar la conversión, entre mayor sea el numero de bits, mejor va a ser la resolución del convertidor.

Data Clock: Velocidad del reloj a la cual se alimentan los bloques del modulo, la velocidad máxima es de 8 MHz, esta velocidad determina la velocidad de muestreo del convertidor análogo a digital.



Pos Input: Entrada principal del convertidor. 

Los parámetros anteriores son los mínimos a configurar para poner en funcionamiento el modulo ADCINC, los valores Neg Input y Neg Input Gain, se pueden dejar desconectados y deshabilitados respectivamente. 

Para el funcionamiento del ADC es necesario habilitar las interrupciones, además se recomienda utilizar un modulo PGA de ganancia 1 antes de la entrada del convertidor ADC, a continuación se presenta un código en C en que se muestra como poner en funcionamiento el convertidor, con este código se espera despejar un poco las dudas sobre este modulo. 

//----------------------------------------------------------------------------
// C main line
//----------------------------------------------------------------------------

#include <m8c.h>       
#include "PSoCAPI.h"   

void main(void)
{
PGA_1_Start(3); //se activa el modulo PGA
ADCINC_1_Start(3); //se activa el modulo ADCINC
ADCINC_1_GetSamples(0); // # de muestras a tomar, en este caso muestreo constante
M8C_EnableGInt; //se habilitan las interrupciones
while(1)
{
if(ADCINC_1_fIsDataAvailable()!=0) // si el DAC tiene un dato valido entonces
{
PRT1DR=ADCINC_1_bGetData();//coloca el dato digital por el puerto 1.
}
}
}


Las configuraciones de los parámetros del modulo ADCINC en conjunto con el código anterior son los que se mostraron en la figura 3.

En el siguiente video se muestra una práctica en la cual se toma una señal sinusoidal análoga por medio de un convertidor ADC, este valor se guarda en una variable y por ultimo un convertidor DAC toma este valor retornando como resultado un valor análogo, con lo cual se obtiene la reconstrucción de la señal que se ingreso al sistema en un principio.



domingo, 15 de abril de 2012

CONVERTIDOR DIGITAL A ANALÓGICO CON MODULO DAC


Un DAC ó convertidor digital a analógico es un circuito que es capaz de tomar un valor digital de “n” número de bits para luego entregar al usuario un valor de tipo analógico, uno de los aspectos fundamentales de este tipo de convertidores es la resolución la cual se puede definir como el cambio de voltaje que se presenta por cada cambio del valor digital.

La resolución de estos dispositivos está determinada por el numero de bits que toma en su parte digital, entre mayor sea el numero de bits mejor será la resolución de dicho convertidor. Otro factor que influye en la resolución del DAC es el voltaje al cual trabaja, o en otras palabras el voltaje máximo que va a entregar el convertidor en su parte analógica. Lo anterior se puede ver mejor en los siguientes ejemplos:


Donde:

V= Voltaje de convertidor (Máximo voltaje analógico a representar)
n= Numero de bits del convertidor.

Ejemplo:

Para un DAC de 8 Bits cuyo valor máximo analógico será 5 voltios


Para un DAC de 8 Bits cuyo valor máximo analógico será 3 voltios

Para un DAC de 9 Bits cuyo valor máximo analógico será 5 voltios


Para un DAC de 9 Bits cuyo valor máximo analógico será 3 voltios


La mayoría de este tipo de convertidores está construidos por medio de circuitos de resistencias tipo red R2R como el que se puede ver en la figura 1. También se pueden conseguir en el mercado circuitos integrados que cumplen la función de DAC como es el caso del DAC0800 el cual es un convertidor digital a análogo de 8 bits.

Figura 1 (DAC con red de resistencia R2R)

Sin embargo con los microcontroladores PSoC no se tiene la necesidad de recurrir a estos circuitos externos mencionados anteriormente, esto es debido a que PSoC gracias a sus bloques analógicos tiene la posibilidad de ofrecer módulos DAC de 6, 8 y 9 bits.

Estos módulos utilizan 2 bloques análogos de PSoC para el caso de los DAC de 8 y 9 bits ó un bloque para el caso de los DAC de 6 bits, en ninguno de los casos se utiliza bloques de tipo digital. Estos convertidores toman un código digital para luego entregar a la salida un voltaje que representa a ese código, el valor digital puede ser tomado directamente de uno de los puertos del microcontrolador en formato binario ó puede ser una variable con la cual se esté trabajando dentro del programa, el numero de muestras que pueden llegar a tomar estos módulos DAC es de 125k muestras por segundo.

Configuración modulo DAC:

Los aspectos que se van a tener en cuenta en esta publicación para la configuración del modulo DAC, son los aspectos mínimos para ponerlo en funcionamiento, razón por la cual se recomienda leer la hoja de datos que se puede encontrar desde PSoC Designer para así profundizar sobre características que pueden ser necesarias dependiendo de la aplicación que se piense desarrollar con el DAC.

Luego de agregar el modulo al proyecto se deben configurar los parámetros de los módulos los cuales son:

AnalogBus: Este parámetro indica el bus analógico al cual se va a conectar la salida de convertidor Digital-Analógico.

DataFormat: Este parámetro define el formato del valor digital con el que se va a trabajar el cual puede ser OffsetBinary, TwosComplement, TwoBitSignAndMagnitude.

Figura 2 (Configuración Parametros DAC8)
Luego de esto es necesario inicializar el modulo y ajustar la potencia del mismo en el archivo fuente de nuestra aplicación, esto se puede hacer mediante el comando DAC8_Start(x), donde el valor de “x” representa la potencia con la que se quiere configurar el modulo teniendo los siguientes valores posibles:

DAC8_OFF = 0
DAC8_LOWPOWER = 1
DAC8_MEDPOWER = 2
DAC8_FULLPOWER = 3

Por último el comando DAC8_WriteBlind(x) permite obtener a la salida del DAC el valor analógico del término digital que se quiere convertir, en este caso representado por la “x” que se encuentra en el comando.

Para intentar esclarecer un poco más las cosas en el siguiente código se puede observar una aplicación sencilla en la cual por el puerto 1 del microcontrolador PSoC se está tomando un dato digital (Binario) y luego se entrega el valor analógico.

//-----------------------------------------------------------------------
// C main line
//-----------------------------------------------------------------------

#include <m8c.h>      
#include "PSoCAPI.h"  

void main(void)
{
DAC8_1_Start(3); //se inicializa el modulos DAC8
while(1)
{
DAC8_1_WriteBlind(PRT1DR);/*El DAC toma el valor digital del puerto 1 y retorna el valor análogo por el pin que se haya configurado como salida analógica*/
}
}


Las configuraciones de los parámetros del modulo DAC8 para esta práctica son los que se mostraron anteriormente en la figura 2.

sábado, 31 de marzo de 2012

CONTADOR BINARIO DE 4 BITS (PRACTICA 4)


Para esta ocasión PSoC En español propone la realización de un contador binario de cuatro bits, la idea es que a la salida de uno de los puertos del microcontrolador se pueda visualizar por medio de cuatro LED un conteo de 0 a 15 en el sistema binario.

En esta práctica se pretende que ustedes los lectores propongan sus propias soluciones para llevar a cabo el contador, ya que como en cualquier reto no existe una solución única e irrefutable sino que por el contrario se pueden llegar a encontrar una innumerable cantidad de soluciones cada una dependiente de la persona que se encuentre frente al reto.

Sin embargo acá se propone una solución sencilla basada en un ciclo for, una variable acumuladora y la posterior salida del valor de esta variable en un puerto configurado como salida, el código de este sencillo contador se muestra a continuación:

#include <m8c.h>       
#include "PSoCAPI.h"   
#include <delay.h>

void main(void)
{
int i;              // Variable acumuladora.
while (1)
{
for(i=0;i<=15;i++)  // Ciclo que cuenta entre 0 y 15 para el contador de 4 bits.
{
PRT2DR = i;         // Se escribe en el puerto 2 el valor de a variable i.
Delay10msTimes(100);       // Retardo de 1 segundo.
}
}
}


De esta manera se puede conseguir a la salida del puerto 2 un contador binario de 4 bits, sin embargo se insiste en la importancia de que los lectores propongan sus propias soluciones y de esta manera poder visualizar un espectro más amplio de posibilidades.

En el siguiente vídeo se muestra el funcionamiento que se espera obtener de la práctica propuesta para esta ocasión.


sábado, 17 de marzo de 2012

USO DE LAS FUNCIONES DE RETARDO


Los retardos son quizás de las instrucciones más utilizadas en cualquier programa que se esté desarrollando, estos permiten esperar un tiempo determinado entre la última instrucción realizada y la siguiente que se debe ejecutar. Aunque en la publicación anterior se mostro como hacer un retardo mediante la creación de una función a la que se llamo tiempo y que básicamente funcionaba ejecutando un ciclo “for”, esta no es la mejor manera de realizar un retardo ya que no permite al usuario determinar el tiempo preciso en el cual se va a retrasar la siguiente instrucción del programa. Para poder hacer estos retardos en periodos de tiempos precisos en la mayoría de lenguajes existe la instrucción delay, la cual para los microcontroladores PSoC no es la excepción.

Para poder utilizar la instrucción delay en cualquier programa que se esté desarrollando En PSoC Designer, primero se tiene que agregar al proyecto los archivos “delay.asm” y “delay.h” los cuales pueden ser descargados directamente desde la página web de Cypress Semiconductor por medio del link que se muestra a continuación.

Descarga archivos funciones de retardo (Página oficial de Cypress Semiconductor)

El archivo que se descarga del link anterior contiene los dos archivos que son necesarios para poder ejecutar los retardos en cualquier proyecto, cada uno de estos archivos tiene funciones especificas como lo son:

Delay.asm: Este archivo contiene las 3 funciones que generan los retados en PSoC, las cuales son Delay50u, Delay50uTimes y Delay10msTimes.

Delay.h: Este archivo por su parte contiene las estructuras y prototipos necesarios para llevar a cabo la ejecución de las funciones que se encuentran dentro del archivo delay.asm.

Funciones de retardo: funcionamiento y sintaxis de uso.

Delay50u: Esta función genera un único retraso de 50 µS para velocidades de CPU que se encuentren entre los 1,5 MHz y los 24 MHz. Para velocidades de CPU menores a 1,5 MHz el retardo debe ser calculado por la siguiente formula:
Delay = (1,5 MHz / frecuencia de la CPU)* 50 µS.
La sintaxis para el uso de esta función es la siguiente:
Delay50u ();

Delay50uTimes: Esta función genera un retraso definido en múltiplos de 50 µS, el retardo se generar a partir de un factor de multiplicación ingresado por el programador, esta función básicamente lo que hace es repetir el la función Delay50u el numero de veces indicadas, la sintaxis para el uso de la función es la siguiente:
Delay50uTimes(X); // Donde X es el factor de multiplicación.
El valor máximo de retardo que se puede generar con esta función son 12,75 mS.

Delay10msTimes: Esta función se ejecuta de la misma manera que la función anterior, la diferencia radica en que los retardos se realizan en múltiplos de 10 mS, la sintaxis para el uso es la siguiente:
Delay10msTimes(X); // Donde X es el factor de multiplicación.
El valor máximo de retardo que se puede generar con esta función son 2,55 S.

Pasos para agregar los archivos delay.asm y delay.h:

Para poder utilizar los retrasos en un proyecto primero se deben seguir los siguiente pasos para incluirlos al mismo proyecto:

1. Agregar los archivos “delay.asm” y “delay.h” mediante la ruta:
    “project -> Add File -> Seleccionar los dos archivos”.

2. Después de haber sido agregados, el archivo delay.asm debe quedar alojado en la carpeta source files, por su parte el archivo delay.h debe encontrarse en la carpeta header Files.

3. Incluir en el encabezado del código fuente el archivo delay.h mediante la instrucción: #include<delay.h> .

4. A partir de este momento ya se pueden utilizar las funciones de retardo mediante la sintaxis que se presento anteriormente.

PRACTICA 3 (Uso de retardos)

En esta práctica se pretende observa el comportamiento de la función de retardo Delay10msTimes() ya que es la que presenta mayor facilidad de ser comprobada a simple vista, dado el caso que tenga acceso a instrumentos de medida como un osciloscopio puede comprobar las otras funciones de retardo.

El objetivo de esta práctica comprobar las diferencias en tiempo producidas entre diferentes retardos, esto se va a lograr mediante el control de cuatro LED en cuatro tiempos de la siguiente manera:

(Funcionamiento de la practica 3 - Uso de los retardos)

Los archivos del proyecto realizado en PSoC Designer 5.1 para esta práctica pueden ser descargados por medio del siguiente link:

Descarga archivos Practica 3 (UsoDelay.rar)

En el siguiente video se puede observar paso a paso el uso del las funciones de retardo y la práctica propuesta: