Documente Academic
Documente Profesional
Documente Cultură
1 Alexander Senz U.
Cap1 Introduccin al entorno de trabajo, Manejo de Entradas/Salidas, Retardos por Software y LCD.
Crear un proyecto
Abramos PSoC Designer 5, nos apareci la pgina de inicio, proyecto, damos file New Project: bueno creemos un
Le damos de nombre Proyecto1, seleccionamos la carpeta y muy importante seleccionar Chip-level Project, luego ok, Nos aparece:
Bueno este cuadro de dialogo nos dice en que lenguaje vamos a programar y cual dispositivo programaremos, lgico seleccionaremos a C y no assembler.
2 Alexander Senz U.
Cap1 Introduccin al entorno de trabajo, Manejo de Entradas/Salidas, Retardos por Software y LCD.
Si observamos nos apareci una referencia de un Psoc que no es la de nosotros para buscarla oprimimos view Catalog y buscamos la referencia CY8C29466-24PXI
Lo seleccionamos y le oprimimos select, ahora ya tenemos nuestra referencia del dispositivo y tambin que vamos a programar en C.
Luego OK
3 Alexander Senz U.
Cap1 Introduccin al entorno de trabajo, Manejo de Entradas/Salidas, Retardos por Software y LCD.
Por fin tenemos nuestro IDE, si no aparecen todos estos cuadros, en men View, podemos habilitarlos todos:
Se observa la carpeta donde estn ubicados los archivos los mdulos que estemos utilizando y por supuesto nuestro Cdigo en C.
Propiedades: Cuando agregamos los mdulos esta ventana nos permite cambiar las caractersticas del dispositivo, por ejemplo si tenemos un PWM, desde aqu podemos cambiarle el ancho del pulso
[Pinout]: al hacer doble click nos permite ver los pines del Psoc, una gua a la hora de montar los proyectos.
Mdulos de usuario Aqu estn Todos los mdulos soportados por nuestro psoc, mdulos Anlogos y Digitales. Tabla de puertos (GPIO): Desde aqu podemos seleccionar que pines son entrada y cuales son de salida y cambiarles el nombre Espacio de trabajo: es la parte del fondo de esta imagen.
Estas opciones nos permiten movernos dentro del espacio de trabajo, all es donde quedan plasmados los mdulos que hemos agregado, esas lneas y cuadros que aparecen al fondo de la imagen.
4 Alexander Senz U.
Cap1 Introduccin al entorno de trabajo, Manejo de Entradas/Salidas, Retardos por Software y LCD.
Vemos:
Siempre hay que dejar esas lneas de cdigo. Presionemos Ctrl+F6 (el cual compila todos los cdigos fuentes y tambin el proyecto) y observemos que se ha generado el archivo .hex en la carpeta output dentro de la carpeta del proyecto, yo lo tengo en: D:\Curso de Psoc\Proyecto1\Proyecto1\Proyecto1\output All hay varios archivos en particular, y uno llamado Proyecto1 y su extensin es .HEX, este es el que nos sirve para programar el Psoc. Tambin esta Ctrl+F7 este solo nos compila el cdigo pero no el proyecto completo por lo tanto no hay el .hex, solo nos sirve para saber si no tenemos errores en cdigo.
5 Alexander Senz U.
Cap1 Introduccin al entorno de trabajo, Manejo de Entradas/Salidas, Retardos por Software y LCD.
Luego ponemos el Integrado (psoc) en el Programador (Hardware), le damos click en ChkSum y nos tiene que aparecer la referencia del psoc en:
6 Alexander Senz U.
Cap1 Introduccin al entorno de trabajo, Manejo de Entradas/Salidas, Retardos por Software y LCD.
Si no aparece la referencia no se puede quemar (no lo reconoce ),tiene que aparecer. Luego le damos click en load y abrimos nuestro archivo Proyecto1.hex que est ubicado en la carpeta output en mi caso ser: D:\Curso de Psoc\Proyecto1\Proyecto1\Proyecto1\output
y listo ya puedes sacar el psoc, aunque ste ya quedo grabado, no har nada porque no le programamos nada en C, pero ya sabes quemar as ser siempre en todos los proyectos que hagamos. Bueno por ahora dejemos as y pasemos un poco a la teora.
7 Alexander Senz U.
Cap1 Introduccin al entorno de trabajo, Manejo de Entradas/Salidas, Retardos por Software y LCD.
Y si llegramos a utilizar todo el PORT0, tocara definir muchos macros por esto decid realizar un archivo de cabecera que nos facilitara este trabajo, una parte la saque de un documento AN2033 (ubicado en www.cypress.com) que lo vamos a utilizar para escribir y otra que yo realice para poder leer cualquier bit de cualquier puerto, todo esto lo integre en un archivo llamado puertos.h (dispuesto a compartir con ustedes); ahora para leer y escribir se proceder: LEER: Este macro devuelve '0' si la entrada esta en '0', devuelve un nmero distinto a '0' si la entrada esta en '1' LPortX_B, donde X es el puerto y B es el bit a leer. ESCRIBIR: b es el valor a escribir puede ser solo 1 o 0 EPortX_B(b), donde X es el puerto y B es el bit en donde se va escribir
Alexander Senz U. 8
Cap1 Introduccin al entorno de trabajo, Manejo de Entradas/Salidas, Retardos por Software y LCD.
El mismo ejemplo anterior pero utilizando los macros del puertos.h, y agregndole la lectura de otros bits, (se puede hacer muchas ms comprobaciones sin necesidad de tantos macros en nuestro cdigo fuente principal): #include puertos.h ...//sin necesidad de los macros comunes void main(void){ while(1){ if(LPort0_0) EPort1_0(1); // pone if(LPort0_1) EPort1_1(1); // pone if(LPort0_2) EPort1_2(0); // pone if(LPort0_3) EPort1_3(0); // pone } }
en en en en
1 1 0 0
void Delay50u(void); // Solo hace un retardo de 50us void Delay50uTimes(BYTE Multiple); El valor que ingresemos como BYTE Multiple se multiplica por 50us y da como resultado el retardo. Este archivo se consigue en la pgina de cypress.
Cap1 Introduccin al entorno de trabajo, Manejo de Entradas/Salidas, Retardos por Software y LCD.
Bien para publicar en el LCD tenemos los siguientes prototipos: void void void void LCD_1_Start(void); LCD_1_Position(BYTE bRow, BYTE bCol); LCD_1_PrString(char *sRamString); LCD_1_PrCString(const char *sRomString); (1) (2) (3) (4)
En (1) se utiliza para inicializar el mdulo LCD, luego como es lgico le damos las coordenadas con (2), ya si queremos publicar una constante utilizamos (4) de lo contrario utilizamos (3) esto es para publicar texto: ... void main(void){ char var[9] = variable LCD_1_Start(); while(1){ LCD_1_Position(0,1); LCD_1_PrCString(constante); LCD_1_Position(1,1); LCD_1_PrString(var); ...//var es un puntero que apunta a var[0] } } Como nos dimos cuenta estas funciones solo permiten publicar char, entonces habr que hacer algo para poder publicar un integer o un long osea convertir integer/long a char, miremos los prototipos: char *ltoa(char *buf, long i, int base); char *itoa(char *buf, int i, int base); /* -i : Es el nmero que queremos convertir a char -*buf : Puntero que guarda el dato convertido -base : Generalmente trabajamos en base 10. -itoa y ltoa devuelven un puntero a char - Se encuentran en la librera stdlib.h */
10 Alexander Senz U.
Cap1 Introduccin al entorno de trabajo, Manejo de Entradas/Salidas, Retardos por Software y LCD.
Veamos: ... #include <stdlib.h> void main(void){ int num = 14; char nuevo[3]= ; LCD_1_Start(); while(1){ itoa ( nuevo, num, 10 ); LCD_1_Position(0,1); LCD_1_PrString(nuevo); } } O tambin da lo mismo hacer: ... while(1){ LCD_1_Position(0,1); LCD_1_PrCString( itoa(nuevo,num,10) ); } Vamos ahora con un float: char *ftoa(float f, int *status); /* -f : Es el nmero que queremos convertir a char -*Status : Puntero que guarda el estado de la conversin. -ftoa devuelven un puntero a char el de la conversion. - Se encuentran en la librera stdlib.h Su uso correcto es as: int estado; const char *c = ftoa(12.67, &estado); if (estado == 0) // si es cero, la conversin // se realizo con xito
11 Alexander Senz U.
Cap1 Introduccin al entorno de trabajo, Manejo de Entradas/Salidas, Retardos por Software y LCD.
Pero yo omito la comprobacin de la conversin y confi que todo salga bien : ... #include <stdlib.h> void main(void){ int estado = 0; float num = 14.24; const char *nuevo; LCD_1_Start(); while(1){ nuevo = ftoa( num, &estado ); LCD_1_Position(0,1); LCD_1_PrString(nuevo); } }
Por ltimo falta tener alguna funcin que nos reset todo el display, yo no la he encontrado pero suelo hacer: void borra_LCD(){ int i = 0; int j = 0; for (j=0; j<=1; j++){ for ( i=0; i<=15; i++){ LCD_1_Position(j,i); LCD_1_PrCString(" "); } }
12 Alexander Senz U.
Cap1 Introduccin al entorno de trabajo, Manejo de Entradas/Salidas, Retardos por Software y LCD.
El ejemplo consiste; con un dipswitch de 3 posiciones hacer con cada switch: 100 Encender un led y este dure encendido cada 0.5 segundos. 010 Publicar texto en el LCD (PrString y PrCString). 001 Publicar integer y float en el LCD. Crear un nuevo proyecto con el nombre ej1 y configurar en el GPIO:
-DIP1/2/3 fueron los nombre que yo le quise asignar a cada bit de puerto 0 respectivamente. -StdCPU significa que lo vamos a controlar desde cdigo a ese pin. - High Z significa que es una entrada Digital Strong significa que es una salida Digital Ahora sacamos (doble clic) el mdulo del LCD que est en (mdulos de usuario)
13 Alexander Senz U.
Cap1 Introduccin al entorno de trabajo, Manejo de Entradas/Salidas, Retardos por Software y LCD.
Esto con el fin de que nos deje ver las propiedades de este mdulo:
Y cambiar a:
Con esto hacemos que el LCD quede ubicado en el puerto 1, por pura curiosidad hacer doble clic en Pinout y observar la distribucin de pines que acabamos de hacer, para regresar al nuestro espacio de trabajo hacer doble clic en chip. Antes de escribir el cdigo quiero que vean como es la distribucin de pines del LCD de una forma ms clara entonces hacer clic derecho en LCD_1 y seleccionar datasheet luego dar cualquiera de las tres opciones que aparece; ya entonces nos muestra el datasheet del LCD y la distribucin de pines la cual se ve de manera ms clara y es la que siempre yo utilizo de gua para hacer mis montajes con LCD. Agregar los archivos "puertos.h", delay.h, delay.asm en el directorio raz del proyecto en una carpeta llamada lib, en mi caso fue: D:\\Ej1\Ej1\Ej1\lib
14 Alexander Senz U.
Cap1 Introduccin al entorno de trabajo, Manejo de Entradas/Salidas, Retardos por Software y LCD.
Y ahora se procede SOLO para delay.asm de la siguiente manera: -Abrir la hoja para escribir cdigo (main.c). -Seleccionar ProjectAdd File y abrir delay.asm el que acabamos de copiar en la carpeta lib. Ahora si escribir el cdigo:
#include <m8c.h> // part specific constants and macros #include <stdlib.h> //---------------------------------------------------------------------------... ABRIR EL PROJECTO EJ1 QUE HE ENVIADO AL FORO EL CUAL TIENE ESTE EJEMPLO COMPLETO Y LOS ARCHIVOS DELAY.ASM, DELAY.H Y PUERTOS.H QUE HE MENCIONADO, ALL EST EL CDIGO, QUE NO COMENTARIE MUCHO YA QUE ES SENCILLO,
Bueno por fin queda concluido este cap1 que es la introduccin esperando ser claro con lo que digo, pero eso si hay que tener en cuenta los prototipos de las funciones esto lo digo porque escrib ejemplos con punteros otro no mejor dicho yo supongo que saben algo de punteros :--), y para todos, si hay algn error avisar en el foro. Con este captulo estoy seguro que es suficiente para que empiecen averiguar ms, pero con este contenido bsico no he tenido la necesidad de utilizar ms cosas en mis proyectos, porque lo que viene que son los mdulos se trata es de hacer la parte electrnica desde hardware y no por software, Pongo un ejemplo; el retardo que hicimos con la funcin Delay50uTimes() es por software y puede fallar ya que depende de la velocidad del procesador u otros motivos, pero esto mismo lo podemos hacer con un mdulo timer el cual si es preciso . nos vemos en la otra entrega. Aaaa por ltimo quiero que vean solo la polarizacin del psoc
El pin 14 y 9 van a GND y el 28 va +5vdc, el resto el de color rojo, verde despus lo veremos.
15 Alexander Senz U.