martes, 31 de enero de 2012

MEJORES PRACTICAS Y RECOMENDACIONES CON PSoC 1 (PARTE 3)



En esta entrega se va a presentar la tercera y última parte del trabajo de traducción y resumen de la nota de aplicación AN2010 titulada PSoC® 1 Best Practices and Recommendations y escrita por Jeff Dahlin, el tema tratado en esta ocasión es la generación del código para PSoC.


GENERACIÓN DE CÓDIGO

En esta sección se resumen ciertos pasos o instrucciones para la generación de código con las herramientas PSoC.

Registros Vs Memoria – Acceso en Assembler:

Un error muy común cuando se pretende trabajar con los registros del microcontrolador es la utilización de instrucciones de acceso de memoria en vez de instrucciones de acceso a registro.
Por ejemplo cuando se accede al registro de INT.MSK0 la instrucción que se debe utilizar es la siguiente:

mov A, reg[INT_MSK0];

Comúnmente se escribe de manera errónea como se muestra a continuación:

mov A, [INT_MKS0];

Las dos opciones son compiladas sin errores, la diferencia radica en la primera instrucción escribe en el registro y la segundo lo hace es en la memoria.

Selección de Banco de datos:

Los registros de los microcontroladores PSoC 1, se encuentran en dos bancos de direcciones diferentes, aunque el diseño de PSoC 1 hace que la mayoría de los registros que se utilizan normalmente se encuentren en el banco 0, en ocasiones es necesario acceder a los registros del Banco 1.

Debido a esta configuración cuando se esté trabajando en assembler se debe asegurar que cada vez que se llamen las API de Cypress y las funciones de biblioteca el Banco 0 se encuentre seleccionado. En caso de ser necesario realizar un cambio de banco de registros, debe hacerse por medio de la instrucción M8C_SetBank0 ó M8C_SetBank1, estos macros son proporcionados por cypress en las librerías m8c.inc y m8c.h.

Los compiladores de C utilizados en PSoC, se encargan de hacer el cambio de banco de manera automática, de tal manera que no es necesario de hacer el proceso de cambio de banco cuando se está escribiendo el código en C.

Bits reservados y no utilizados:

Algunos de los registros de control de PSoC 1 tienen bits con valores de reserva o que no se utilizan. Al escribir hacia esta clase de registros que contienen bits reservados o no utilizados, el valor de estos se debe establecer en cero. Esta acción permite que el código que se está desarrollando sea compatible con versiones anteriores. 

Funciones de inicio de los módulos de usuario:

Todas las API de los módulos de usuario incluyen la función _Start. El usermodulename_Start() es la función que debe ser llamada cuando se quiere iniciar el trabajo con cualquier modulo de usuario de PSoC 1. En los módulos de usuario analógicos además de tener que hacer el llamado a la función _Start, se tiene que llamar a la función de ajuste de potencia.

Reconfiguración Dinámica:

Cuando se utiliza la capacidad de reconfiguración dinámica de PSoC, es necesario detener todos los módulos que se encuentren activados antes de que comience la descarga. También es recomendable deshabilitar las interrupciones globales (M8C_DisableGInt) antes de comenzar la reconfiguración, esto es debido a que en el proceso de reconfiguración se pueden presentar problemas técnicos de no deshabilitar los módulos y las interrupciones.




Hasta acá se deja el trabajo de resumen y traducción de la nota de aplicación AN2010 escrita por Jeff Dahlin, pero se les recuerda que si quieren leer la nota completa la pueden encontrar en la página web de Cypress semiconductor ó en este mismo blog en la pestaña de Hojas de datos y notas de aplicaciones. 

domingo, 15 de enero de 2012

Mejores prácticas y recomendaciones con PSoC 1 (parte 2)


En esta ocasión se va a presentar la segunda parte de la traducción y resumen de la nota de aplicación AN2010 titulada PSoC® 1 Best Practices and Recommendations y escrita por Jeff Dahlin, en esta parte se van a describir los tipos de pin que componen a los microcontroladores PSoC, además algunas configuraciones para funciones analógicas del microcontrolador.

INTERCONEXIÓN Y PINES DE SALIDA

Tipos de pin:

En las familias PSoC 1 22/24/27/29 existen 8 tipos de pines configurables los cuales son los siguientes:

Digital I/O Solamente: Estos pines son los mas abundantes ya que todos los de los puertos de PSoC pueden configurarse como pines de entrada y salida digitales. Tambien pueden actuar como entrada o salida de uso general mediante la configuración stdCPU.

Entradas / Salidas digitales ó entradas análogas: Estos pines pueden funcionar como entradas y salidas de tipo digital ó se puede conectar a los multiplexores como entrada analógica.

Entradas y salidas digitales y análogas: Estos tipos de pines se pueden utilizar para entradas y salidas tanto digitales como análogas, aunque hay que utilizarlos como último recurso si se piensan utilizar como entradas ya que estos son mas útiles como salidas análogas las cuales son más escasas dentro del microcontrolador, razón por la cual estos pines deben de ser valorados.

Entrada - Salida digital ó Entrada analógica directa: Además de utilizarse como entrada - salida digital, estos pines se pueden utilizar directamente como entradas análogas para los bloques de capacitancias conmutadas (SC).

Entrada – Salida digital ó referencia externa: A parte de utilizarse como entrada - salida digital, estos pines se pueden utilizar como suministro para un voltaje de referencia AGND externoy para una tensión de referencia VREF, estas referencias externas proporcionan una mayor flexibilidad para los diseños analógicos.

Entradas – Salidas digitales ó I2C: Estos pines a parte de la aplicación digital se pueden utilizar para comunicaciones I2C, estos pines son preferibles a la I2C suplente ya que estos últimos también son utilizados para la programación ISSP, que puede llegar a interferir con la comunicación I2C.

Entradas – Salidas digitales ó reloj de sistema externo: Estos pines se pueden utilizar como entrada para una fuente externa de reloj (EXTCLK).

Entradas – Salidas digitales, Entrada de cristal externo, Entrada I2C suplente: Estos pines se pueden utilizar para conectar un cristal de 32,678 KHz, también se utilizan como auxiliares o suplentes para comunicación I2C. El ECO se utiliza para la sincronización. Ademas estos pines son los utilizados para la programación ISSP.

En la siguiente tabla se puede observar los tipos de entradas y los puertos asociados a cada tipo de pin:


(Tipos de pin para familias de PSoC 1)

Mejores prácticas para la asignación de pines:

La mejor recomendación para este tema es asignar primero los pines analógicos a las funciones que los requieran. Luego los elementos que sean solamente entradas ó salidas digitales y por ultimo asignar los pines con múltiples funciones.

Buffer de salida análoga:

Siempre que se vaya a hacer el enrutamiento de una salida analógica se debe asegurar que el buffer asociado a la columna de salida esta encendido.

Columna velocidad del reloj analógico:

Es necesario revisar las hojas de datos de los módulos de usuario que vayan a ser utilizados para así asegurar que la velocidad del reloj analógico se está configurando de manera adecuada, ya que un reloj muy rápido o muy lento puede causar problemas con la carga de los condensadores de los módulos analógicos.

Cuanto más rápido es el reloj analógico de un bloque, mayor es el poder del mismo. El ajuste de potencia de un modulo afecta el límite de capacidad de corriente del amplificador operacional dentro del bloque analógico. Con una corriente más alta se cargan con mayor rapidez los condensadores y la frecuencia del reloj es mayor.

Configuración de alimentación analógica:

El ajuste de potencia de las referencias análogas se debe establecer en la configuración de potencia máxima. Como se muestra en la siguiente figura:


(Configuración Alimentación Análoga)