0% encontró este documento útil (0 votos)
727 vistas60 páginas

Consejos Psoc 5Lp: Indice

Este documento proporciona consejos e instrucciones para trabajar con PSoC 5LP. Cubre temas como actualizar el firmware, crear proyectos, copiar proyectos, programar el PSoC, funciones básicas de E/S, control de LCD, visualización de números de punto flotante, proyectos de ejemplo y comunicación serial. Incluye código de ejemplo y diagramas para ilustrar los conceptos.

Cargado por

Chris Rosas
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
727 vistas60 páginas

Consejos Psoc 5Lp: Indice

Este documento proporciona consejos e instrucciones para trabajar con PSoC 5LP. Cubre temas como actualizar el firmware, crear proyectos, copiar proyectos, programar el PSoC, funciones básicas de E/S, control de LCD, visualización de números de punto flotante, proyectos de ejemplo y comunicación serial. Incluye código de ejemplo y diagramas para ilustrar los conceptos.

Cargado por

Chris Rosas
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Consejos PSoC 5LP

INICIOS
Actualización:
7 de marzo de 2021

Índice
1. Actualizar Firmware 2

2. Crear proyecto nuevo en PSoC creator 4.3 3

3. Copiar proyectos 3

4. Programar PSoC 5

5. Funciones básicas 7
5.1. Escribir en un bit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
5.2. Leer un bit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
5.3. Leer y escribir en un puerto de 2 bits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

6. Control de LCD 16 × 2 12
6.1. Ejemplo de funciones LCD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
6.2. Conexiones LCD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
6.3. Ejemplo LCD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

7. Despliegue de flotantes 16

8. Proyectos 17
8.1. Sensor MAX6675 y termocupla tipo K . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

9. Encoder incremental 25
9.1. Dirección de giro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
9.2. Identificar encoder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
9.3. Medición de velocidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

[Link]́n serial 45
10.1. Software emulador puerto serie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
10.2. Envı́o de datos desde Hyper terminal a Psoc 5LP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

1
1. Actualizar Firmware
El kit de fabrica, tiene un firmware que NO permite grabar de forma directa el proyecto, para ello se siguen los
siguientes pasos.
1. Instalar PSoC programmer, PSoC creator y CY8CKIT059SetupOnlyPackage RevSA

2. Abrir PSoC programer y conectar la tarjeta al puerto usb


3. Dar clic en pestaña Utilities
4. Dar clic en Upgrade Frimware
5. En la parte inferior izquierda se verá el avance del proceso y cuando termine se pondrán en verde las barras, ver
figura 1 y 2

Figura 1: Actualizar Firmware paso 5.

2
Figura 2: Actualizar Firmware paso 5.

2. Crear proyecto nuevo en PSoC creator 4.3


Abrir PSoC Creator 4.3, siga los siguientes pasos

1. Dar clic en el botón Create Project, ver figura 3.


2. En la siguiente ventana elegir la tarjeta que se esta usando, en este caso CY8CKIT-059 y dar clic en Next, ver
figura 4.
3. Seleccionar Empty schematic y dar clic en Next, ver figura 5.
4. El nombre en el campo Workspace, hace referencia a la carpeta que se crea para el proyecto, Location elige la
carpeta donde se creará el proyecto y Project name, define el nombre del proyecto (es posible posteriormente
agregar más proyectos en este mismo archivo, copiando y pegando, esto se explicará más adelante en la sección
3), dar clic en Finihs, ver figura 6 y 7.

Figura 3: Crear proyecto paso 1.

3. Copiar proyectos
Esta gran opción en psoc, es de gran ayuda al ir modificando un proyecto y sin perder las actualizaciones previas. Al
tener más de un proyecto en el espacio de trabajo, es importante seleccionar el proyecto activo (el que será programado
en e controlador).

1. Dar clic derecho sobre el proyecto a copiar sobre el proyecto, ver figura 8.
2. Dar clic derecho en la parte en blanco y elegir paste, ver figura 9.
3. Aparecerá la copia del proyecto, este mantiene la asignación de pines y código en archivo main o librerı́as
agregadas, ver figura 10.

3
Figura 4: Crear proyecto paso 2.

Figura 5: Crear proyecto paso 3.

El nombre del proyecto creado puede ser cambiado, dando clic sobre el nombre del proyecto y presionar F2 o clic
derecho sobre el nombre del proyecto y seleccionar Rename, ver figura 11

4
Figura 6: Crear proyecto paso 4.

Figura 7: Crear proyecto paso 4.

4. Programar PSoC
Hay varias formas de realizar programas en PSoC Creator, programación en C, programación únicamente gráfica
y combinación de ambas. Hay bloques que requieren inicializar en archivo main. Algunos consejos previos a hacer el
programa son:

Agregar los bloques de funciones a usar y asignar pines.


Previo a escribir comandos en C, dar clic en Generate Application, este paso genera los comandos de cada bloque
agregado.
Si al compilar hay un error puede ser por que hay alguna lı́nea de conexión sin conectar o hace falta alguna que
sea requerida por algún bloque.
En los bloque que requieren iniciar en archivo main, por ejemplo, timer, pwm, ADC, DAC, Termistor, Waveform,
Character LCD, I2C, SPI, UART.

5
Figura 8: Copiar proyecto paso 1.

Figura 9: Copiar proyecto paso 2.

Figura 10: Copiar proyecto paso 3.

6
Figura 11: Copiar proyecto cambiar nombre.

En los bloques digitales, se tiene la opción HW Conection, permite la conexión del pin con otros bloques en el
espacio de trabajo, de ser desactivada el pin se controla mediante software en archivo main.c.
Una opción que presenta Psoc Creator, es realizar el diagrama eléctrico en el espacio de trabajo para mayor
entendimiento y presentación, mediante la opción External terminal.
Una tarea común en la programación es cambiar los bits en los registros. Por suerte, PSoC permite los siguientes
operadores bit a bit:
a—b Operación OR bit a bit, Se usa para encender algún bit o bits, usando asignación — =. Por ejemplo:
LUCES — = 0x80;, la cual activa el bit 7 (msb)
a & b Operación AND bit a bit, Se usa para verificar si ciertos bits están en estado lógico alto. Por ejemplo: if
((LUCES & 0x81) == 0)// revisa si el bit 7 y el bit 0. Note que Los paréntesis en la operación AND son
necesarios ya que este operador tiene menor prioridad que el operador de igualdad ==.
a∧ b Operación XOR (OR EXCLUSIVA) bit a bit, es implementado para cambiar el estado de un bit. Por
ejemplo: salida ∧ = 0x80; invierte el estado del bit 7.
∼a Complemento a uno bit a bit, es usado para complemento a uno. Por ejemplo: LUCES &= ∼ 0x80;, cambia
el bit 7.
El bloque de LCD, sirve bastante bien para el despliegue de datos en display de 16x2, el único inconveniente es
que requiere de un puerto de siete bits contiguos, para evitar mostrar datos “raros”, usar el puerto P2 o P12, en
el puerto P0 provoca errores, esto debido a capacitores que tiene la placa de fabrica.
Los datos a mostrar en el LCD, deben ser enteros, de ser flotantes (tipo float), se deben realizar algunos cambios
en la configuración y en el archivo main.c, más adelante se describen estos pasos en la sección 7.

5. Funciones básicas
Las funciones básicas, para leer y escribir en un pin digital, manejo de puertos de más de 2 bits hasta 8 bits. Es
hacer referencia a los pines digitales, para ello se agrega 0 en las funciones, por ejemplo:
CyPins ReadPin(); Lee el valor de un bit, donde su parámetro es el nombre del pin. Por ejemplo, leer un pin
llamado sensor: CyPins ReadPin(sensor 0);, regresa 0x10 si el valor es un nivel lógico alto, y 0x00 si el valor es
un nivel lógico bajo.
CyPins SetPin(); Establece un nivel lógico alto a un bit, por ejemplo: escribir nivel lógico alto
el pin llamado luz: CyPins SetPin(luz 0);
CyPins ClearPin(); Establece un nivel lógico bajo a un bit, por ejemplo: escribir nivel lógico bajo
el pin llamado luz: CyPins ClearPin(luz 0);

7
Pin Read(); Lee el valor de un bloque digital completo, puede ser de un bit o un puerto completo de ocho bits,
regresa un entero sin signo de ocho bits justificado
a la derecha, por ejemplo: leer el bloque de entrada digital llamado sensores CNC: sensores CNC Read();.
Pin Write(); Escribe el valor de un bloque digital completo, puede ser de un bit o un puerto completo de ocho
bits, por ejemplo: escribir en el bloque de salida digital llamado motor CNC el valor en hexadecimal 0x08 :
motor CNC Write();. el valor puede ser en binario o decimal, el compilador lo escribe en binario justificado a la
derecha.
CyDelay(); Genera retardo en milisegundos, su parámetro de entrada es un entero sin signo de 32 bits.

5.1. Escribir en un bit


En este ejemplo, se hace uso del led que se tiene en la tarjeta, si se asigna algún otro pin, es necesario agregar la
resistencia y led correspondiente. Se realiza mediante software el encendido y apagado del led.
1. Agregar un bloque Digital Output Pin [v2.20], con la configuración: , Nombre led, Numbers of Pins en 1,
deshabilitar opción HW connection, deshabilitar External terminal, Drive mode en Strong drive, ver figura 12 y
13.
2. Asignar el bloque led a P2[1].
3. Dar clic en el botón de herramienta Generate Application.
4. Abrir el archivo main.c, escribir el código como se muestra en la figura 14.
5. Dar clic en la herramienta build
6. Conectar la tarjeta PSoC 5LP y dar clic en la herramienta Program

Figura 12: Escribir bit paso 1.

5.2. Leer un bit


En este ejemplo, se realiza la lectura de un bit, para ello se usará el botón de usuario, para evitar la conexión de
una resistencia externa se usaran la resistencia de pull up de la tarjeta PSoC 5LP. Sigue los pasos:
1. Agregar un bloque Digital Input Pin [v2.20], con la configuración: Nombre sensor CNC, Numbers of Pins en 1,
deshabilitar opción HW connection, deshabilitar External terminal, Drive mode resistive pull up, ver figura 15
y 16.

8
Figura 13: Escribir bit paso 1.

Figura 14: Escribir bit paso 4.

2. Agregar un bloque Digital Output Pin [v2.20], con la configuración: Nombre motor, Numbers of Pins en 1,
deshabilitar opción HW connection, deshabilitar External terminal, Drive mode strong drive, ver figura 17.
3. Asignar sensor CNC al pin P2[2] y motor al pin P2[1], ver figura 18.
4. Dar clic en la herramienta Generate Application.
5. En el archivo main, escribir el código que se muestra en la figura 19.

9
6. Conectar la tarjeta PSoC 5LP y dar clic en la herramienta Program.

Figura 15: Leer bit paso 1.

Figura 16: Leer bit paso 1.

5.3. Leer y escribir en un puerto de 2 bits


En este ejemplo, es implementado mediante dos botones pulsadores normalmente abiertos NA, dos led y dos
resistencias de 330 Ω, y se hace uso de las resistencias de pull up de la tarjeta, la asignación se hace en forma binaria,
con fines de mostrar como pueden ser ingresados los parámetros de las funciones. Sigue estos pasos:

1. Agregar un bloque Digital Input Pin [v2.20], con la configuración: Nombre sensores CNC, Numbers of Pins en
2, deshabilitar opción HW connection, habilitar External terminal, Drive mode resistive pull up, el diagrama de
conexión se muestra en la figura 20 y la configuración en la figura 21.

10
Figura 17: Leer bit paso 2.

Figura 18: Leer bit paso 3.

2. Agregar un bloque Digital Output Pin [v2.20], con la configuración: Nombre motores, Numbers of Pins en 2,
deshabilitar opción HW connection, habilitar External terminal, Drive mode strong drive, ver figura 22.
3. Asignar sensores CNC al pin P2[4:3] y motores al pin P0[1:0], ver figura 23.
4. Dar clic en la herramienta Generate Application.
5. En el archivo main, escribir el código que se muestra en la figura 24.

6. Conectar la tarjeta PSoC 5LP y dar clic en la herramienta Program.

11
Figura 19: Leer bit paso 5.

Figura 20: Leer y escribir en puerto paso 1.

6. Control de LCD 16 × 2
Las funciones del bloque están configuradas con el nombre del bloque LCD Char, estas se muestran en la tabla 1,
se presenta un ejemplo de las funciones en la sección 6.1 y un ejemplo en la sección 6.3.

6.1. Ejemplo de funciones LCD


void LCD_Char_PrintString(char8 const string[])
LCD_Char_PrintString("Texto");
void LCD_Char_Position(uint8 row, uint8 column)
LCD_Position(0,0);
void LCD_Char_ClearDisplay(void)
LCD_Char_ClearDisplay();
void LCD_Char_PrintNumber(uint16 value)
LCD_Char_PrintNumber(65535);
void LCD_Char_PrintU32Number(uint32 value)
LCD_Char_PrintNumber(4294967295);

12
Figura 21: Leer y escribir en puerto paso 1.

Figura 22: Leer y escribir en puerto paso 2.

6.2. Conexiones LCD


El bloque Character LCD, asigna los pines digitales de forma consecutiva. Los pines para la LCD, están asignados
como se muestra en la tabla 2, se muestra un diagrama de conexión en la figura 25 y una lista con las conexiones de
LCD en la tabla 3. Algunos consejos son:
En el pin V0 de la LCD se debe conectar un potenciómetro de 10 KΩ o bien un divisor de tensión.

13
Figura 23: Leer y escribir en puerto paso 3.

Figura 24: Leer y escribir en puerto paso 5.

En el pin A de luz del LCD, es opcional incluir una resistencia de 1KΩ, para conectar en directo el led de luz de
fondo a VCC o de lo contrario dejar sin conectar.
En el pin K va conectado a GN D y si no se conecto la resistencia puede quedar sin conexión.

Los pines de la LCD D0 , D1 , D2 y D3 quedan sin conexión.


La pantalla LCD puede ser asignada a un puerto de 7 bits contiguos, salvo en los puertos que se tienen capacitores
conectados de fabrica en la tarjeta de desarrollo, (Para detalle consultar CY8CKIT-059 Schematics).

6.3. Ejemplo LCD


Se creará un proyecto, en el que se imprima un texto PSoC 5LP, en la pantalla LCD de 16 × 2. Sigue estos pasos

14
Función Descripción
Inicia el módulo y carga el juego de
LCD Char Start() caracteres personalizado en LCD,
si se definió.
Imprime una cadena de caracteres
LCD Char PrintString() terminada en un carácter nulo en
la pantalla.
Establece la posición del cursor
LCD Char Position() para que coincida con la fila
y la columna proporcionadas.
Imprime el valor decimal de un valor
LCD Char PrintNumber() de 16 bits como caracteres ASCII
justificados a la izquierda.
Imprime un valor uint32 como un valor
LCD Char PrintU32Number()
decimal justificado a la izquierda.
Borra los datos de la pantalla,
LCD Char ClearDisplay() y ubica el cursor en el renglón
y columna cero.

Tabla 1: Funciones para LCD.

Pin Lógico Pin LCD Descripción


LCDPort[0] D4 Bit de datos 0
LCDPort[1] D5 Bit de datos 1
LCDPort[2] D6 Bit de datos 2
LCDPort[3] D7 Bit de datos 3
LCDPort[4] E Habilitación de LCD
LCDPort[5] RS Seleccionar registro
(seleccionar datos o
controlar datos de entrada)
LCDPort[6] RW Lectura/Escritura de la LCD

Tabla 2: Conexión de LCD en PSoC.

Pin LCD Descripción


VSS GND
VDD VCC
V0 Contraste
Rs Seleccionar registro
(seleccionar datos o
controlar datos de entrada)
RW Lectura/Escritura de la LCD
E Habilitación de LCD
D4 Bit de datos 0
D5 Bit de datos 1
D6 Bit de datos 2
D7 Bit de datos 3
A Ánodo de luz de LCD
K Cátodo de luz de LCD

Tabla 3: Pines de LCD.

1. Abrir el catalogo de componentes y agregar el bloque Character LCD, en la configuración de esté cambiar el
nombre a LCD.

2. Dar click en la herramienta construir.

15
Figura 25: Conexión de LCD de la sección 6.2.

3. Abrir el archivo main.c y escribir el código

#include "project.h"
int main(void)
{
CyGlobalIntEnable; /* Enable global interrupts. */

/* Place your initialization/startup code here (e.g. MyInst_Start()) */


LCD_Start();
for(;;)
{
/* Place your application code here. */
LCD_Position(0,0);
LCD_PrintString("PSoC");
LCD_Position(1,0);
LCD_PrintString("5 LP");
}
}
/* [] END OF FILE */

7. Despliegue de flotantes
Para poder mostrar datos tipo float, sigue estos pasos del ejemplo.
1. Crear un proyecto con un bloque LCD
2. Configurar el nombre del bloque con LCD, La opción LCD custom character set en none y seleccionar Include
ASCII to number conversion routines y dar clic en ok.

3. Dar clic en la herramienta de generate application o menú build y opción generate application
4. Abrir archivo main colocar el siguiente código:

#include "project.h"
#include "stdio.h"
float32 temp;
char str[16];
int main(void)
{
CyGlobalIntEnable; /* Enable global interrupts. */

16
/* Place your initialization/startup code here (e.g. MyInst_Start()) */
LCD_Start();
temp=32.299;
for(;;)
{
LCD_Position(0,0);
LCD_PrintString("El valor es:");
sprintf(str,"%.3f",temp);
LCD_Position(1,1);
LCD_PrintString(str);
}
}

/* [] END OF FILE */

5. Dar clic en Pins y asignar el bloque LCD a P2[6:0]

6. Dar clic en la herramienta build o menú build y elegir build


7. Ir a menú Project y seleccionar Build settings, se abre una ventana de dialogo
8. En la ventana de dialogo hay un árbol de configuraciones, abrir arm GCC y en la pestaña general. Cambiar la
opción Use newlib-nano Float Formatting a True y dar clic en apply y después en ok, ver figura 26.

9. En el explorador de archivos abrir System o abrir Pins y en la parte inferior seleccionar la pestaña de System
10. En el campo Heap Size cambiarlo a 0x200, ver figura 27.
11. Dar clic en herramienta Program o menú Debug y seleccionar Program

Figura 26: Corrección de sprintf paso 8.

8. Proyectos
Hay varios sensores que se usan hoy en dı́a, se presentan algunos para ser integrados en tus proyectos.

17
Figura 27: Corrección de heap size paso 10.

8.1. Sensor MAX6675 y termocupla tipo K


Los datos son entregados bajo el protocolo SPI, protocolo de interfaz serial, hay al menos dos dispositivos, maestro y
esclavo; el MAX6675 funciona solo como esclavo (solo envı́a datos). Este protocolo se forma por cuatro entradas/salidas
digitales. MISO (master input slave output), MOSI(master output salve input), sclk (señal de reloj), CS (selección de
chip).

La comunicación se inicia cuando CS se encuentra en nivel digital bajo y la lectura de datos es sı́ncrona con la señal
sclk. Para generar una nueva conversión, poner CS en nivel digital alto. El tiempo de conversión por el MAX6675 es
de 200ms.
El MAX6675 envı́a una trama de 16 datos, el primer dato envı́ado corresponde al bit MSB de la trama y el último
dato es un dı́gito al LSB de la trama, este último es tri-estado (se puede despreciar su valor). Los datos de envı́an
como se muestra en la figura 28

Figura 28: Envı́o de datos.

De a cuerdo al diagrama temporal, se tiene un estado de inicio de envı́o de datos, CS en alto, CS en bajo y SO
(Serial output) en bajo, posteriormente un tiempo tcss pasado este tiempo generar un flanco de subida de SCLK,
esperar y poner SCLK en bajo y posteriormente leer el estado de SO, repetir hasta obtener el dato cero de la trama
y para finalizar el envı́o y forzar una nueva conversión poner CS en alto.
El bit 2 indica si la termocupla esta conectada con un valor 0 y abierta en 1, del dato 3 (LSB) al 14 (MSB)
es el resultado de la temperatura de la termocupla,el bit 15 indica el signo de la temperatura (0 para temperaturas
positivas) y el dato 1 es un identificador del circuito siempre es cero, ver figura 29. El voltaje de operación del integrado
es de 5V, el integrado se muestra en la figura 30.
La polaridad de la termocupla esta definida por sus cables, rojo a + del CI MAX6675 y cable azul a −, como se
muestra en la figura 31. Sigue los siguientes pasos

Agregar un bloque Digital Input Pin [v2.20] con la configuración: Name MISO, Number of pins 1, deshabilitar

18
Figura 29: Datos.

Figura 30: Circuito.

HW connection y External terminal, Drive mode en High impedance digital, initial drive state en low.

Agregar un bloque Digital Output Pin [v2.20] con la configuración: Name CLK, Number of pins 1, deshabilitar
HW connection y External terminal, Drive mode en Strong drive, initial drive state en low.
Agregar un bloque Digital Output Pin [v2.20] con la configuración: Name CS, Number of pins 1, deshabilitar
HW connection y External terminal, Drive mode en Strong drive, initial drive state en High.
Agregar un bloque Character LCD [v2.20] con la configuración: Name LCD, en apartado LCD Custom Character
Set en None y habilitar include ASCII to Number Conversion Routines.
Asignar los pines: LCD P2[6:0], CLK P15[1], CS P15[0] y MISO P3[0].
Dar click en el la herramienta Generate Application
Abrir el archivo main.c y escribir el código

Realizar las conexiones de forma adecuada, no se requieren resistencias de Pull up en las conexiones.

En el apartado de System cambiar Heap Size a 0x200, en el menú Proyect-Build settings abrir ventana y en el árbol
seleccionar ARM GCC y seleccionar Linker, en el lado derecho cambiar el valor de Use newlib-nano Float Formatting
en True, finalmente en el archivo main incluir la librerı́a stdio.h mediante: #include <stdio.h>, Es necesario recor-
dar el operador XOR “∧ ” bit a bit en C, corrimiento a la derecha >> he izquierda << de bits y asignación de vectores.

El corrimiento se denota como dato<< 2 corre dos posiciones a la izquierda la variable dato.

El operador XOR se denota dato∧ valor realiza la operación XOR bit a bit entre la variable dato y valor.

Declaración de funciones y definir constantes. #define termocupla_open (0u) Define la palabra termocupla_open
como un valor constante cero sin signo (u). Puede ser usada a lo largo del código.

Asignación de valores en hexadecimal de 8 bits dato=0xDFu y de 16 bits dato=0xA7DFu. En este ejemplo se des-
pliega la temperatura en grados Celsius, el signo de la temperatura y si la termocupla esta conectada o abierta.

19
Figura 31: Polaridad.

Signo (dato 15 = 0 de la trama de datos recibida), despliega un signo + previo a la temperatura y - (dato 15 = 1 de
la trama de datos recibida).

ID (dato 1 = 0 de la trama de datos recibida), se muestra ID 0.

Termocupla abierta (dato 2 de la trama de datos recibida), despliega TOP OK si dato 2 = 0, termocupla co-
nectada y despliega TOP Error si dato 2 = 1 termocupla abierta, el diagrama de conexión se muestra en la figura
32. El código es:

Figura 32: Plantilla.

#include "project.h"
#include <stdio.h>
/* Degree sign */
#define DEGREE (0xDFu)//sı́mbolo de grados
/*termocupla*/
#define termocupla_open (0u)
#define negativo (0u)

/*Variables globales*/

20
float gradosC;
char text[16];
int8 ter_open, signo, ID;

//inicia conversión
void ini_conv(void){

CyPins_ClearPin(CLK_0);
CyPins_ClearPin(MISO_0);
CyPins_SetPin(CS_0);//detiene TRANSMISIÓN DE DATOS
CyDelay(200);//espera conversión
}

//leectura de temperatura, signo, termo_open


float read_TC(void){
int8 i;
uint16 aux;
float gradosCaux;

uint16 temporal[16];
aux=0x0000;//borra variable para ajustar datos

CyPins_ClearPin(CS_0);
CyDelay(1);
/*Lectura de datos*/
for(i=0;i<16;i++){
temporal[i]=CyPins_ReadPin(MISO_0);//LEE DATO
CyPins_SetPin(CLK_0);
CyDelayUs(1);
CyPins_ClearPin(CLK_0);
CyDelayUs(1);
}

CyDelay(1);
CyPins_SetPin(CS_0);//TERMINA ENVÍO DE DATOS

/*ajuste de datos*/

//LSB
if(temporal[12]!=0){
temporal[12]=temporal[12]>>4;
}
aux=temporal[12]^aux;//actualiza LSB, 0X0001

//B1
if(temporal[11]!=0){
temporal[11]=temporal[11]>>3;
}
aux=temporal[11]^aux;//0X0003

//B2
if(temporal[10]!=0){
temporal[10]=temporal[10]>>2;
}
aux=temporal[10]^aux; //0X0007

//B3

21
if(temporal[9]!=0){
temporal[9]=temporal[9]>>1;
}
aux=temporal[9]^aux;//0X000F

//B4
if(temporal[8]!=0){
temporal[8]=temporal[8]>>0;
}
aux=temporal[8]^aux;//0X001F

//B5
if(temporal[7]!=0){
temporal[7]=temporal[7]<<1;
}
aux=temporal[7]^aux;// 0X003F

//B6
if(temporal[6]!=0){
temporal[6]=temporal[6]<<2;
}
aux=temporal[6]^aux;// 0X007F

//B7
if(temporal[5]!=0){
temporal[5]=temporal[5]<<3;
}
aux=temporal[5]^aux;// 0X00FF

//B8
if(temporal[4]!=0){
temporal[4]=temporal[4]<<4;
}
aux=temporal[4]^aux;// 0X01FF

//B9
if(temporal[3]!=0){
temporal[3]=temporal[3]<<5;
}
aux=temporal[3]^aux;// 0X03FF

//B10
if(temporal[2]!=0){
temporal[2]=temporal[2]<<6;
}
aux=temporal[2]^aux;// 0X07FF

//B11
if(temporal[1]!=0){
temporal[1]=temporal[1]<<7;
}
aux=temporal[1]^aux;// 0X0FFF

gradosCaux=aux;//asigna el valor ajustado de temperatura


gradosCaux=gradosCaux*0.25;//determina temperatura en grados Celsius

22
/*asigna bits de signo termocupla abierta y ID max6675*/
/*declarar estas variables globales fuera de la función*/
ter_open=temporal[13];//lee termocuple OPEN 1 Y CONECT 0
signo=temporal[0];//0 si temperatura es positiva
//1 si es negativa
ID=temporal[14];//ID DE MAX6675 SIEMPRE EN CERO

return(gradosCaux);
}

int main(void)
{
CyGlobalIntEnable; /* Enable global interrupts. */

gradosC=0;//temperatura

/* Place your initialization/startup code here (e.g. MyInst_Start()) */


LCD_Start();

for(;;)
{

/* Place your application code here. */


ini_conv();//inicia conversión
gradosC=read_TC();//lee valor de temperatura en grados Celsius
/*despliegue de datos*/
LCD_ClearDisplay();
LCD_PrintString("Temp:");
if(signo != negativo){
LCD_PutChar(’-’);//si es temperatura negativa
}else{
LCD_PutChar(’+’);
}
//Imprime temperatura
sprintf(text,"%4.2f",gradosC);
LCD_PrintString(text);
LCD_PutChar(DEGREE);//imprime simbolo de datos
LCD_PutChar(’C’);
LCD_Position(1,0);
LCD_PrintString("ID ");
LCD_PrintDecUint16(ID);//siempre es cero
LCD_PutChar(’ ’);
LCD_PrintString("TOP ");//termocupla open
if(ter_open != termocupla_open){
LCD_PrintString("Error");
}else{
LCD_PrintString("OK");
}
CyDelay(500);//espera a nueva conversión

}
}

/* [] END OF FILE */

23
Las configuraciones de cada bloque se muestran en las figuras 33 a la 37

Figura 33: Configuración.

Figura 34: Configuración.

24
Figura 35: Configuración.

Figura 36: Configuración.

9. Encoder incremental
9.1. Dirección de giro
Este ejemplo es para hacer una prueba del encoder y verificar que funcione correctamente, en los ejemplos siguientes
se identifica la resolución del encoder. Ejemplo basado en el código de ejemplo CE220799 de Cypresr y PSoCr
CreatorTM Component Datasheet del bloque Quadrature Decoder[v3.0]. Descripción de los pines:

25
Figura 37: Configuración.

CLK QA
DT QB
SW No conectar

+ Vcc de la fuente (5V)


GND GND del circuito y tarjeta PSoC 5LP

Sigue las siguientes instrucciones:


Insertar un bloque Quadrature Decoder[v3.0], con la configuración: Name QuadDec, en pestaña Counter Size
seleccionar 8 bit, pestaña Counter Resolutión seleccionar 1x, pestaña Use Index Input deshabilitar Use index
input, pestaña Enable Glitch Filtering habilitar Enable glitch filtering y pestaña Build-in deshabilitar todas las
opciones y dejar en blanco User Comments.

Insertar un bloque Digital Input Pin [v2.20], con la configuración: Name QA, Type habilitar HW Connection,
Drive mode en High impedance digital, Initial drive state en Low, deshabilitar Externalterminal. Conectarlo a
la entrada quad A del bloque QuadDec.
Insertar un bloque Digital Input Pin [v2.20], con la configuración: Name QB, Type habilitar HW Connection,
Drive mode en High impedance digital, Initial drive state en Low, deshabilitar Externalterminal. Conectarlo a
la entrada quad B del bloque QuadDec.
Agregue a la entrada Clock del bloque QuadDec un bloque Clock con la configuración: Name Clock 1, Clock
type en New, Sourse Auto, Frecuency en 1MHz, habilitar Tolerance y −5 % + 5 %
Agregue un bloque Digital Output Pin [V2.20] con la configuración: Name horario, Type deshabilitar HW
connection, Drive mode Strong drive, Initial drive state Low, es necesario agregar una resistencia en serie con
un led (cátodo en GND) a la salida de este pin.
Agregue un bloque Digital Output Pin [V2.20] con la configuración: Name antihorario, Type deshabilitar HW
connection, Drive mode Strong drive, Initial drive state Low, es necesario agregar una resistencia en serie con
un led (cátodo en GND) a la salida de este pin.

En archivo main escribir el código que se presenta.

26
La asignación de pines es de la siguiente forma: antihorario P15[1], horario P15[0], QA P3[0],QB P3[1], compilar
y programar.
El código es:

//direccion de giro
#include "project.h"
#include <stdio.h>
/*Declarar constantes*/
#define MID_COUNT (0x80u) /* for 16 bit counter*/
#define DELAY (10u) /* 10 msec */

int main(void)
{
CyGlobalIntEnable; /* Enable global interrupts. */
int8 cuenta= MID_COUNT;//inicia contador de cuenta actual
int8 countPrev = MID_COUNT;//inicia contador de cuenta anterior
/* Place your initialization/startup code here (e.g. MyInst_Start()) */
QuadDec_Start();//inicializa encoder
for(;;)
{
/* Place your application code here. */
cuenta=QuadDec_GetCounter();//obtiene valor actual de encoder
if(cuenta > countPrev) /* Condition for clockwise rotation */
{
CyPins_SetPin(horario_0); /* Red horario ON */
CyPins_ClearPin(antihorario_0); /*Green antihorario OFF */
CyDelay(DELAY);
}
else if(cuenta < countPrev) /* Condition for anti-clockwise rotation */
{
CyPins_ClearPin(horario_0); /* Red horario OFF */
CyPins_SetPin(antihorario_0);/*Green antihorario ON */
CyDelay(DELAY);
}
else /* No rotation */
{
CyPins_ClearPin(horario_0); /* Red horario OFF */
CyPins_ClearPin(antihorario_0); /*Green antihorario OFF */
}
/* Update countPrev value */
countPrev = cuenta;

}
}

/* [] END OF FILE */
Las capturas de las ventanas de configuración del ejemplo 9.1, se muestran de las figuras 38 − 49.

9.2. Identificar encoder


En los próximos ejemplos, se realizan con el encoder mostrado en la figura 50. Este cuenta con dos salidas canal A
y canal B, los cuales corresponden a los pines CLK y DT; la salida SW corresponde a un interruptor que funciona al
presionar el eje del encoder (no es necesario conectarlo), los pines de voltaje son GND y +. No se requiere conectar
resistencia de pull-up. Se hace uso del bloque de psoc creator Quadrature Decoder[v3.0], el cual se encarga de contar
los pulsos del encoder.

27
Figura 38: Plantilla del ejemplo 9.1.

Figura 39: Plantilla del ejemplo 9.1.

Para fines demostrativos se inicia un contador en la mitad de la cuenta de resolución de 8 bits.

Ejemplo basado en el código de ejemplo CE220799 de Cypresr y PSoCr CreatorTM Component Datasheet del bloque
Quadrature Decoder[v3.0]. Instrucciones
Insertar un bloque Quadrature Decoder[v3.0], con la configuración: Name QuadDec, en pestaña Counter Size
seleccionar 8 bit, pestaña Counter Resolutión seleccionar 1x, pestaña Use Index Input deshabilitar Use index
input, pestaña Enable Glitch Filtering habilitar Enable glitch filtering y pestaña Build-in deshabilitar todas las

28
Figura 40: Plantilla del ejemplo 9.1.

Figura 41: Plantilla del ejemplo 9.1.

opciones y dejar en blanco User Comments.


Insertar un bloque Digital Input Pin [v2.20], con la configuración: Name QA, Type habilitar HW Connection,
Drive mode en High impedance digital, Initial drive state en Low, deshabilitar Externalterminal. Conectarlo a
la entrada quad A del bloque QuadDec.

Insertar un bloque Digital Input Pin [v2.20], con la configuración: Name QB, Type habilitar HW Connection,

29
Figura 42: Plantilla del ejemplo 9.1.

Figura 43: Plantilla del ejemplo 9.1.

Drive mode en High impedance digital, Initial drive state en Low, deshabilitar Externalterminal. Conectarlo a
la entrada quad B del bloque QuadDec.

Agregue a la entrada Clock del bloque QuadDec un bloque Clock con la configuración: Name Clock 1, Clock
type en New, Sourse Auto, Frecuency en 1MHz, habilitar Tolerance y −5 % + 5 %
Agregue un bloque Digital Output Pin [V2.20] con la configuración: Name horario, Type deshabilitar HW

30
Figura 44: Plantilla del ejemplo 9.1.

Figura 45: Plantilla del ejemplo 9.1.

connection y habilitar external terminal, Drive mode Strong drive, Initial drive state Low, es necesario agregar
una resistencia en serie con un led (cátodo en GND) a la salida de este pin.
Agregue un bloque Digital Output Pin [V2.20] con la configuración: Name antihorario, Type deshabilitar HW
connection y habilitar external terminal, Drive mode Strong drive, Initial drive state Low, es necesario agregar
una resistencia en serie con un led (cátodo en GND) a la salida de este pin.
En los bloques horario y antihorario agregar resistencia, diodo led y Vss del catalogo off-Chip del catalogo de

31
Figura 46: Plantilla del ejemplo 9.1.

Figura 47: Plantilla del ejemplo 9.1.

componentes
Agregar un bloque Character LCD [v2.20], con la configuración: Name LCD, Custom Character Set en None y
habilitar Include ASCII to Number Conversion Routines
En archivo main escribir el código que se presenta
La asignación de pines es de la siguiente forma: antihorario P15[1], horario P15[0], QA P3[0],QB P3[1], LCD en

32
Figura 48: Plantilla del ejemplo 9.1.

Figura 49: Plantilla del ejemplo 9.1.

P2[6:0], compilar y programar

En archivo main escribir el código que se presenta


La asignación de pines es de la siguiente forma: antihorario P15[1], horario P15[0], QA P3[0],QB P3[1], LCD en

33
Figura 50: Encoder del ejemplo.

P2[6:0], compilar y programar


El código es:

//programa para medir cuantos pulsos entrega el encoder por revolucion


#include "project.h"
#include <stdio.h>

/*Declarar constantes*/
#define MID_COUNT (0x80u) /* for 16 bit counter*/
#define DELAY (10u) /* 10 msec */

int main(void)
{
CyGlobalIntEnable; /* Enable global interrupts. */
int8 cuenta= MID_COUNT;//inicia contador de cuenta actual
int8 countPrev = MID_COUNT;//inicia contador de cuenta anterior
char str[16];
/* Place your initialization/startup code here (e.g. MyInst_Start()) */
QuadDec_Start();//inicializa encoder
LCD_Start();//inicializa LCD
for(;;)
{
/* Place your application code here. */
cuenta=QuadDec_GetCounter();//obtiene valor actual de encoder
if(cuenta > countPrev) /* Condition for clockwise rotation */
{
CyPins_SetPin(horario_0); /* Red horario ON */
CyPins_ClearPin(antihorario_0); /*Green antihorario OFF */
CyDelay(DELAY);
}
else if(cuenta < countPrev) /* Condition for anti-clockwise rotation */
{

34
CyPins_ClearPin(horario_0); /* Red horario OFF */
CyPins_SetPin(antihorario_0);/*Green antihorario ON */
CyDelay(DELAY);
}
else /* No rotation */
{
CyPins_ClearPin(horario_0); /* Red horario OFF */
CyPins_ClearPin(antihorario_0); /*Green antihorario OFF */
}
/* Update countPrev value */
countPrev = cuenta;
LCD_Position(0,0);
LCD_PrintString("Cuenta");
CyDelay(20);
LCD_Position(1,0);
LCD_PrintString(" ");//borra valor anterior
//CyDelay(1000);
LCD_Position(1,0);
sprintf(str,"%d",countPrev);//imprime valor de cuenta actual
LCD_PrintString(str);

}
}
/* [] END OF FILE */

Las ventanas de configuración se muestran de la figura 51 a la 64.

Figura 51: Plantilla del ejemplo 9.2.

9.3. Medición de velocidad


Ejemplo basado en el código de ejemplo CE220799 de Cypresr y PSoCr CreatorTM Component Datasheet del
bloque Quadrature Decoder[v3.0] y PSoCr CreatorTM Component Datasheet. Timer 2.80,5 Junio,2017.
Un método para determinar los pulsos en un minuto, es mediante una fracción de minuto cuantificar los pulsos del
encoder y posteriormente recuperar el conteo si hubiese realizado el conteo en un minuto.

35
Figura 52: Plantilla del ejemplo 9.2.

Figura 53: Plantilla del ejemplo 9.2.

De modo que se tiene


60s
factor =
tiempo de muestreo

36
Figura 54: Plantilla del ejemplo 9.2.

Figura 55: Plantilla del ejemplo 9.2.

de modo que si se fija un tiempo de muestreo de 5s se tiene un factor


60s
factor = = 12
5s
Previamente se identifico el encoder, el cual genera 20 pulsos por revolución. Un método para la medición de velocidad
en revoluciones por minuto, es medir la cantidad de pulsos en una fracción de minuto, para este ejemplo se realiza la
medición cada 5s, es decir, si se considera una velocidad constante, la cantidad de pulsos que se capturarı́an en un

37
Figura 56: Plantilla del ejemplo 9.2.

Figura 57: Plantilla del ejemplo 9.2.

minuto serán:
pulsos en 5s × 12 = pulsos en 60s = pulsos en 1min

38
Figura 58: Plantilla del ejemplo 9.2.

Figura 59: Plantilla del ejemplo 9.2.

Para este encoder la velocidad con un tiempo de muestreo de 5s, se obtiene mediante
rev pulsos en base de tiempo × factor
Velocidad =
min pulsos por revolución de encoder
pulsos en 5s × 12
=
20
Dado que la resolución seleccionada, del bloque Quadrature Decoder[v3.0] es de 8 bits y el encoder genera 20 pul-

39
Figura 60: Plantilla del ejemplo 9.2.

Figura 61: Plantilla del ejemplo 9.2.

sos/rev. Este ejemplo es funcional únicamente para velocidades de hasta 6 rev/min, de lo contrario se crea un desborde
del contador del bloque Quadrature Decoder[v3.0]. Dicho desborde, reinicia la cuenta a cero del contador del bloque,
de modo que se tendrı́a un calculo de velocidad erróneo si la velocidad supera las 6 rev/min.

Para usar el bloque a mayor número de rev/min, se debe aumentar la resolución del bloque y/o hacer uso de la
salida interrupt. Para ello consulte la hoja de datos del bloque Quadrature Decoder[v3.0] Siga los siguientes pasos
para elaborar la plantilla de este ejemplo:

40
Figura 62: Plantilla del ejemplo 9.2.

Figura 63: Plantilla del ejemplo 9.2.

Insertar un bloque Quadrature Decoder[v3.0], con la configuración: Name QuadDec, en pestaña Counter Size
seleccionar 8 bit, pestaña Counter Resolutión seleccionar 1x, pestaña Use Index Input deshabilitar Use index
input, pestaña Enable Glitch Filtering habilitar Enable glitch filtering y pestaña Build-in deshabilitar todas las
opciones y dejar en blanco User Comments.
Insertar un bloque Digital Input Pin [v2.20], con la configuración: Name QA, Type habilitar HW Connection,
Drive mode en High impedance digital, Initial drive state en Low, deshabilitar Externalterminal. Conectarlo a

41
Figura 64: Plantilla del ejemplo 9.2.

la entrada quad A del bloque QuadDec.


Insertar un bloque Digital Input Pin [v2.20], con la configuración: Name QB, Type habilitar HW Connection,
Drive mode en High impedance digital, Initial drive state en Low, deshabilitar Externalterminal. Conectarlo a
la entrada quad B del bloque QuadDec.
Agregue a la entrada Clock del bloque QuadDec un bloque Clock con la configuración: Name Clock 1, Clock
type en New, Sourse Auto, Frecuency en 1MHz, habilitar Tolerance y −5 % + 5 %
Agregue un bloque Digital Output Pin [V2.20] con la configuración: Name horario, Type deshabilitar HW
connection y habilitar external terminal, Drive mode Strong drive, Initial drive state Low, es necesario agregar
una resistencia en serie con un led (cátodo en GND) a la salida de este pin.
Agregue un bloque Digital Output Pin [V2.20] con la configuración: Name antihorario, Type deshabilitar HW
connection y habilitar external terminal, Drive mode Strong drive, Initial drive state Low, es necesario agregar
una resistencia en serie con un led (cátodo en GND) a la salida de este pin.
En los bloques horario y antihorario agregar resistencia, diodo led y Vss del catalogo off-Chip del catalogo de
componentes

Agregar un bloque Character LCD [v2.20], con la configuración: Name LCD, Custom Character Set en None y
habilitar Include ASCII to Number Conversion Routines
Agregar un bloque Timer [v2.80], con la configuración: Name Timer, Resolution 16 bits, Implementation en
Fixed Function, Period en 5000, Trigger Mode none, Capture Mode None, Enable Mode en Software Only, Run
mode en Continuous, deshabilitar On TC.

En la señal de reloj del bloque Timer cambiar Frequency en 1KHz y habilitar tolerancia en −1 % + 1 %
Conectar un bloque Interrupt[v1.70] en la salida tc del bloque timer con la configuración: Name ISR Timer y
Interrupt type en RISING EDGE
En archivo main escribir el código que se presenta.

La asignación de pines es de la siguiente forma: antihorario P15[1], horario P15[0], QA P3[0],QB P3[1], LCD en
P2[6:0], compilar y programar.

42
El código es:
#include "project.h"
#include <stdio.h>
#include <string.h>
//#include "math.h"
/*Declarar constantes*/
#define MID_COUNT (0x80u) /* for 16 bit counter*/
#define DELAY (10u) /* 10 msec */

int8_t cuenta= MID_COUNT;//inicia contador de cuenta actual


int8_t countPrev = MID_COUNT;//inicia contador de cuenta anterior
int8_t cuentaaux=0;
int8_t pulsos=0;
double rev;
char str[16];

/*función muestra rev por minuto*/


void mostrarrev(void){
LCD_Position(0,7);
LCD_PrintString("rev/min");
LCD_Position(1,7);
LCD_PrintString(" ");
sprintf(str,"%.2f",rev);
LCD_Position(1,7);
LCD_PrintString(str);
}

/*Interrupción Timer*/
CY_ISR(INT_Timer){

pulsos=countPrev-cuentaaux;
cuentaaux=countPrev;
rev=(pulsos*12.00)/20;//con una base de muestreo de 5seg
//el factor para rev por min es 60/5=12
if(rev<0) rev=rev*-1.00;//si cambia de giro vuelve a positiva la velocidad
ISR_Timer_ClearPending();//borra solicitudes de interrupcion del timer
}

int main(void)
{
CyGlobalIntEnable; /* Enable global interrupts. */
/* Place your initialization/startup code here (e.g. MyInst_Start()) */
QuadDec_Start();//inicializa encoder
LCD_Start();//inicializa LCD
Timer_Start();
ISR_Timer_StartEx(INT_Timer);
cuentaaux=QuadDec_GetCounter();//obtiene valor actual de encoder inicial
for(;;)
{
/* Place your application code here. */
cuenta=QuadDec_GetCounter();//obtiene valor actual de encoder
if(cuenta > countPrev) /* Condition for clockwise rotation */
{
CyPins_SetPin(horario_0); /* Red horario ON */
CyPins_ClearPin(antihorario_0); /*Green antihorario OFF */
CyDelay(DELAY);

43
}
else if(cuenta < countPrev) /* Condition for anti-clockwise rotation */
{
CyPins_ClearPin(horario_0); /* Red horario OFF */
CyPins_SetPin(antihorario_0);/*Green antihorario ON */
CyDelay(DELAY);
}
else /* No rotation */
{
CyPins_ClearPin(horario_0); /* Red horario OFF */
CyPins_ClearPin(antihorario_0); /*Green antihorario OFF */
}
/* Update countPrev value */
countPrev = cuenta;
LCD_Position(0,0);
LCD_PrintString("Cuenta");
CyDelay(DELAY);
LCD_Position(1,0);
LCD_PrintString(" ");//borra valor anterior
LCD_Position(1,0);
sprintf(str,"%d",countPrev);//imprime valor de cuenta previa
LCD_PrintString(str);
mostrarrev();//llama a función para mostrar la velocidad
CyDelay(DELAY);
}
}

/* [] END OF FILE */
La configuración de cada bloque del ejemplo 9.3 se muestran de la figura 65 a la 79.

Figura 65: Plantilla del ejemplo 9.3.

44
Figura 66: Plantilla del ejemplo 9.3.

Figura 67: Plantilla del ejemplo 9.3.

10. Comunicación serial


La tarjeta Psoc 5LP ya tiene la implementada la interfaz de comunicación serial, al conectar la tarjeta a la PC se
genera en automático un puerto serial virtual, para este proyecto se enviaran datos a un puerto virtual.
En los proyectos de comunicación serial se requiere de software emulador de puerto serial. Algunos son:
Tera Term

45
Figura 68: Plantilla del ejemplo 9.3.

Figura 69: Plantilla del ejemplo 9.3.

PuTTY

tinybldWin

46
Figura 70: Plantilla del ejemplo 9.3.

Figura 71: Plantilla del ejemplo 9.3.

10.1. Software emulador puerto serie


En cualquier software es necesario que previo este la tarjeta Psoc 5LP conectada, y configurar dos puntos muy
importantes que tanto en la programación en Psoc creator y el software que utilices, la velocidad de transmisión y
elegir el puerto serie que se genero en la PC para la tarjeta PSoC 5LP. La velocidad de transmisión debe ser la misma
que se configure en Psoc creator. Si hay duda de como saber cual es el puerto serie asignado a la tarjeta, previo
a conectarla abre administrador de dispositivos en tu PC y abrir administrador de dispositivos, ver figura 83. Para

47
Figura 72: Plantilla del ejemplo 9.3.

Figura 73: Plantilla del ejemplo 9.3.

configuración de tera term ver figura 80-82, en 81 seleccionar la opción Terminal; la configuración en PuTTY ver figura
84-86; la configuración en tinybldWin ver figura 87-89.

10.2. Envı́o de datos desde Hyper terminal a Psoc 5LP


El proyecto realiza el encendido y apagado de un led (led de usuario)

48
Figura 74: Plantilla del ejemplo 9.3.

Figura 75: Plantilla del ejemplo 9.3.

Agregue un bloque Digital Output Pin [V2.20] con la configuración: Name M, Type deshabilitar HW connection,
Drive mode Strong drive, Initial drive state Low, no es necesario agregar una resistencia en serie con un led
(cátodo en GND) a la salida de este pin.

Agregar un bloque UART [v2.50] con la configuración que se muestra en la figura 90-92
En archivo main escribir el código que se presenta.

49
Figura 76: Plantilla del ejemplo 9.3.

Figura 77: Plantilla del ejemplo 9.3.

La asignación de pines es de la siguiente forma: Rx1 P12[6], Tx1 P12[7], M P2[1] compilar y programar.
Conectar la tarjeta a la PC.
Abrir el programa de hyperterminal de su elección, iniciar comunicación, Tera Term, PuTTY o tinybldWin y
iniciar la comunicación, en la ventana de comunicación dar clic y presionar la tecla e y el led de usuario encenderá
y para apagar el led de usuario presione la tecla de la letra “o”, ambas son letras y en minúscula.

50
Figura 78: Plantilla del ejemplo 9.3.

Figura 79: Plantilla del ejemplo 9.3.

El código es:
#include "project.h"
#include "stdio.h"

51
/* Project Defines */
#define FALSE 0
#define TRUE 1
#define TRANSMIT_BUFFER_SIZE 16
int dig;
char car;

int main(void)
{
CyGlobalIntEnable; /* Enable global interrupts. */

/*Variable para almacenar el dato recibido*/


uint8 ch;
/* Variable used to send emulated data */
//uint8 EmulatedData;
/* Flags used to store transmit data commands */
/*uint8 ContinuouslySendData;
uint8 SendSingleByte;
uint8 SendEmulatedData;*/

/* Transmit Buffer */
char TransmitBuffer[TRANSMIT_BUFFER_SIZE];

/* Start the components */


UART_Start();

/* Initialize Variables */
/*ContinuouslySendData = FALSE;
SendSingleByte = FALSE;
SendEmulatedData = FALSE;
EmulatedData = 0;*/

/* Send message to verify COM port is connected properly */

sprintf(TransmitBuffer, "Programa que activa motor trifasico \r\n");


UART_PutString(TransmitBuffer);

dig=0;

for(;;)
{
ch = UART_GetChar();

switch(ch)
{
case 0:
// No new data was recieved
break;
//case ’e’:
case ’e’:

CyPins_SetPin(M_0);
sprintf(TransmitBuffer, "Motor encendido \r\n");
UART_PutString(TransmitBuffer);
break;
case ’o’:
CyPins_ClearPin(M_0);

52
sprintf(TransmitBuffer, "Motor apagado OFF \r\n");
UART_PutString(TransmitBuffer);
break;

default:
// Place error handling code here
break;
}
}
}

/* [] END OF FILE */

Figura 80: Configuración tera term.

53
Figura 81: Configuración tera term.

54
Figura 82: Configuración tera term.

Figura 83: Configuración administrador de dispositivos.

55
Figura 84: Configuración tera putty.

56
Figura 85: Configuración tera putty.

Figura 86: Configuración tera putty.

57
Figura 87: Configuración tera tiny.

Figura 88: Configuración tera tiny.

58
Figura 89: Configuración tera tiny.

Figura 90: Configuración PSoC creator espacio de trabajo.

59
Figura 91: Configuración PSoC creator salida digital.

Figura 92: Configuración PSoC creator uart.

60

También podría gustarte