Mostrando entradas con la etiqueta Escritura de puertos. Mostrar todas las entradas
Mostrando entradas con la etiqueta Escritura de puertos. Mostrar todas las entradas

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:


martes, 13 de diciembre de 2011

Lectura y escritura de puertos de PSoC


Con esta publicación se va a dar comienzo al desarrollo de prácticas con los microcontroladores PSoC, en esta primera práctica se va a llevar a cabo el manejo de los puertos de PSoC específicamente la lectura y escritura de estos.


El PSoC CY8C29466 cuenta con tres puertos (Port_0, Port_1 y Port_2), cualquiera de estos puertos puede ser utilizado como entrada o salida de tipo digital, contrario a lo que sucede con las entradas o salidas de tipo análogo para las cuales solo se cuenta con algunos pines específicos de los puertos Port_0 y Port_2.

La lectura y escritura de puertos de PSoC se puede hacer de varias maneras, en esta ocasión se van a observar dos, la primera controlando cada uno de los bits del puerto con una instrucción diferente para cada bit y la segunda controlando todos los 8 bits del puerto mediante una sola instrucción.

Lectura y escritura bit por bit:

Para poder llevar a cabo la lectura o escritura de un bit de cualquiera de los puertos se utiliza el registro PRTXDR donde “X” es el número del puerto que se quiere controlar. Para hacer referencia a alguno de los bits del puerto que se está manejando se utilizan los siguientes números hexadecimales:


(Direcciones Hexadecimales de los Bit en los puertos PSoC)

Además de tener en cuenta el nombre del registro y el valor en hexadecimal del bit a utilizar, también hay que hacer uso de diferentes operaciones booleanas con las cuales se llevan a cabo comparaciones para así leer un bit del puerto ó escribir un estado alto o bajo del mismo. Las operaciones más utilizadas son:


OR (a | b): Se utiliza para escribir un estado alto en un bit y su sintaxis es PRTXDR|=Bit.

AND (a & b): Se utiliza para leer un bit y su sintaxis es PRTXDR&Bit.

COMPLEMENTO (~a): Se utiliza para escribir un estado bajo en un bit y su sintaxis es PRTXDR&=~Bit.


Por ejemplo:

• Para leer si el Port_1_6 se encuentra en un estado alto se debe escribir PRT1DR&0X40;
• Para establecer un valor alto en el Port_2_1 se debe escribir PRT2DR|=0X02;
• Para establecer un valor bajo en el Port_3_4 se debe escribir PRT3DR&=~0X10;

Lectura y escritura de todo el puerto:

Con este método se simplifica la manera de hacer la lectura y la escritura de los puertos ya que con una sola línea de instrucciones se puede realizar la acción deseada en los 8 bits que componen el puerto que se desea controlar, ahorrándose de esta manera la tediosa labor de escribir una línea de instrucción por cada bit.

Para este método se sigue utilizando el registro PRTXDR, las diferencias con el método anterior son básicamente dos:

• Cada puerto se ve como un numero de 8 bits, por lo tanto en el momento de leer o escribir en un puerto lo que se está haciendo es comparar o asignar un numero a todo el puerto seleccionado y no solamente asignando un estado alto ó bajo a cada pin. Por ejemplo si se quiere que enciendan los tres primeros bits del puerto 1 bastara con la instrucción PRT1DR=0b00000111 ó lo que es igual PRT1DR=0x07.

• En lugar de utilizar operaciones booleanas (|, &, ~, ^) para realizar las comparaciones de los estados de los bits del puerto, en este método se utilizan inecuaciones matemáticas como lo son (<, <=, >, >=, =).

PRACTICA 1 (Control de dos LED por medio de un pulsador)

El objetivo de esta práctica es leer un bit de un puerto en el cual se va a encontrar conectado un pulsador, dependiendo si el pulsador indica un estado alto o bajo se deben prender ó apagar los LED conectados en otro puerto, esta labor se debe realizar mediante el uso de registro PRTXDR. El funcionamiento debe ser el siguiente:

(Funcionamiento Practica 1)

En los siguientes link pueden descargar los archivos de los proyectos realizados en PSoC Designer 5.1, cada link es uno de los dos métodos descritos en esta publicación.

Practica1_metodo1.rar
Practica1_metodo2.rar

En el siguiente video se muestra el desarrollo de la práctica.