Sie sind auf Seite 1von 18

Dispositivos de Control. Gua de Practicas.

Prctica 1 - Programacin Bsica con el LCD


Objetivo.

Usar una pantalla LCD para visualizar informacin y como medio de depuracin de
aplicaciones, tanto en C como en Ensamblador.

Introduccin.

El LCD es una herramienta muy til y econmica, no solo para el despliegue de


informacin, sino tambin para el proceso de depuracin durante el desarrollo, ya que nos
permite desplegar resultados parciales o usarlo para monitorear los procesos y variables dentro
de nuestra aplicacin.

Actualmente los displays de LCD ms usados se basan en el protocolo estndar del


manejador de LCD Hitachi HD44780. Este driver puede manejar displays de hasta 8 lneas y 40 caracteres. Este
manejador puede ser usado con dos interfaces diferentes de 4 y 8 bits, siendo la ultima ms rpida a costa de usar ms
terminales de E/S. El PSoC Designer nos proporciona una API estndar para el manejo de LCDs basados en este chip,
de 2 lneas y 16 caracteres; Sin embargo, es posible usarla con otros displays ms grandes, con la nica restriccin de
que no podremos usar directamente las barras graficas. Para Conectar el LCD, el PSoC utiliza 7 bits de un puerto, ya
que utiliza la interfaz de 4 bits del controlador para ahorrar pines. El octavo bit del puerto podemos usarlo para controlar
el LED del panel trasero de nuestra pantalla en caso de tenerlo, usando mscaras en el bit 7 del puerto, o usando un
mdulo de LED dentro del PSoC Designer.

Conexiones.

Para nuestra primera prctica conectaremos la pantalla al puerto 2 del PSoC de acuerdo al siguiente diagrama:

El Potencimetro o Preset puede tener cualquier valor en el rango de 10KOhms a 100KOhms. Este valor no es crtico ya
que su nica funcin es establecer el nivel de contraste deseado para la pantalla. La tarjeta de evaluacin cuenta con un
LCD conectado al Puerto 2.

EL PSoC se conecta al programador por medio de 5 terminales: Alimentacin (Vdd), Tierra (GND), Reset (XRES), SCLK
(P1.0) y SDATA (P1.1). De estas 5 terminales el reset es opcional, y se suele utilizar cuando queremos programar un
micro que tiene alimentacin aplicada. El Programador del PSoC puede proporcionarnos alimentacin de 5 volts para
nuestro circuito, sin embargo se debe tener cuidado de que la corriente del circuito no exceda los 120mA, y desconectar
las terminales de programacin SCLK y SDATA durante la operacin del circuito si las usamos dentro de nuestra
aplicacin para alguna funcin, ya que de lo contrario podramos daar el programador.

MC. Edgar Mauricio Romero Lpez


Dispositivos de Control. Gua de Practicas.

Desarrollo.

Iniciaremos creando un proyecto. Para eso abriremos el Programa PSoC Designer. Ah seleccionaremos File en
el men y despus New Project

A continuacin nos saldr un cuadro de dialogo, donde pondremos el nombre del proyecto
(Practica1a) y marcaremos la casilla que dice Create Directory for Workspace. Esto creara un
directorio diferente con el nombre del proyecto y nos ayudar a mantener organizados nuestros
diseos

MC. Edgar Mauricio Romero Lpez


Dispositivos de Control. Gua de Practicas.

Nos saldr un nuevo cuadro de dialogo donde elegiremos el modelo exacto del circuito y el
lenguaje principal en que programaremos.

Damos Ok y se generara nuestro espacio de trabajo. Este se encuentra dividido en


varias zonas importantes: Los Recursos Globales (flecha Roja), La configuracin de terminales
(flecha verde), Los Mdulos del Usuario (Flecha Magenta), El Explorador del Proyecto (Amarillo) y
la vista de interconexin (Azul).

MC. Edgar Mauricio Romero Lpez


Dispositivos de Control. Gua de Practicas.

Ahora expandimos el rbol del explorador de proyecto, y damos doble clic en el archivo
main.c. Esto nos abrir una nueva pestaa en el proyecto con un borrador para que
escribamos nuestro programa en C. Las 2 primeras lneas de cdigo son para incluir el espacio
de nombres, direcciones y API bsica de todos los PSoC (TODOS los Programas que
desarrollemos llevaran estas lneas), y despus sigue un cuerpo main vaco, que es donde
escribiremos nuestro programa principal.

Ahora pondremos los mdulos que necesitaremos para nuestro programa. Para esto daremos
click en la pestaa Practica1a (chip), para regresarnos a la vista anterior. Una vez ah,
expandiremos el arbol Misc Digital en la caja de mdulos de usuario. Ah veremos una lista de
varios mdulos digitales, de los cuales eligiremos LCD dando doble clic sobre de el. En caso de
que tu pantalla tenga luz, elige tambien un mdulo de LED.

MC. Edgar Mauricio Romero Lpez


Dispositivos de Control. Gua de Practicas.

Al ser un mdulo de software (no utiliza hardware ni mdulos internos), no aparecera nada en la
seccion central, pero en el explorador de proyecto veremos que se formo una nueva entrada con
el nombre LCD_1 en el arbol. (En caso de que lo hayas seleccionado, tambien aparecera otro
mdulo llamado LED_1)

MC. Edgar Mauricio Romero Lpez


Dispositivos de Control. Gua de Practicas.

Ahora que hemos colocado nuestros mdulos le damos doble click al mdulo LCD_1 en el
explorador de proyecto para que se actualice el panel de parmetros, que se encuentra a la
izquierda. Este panel lo editaremos con los valores:

De esta Manera le cambiamos el nombre al mdulo de LCD_1 a LCD, Le asignamos el Puerto 2, y


Deshabilitamos la barra grfica. En caso de usar el mdulo de LED, tambin hay que hacerle
cambios a sus parmetros. Debajo del panel de parmetros, podemos ver que los valores del
panel de terminales han cambiado su valor para configurarse adecuadamente para soportar los
mdulos.

MC. Edgar Mauricio Romero Lpez


Dispositivos de Control. Gua de Practicas.

Ahora escribe el cdigo que se muestra a continuacin y presiona el botn Generate/Build.

MC. Edgar Mauricio Romero Lpez


Dispositivos de Control. Gua de Practicas.

Ahora hay que transferir nuestro cdigo al circuito, para esto nos vamos al men Program y ah
seleccionamos Program Part. Esto nos arrojara la ventana del programador. (Debes de haber
conectado ya el programador a tu PC).

El programador tomara de forma automtica la ltima compilacin de nuestro proyecto. La


pantalla del programador tiene varias opciones la ms importante es Acquire Mode. Si nuestra
tarjeta no cuenta con una fuente de alimentacin, usaremos la opcin Power Cycle. Esta opcin
hace que el programador alimente directamente la tarjeta, por lo que el consumo de la misma
deber ser menor de 120mA. En este modo de programacin no se hace uso de la terminal de
RESET del micro. En caso de que estemos alimentando a nuestra tarjeta con una fuente externa,
usaremos la opcin RESET, en cuyo caso el programador usara la terminal de reset para
colocar al micro en modo de programacin. Una vez seleccionado el modo de programacin
adecuado, damos click en el botn de Programar para transferir el programa al chip. Para este
ejemplo, si usamos la tarjeta de practicas, podemos probar inmediatamente nuestro programa
apretando el botn de Toggle Power para que el programador de alimentacin a la tarjeta.

Como el programador se encuentra conectado a los pines 0 y 1 del puerto 1, NO DEBEMOS


ALIMENTAR A LA TARJETA DESDE EL PROGRAMADOR SI ESTOS PINES SE UTILIZAN Y ESTN
CONECTADOS AL PROGRAMADOR. Una opcin para alimentar nuestro circuito desde el
programador es conectar nicamente las terminales de alimentacin, sin conectar las de los
puertos, o utilizar la entrada para el eliminador de bateras de la tarjeta de evaluiacin.

MC. Edgar Mauricio Romero Lpez


Dispositivos de Control. Gua de Practicas.

1.- Explica Que hace este programa.

__________________________________________________________________________________________________
__________________________________________________________________________________________________
_________________________________________________________________________________________________

2.- Que diferencia hay entre las lneas 16 y 18, y como se relacionan estas con las lneas 8 y 9?
Funcionaran si se cambia la forma de declarar las cadenas? Explica tus Respuestas.

__________________________________________________________________________________________________
__________________________________________________________________________________________________
________________________________________________________________________________________________

3.- En el Caso de que la Pantalla lleve un LED, Que tendra que poner para que se encendiera?

__________________________________________________________________________________________________
__________________________________________________________________________________________________
________________________________________________________________________________________________

MC. Edgar Mauricio Romero Lpez


Dispositivos de Control. Gua de Practicas.

Cambia el cdigo del Programa al siguiente:

4.- Escribe y Explica la salida del Programa.

__________________________________________________________________________________________________
__________________________________________________________________________________________________
__________________________________________________________________________________________________
__________________________________________________________________________________________________
__________________________________________________________________________________________________
__________________________________________________________________________________________________
__________________________________________________________________________________________________
__________________________________________________________________________________________________
________________________________________________________________________________________________

5.- Explica con tus palabras para que sirven las funciones LCD_PRHexByte, LCD_PrHexInt y
LCD_WriteData.

__________________________________________________________________________________________________
__________________________________________________________________________________________________
__________________________________________________________________________________________________
__________________________________________________________________________________________________
__________________________________________________________________________________________________
__________________________________________________________________________________________________
__________________________________________________________________________________________________
__________________________________________________________________________________________________
________________________________________________________________________________________________

MC. Edgar Mauricio Romero Lpez


Dispositivos de Control. Gua de Practicas.

Escribe este Programa y crrelo en la tarjeta.

6.- Escribe y Explica la salida del Programa, y para que sirven las funciones itoa, ltoa, utoa y
ultoa.

__________________________________________________________________________________________________
__________________________________________________________________________________________________
__________________________________________________________________________________________________
__________________________________________________________________________________________________
__________________________________________________________________________________________________
__________________________________________________________________________________________________
__________________________________________________________________________________________________
________________________________________________________________________________________________

7.- Investiga en la documentacion en el archive C Language Compiler User Guide ms acerca


de estas funciones, investiga cual es la funcin que me permite imprimir nmeros con punto
decimal, y haz un programa ejemplo que me imprima una variable flotante llamada MyPI con
valor 3.141592. Escribe el cdigo del Programa.

__________________________________________________________________________________________________
__________________________________________________________________________________________________
__________________________________________________________________________________________________
__________________________________________________________________________________________________
__________________________________________________________________________________________________
__________________________________________________________________________________________________

MC. Edgar Mauricio Romero Lpez


Dispositivos de Control. Gua de Practicas.

__________________________________________________________________________________________________
________________________________________________________________________________________________

En el Men File Selecciona la opcin Close Workspace. Crea ahora un nuevo Proyecto y
llmalo Practica1b.

Selecciona como lenguaje de programacin el ensamblador.

MC. Edgar Mauricio Romero Lpez


Dispositivos de Control. Gua de Practicas.

En el Explorador del Proyecto dale doble click al archivo main.asm, para abrirlo en una pestaa
y

Las 3 primeras lneas del archivo sirven para cargar los archivos que contienen los espacios de
nombres, subrutinas y macros bsicas para el proyecto. La lnea 9, sirve para que al compilar se
exporte el espacio de nombres del programa principal a los dems archivos.

MC. Edgar Mauricio Romero Lpez


Dispositivos de Control. Gua de Practicas.

Pasa a la pestaa de interconexiones ([CHIP]), y agrega los mdulos de LCD y/o LED, cambiando
tambin sus parmetros tal y como lo hiciste en el programa en C.

Teclea y compila el siguiente Cdigo:


;-----------------------------------------------------------------------------
; Assembly main line
;-----------------------------------------------------------------------------

include "m8c.inc" ; part specific constants and macros


include "memory.inc" ; Constants & macros for SMM/LMM and Compiler
include "PSoCAPI.inc" ; PSoC API definitions for all User Modules

export _main
area bss(RAM)
VarStr: blk 17 ; Separo 17 bytes para una cadena en RAM (16 Caracteres + Null)
area text(ROM, REL)
_main:
call LCD_Start
call LED_Start
call LED_On
mov [VarStr],'H' ; Inicializo la cadena
mov [VarStr+1],'o'
mov [VarStr+2],'l'
mov [VarStr+3],'a'
mov [VarStr+4],' '
mov [VarStr+5],'M'
mov [VarStr+6],'u'
mov [VarStr+7],'n'
mov [VarStr+8],'d'
mov [VarStr+9],'o'
mov [VarStr+10], 0x00 ; Null o Fin de Cadena
mov A,00h ; Fila = 0
mov X,00h ; Columna = 0
call LCD_Position
mov A,>VarStr ; Parte alta de la direccin de la Variable en RAM
mov X,<VarStr ; Parte baja de la direccin de la Variable en RAM
call LCD_PrString ; Imprime la cadena en RAM
mov A,01h ; Fila = 1
mov X,00h ; Columna = 0
call LCD_Position
mov A,>TablaRom ; Parte alta de la direccin de la tabla en ROM
mov X,<TablaRom ; Parte baja de la direccin de la tabla en ROM
call LCD_PrCString ; Imprime la cadena constante en ROM
.terminate:
jmp .terminate
.literal
TablaRom:
asciz "Cadena ROM" ; Defino una cadena en ROM con terminacin nula
.endliteral

8.- Que Hace este Cdigo? Cul es la diferencia entre LCD_PrString y LCD_PrCString?

__________________________________________________________________________________________________
__________________________________________________________________________________________________
__________________________________________________________________________________________________
__________________________________________________________________________________________________
________________________________________________________________________________________________

9.- Porque es necesaria la lnea mov A,>VarStr y Como Afecta la funcin LCD_PrString a mi
programa, en cuanto a posibles conflictos que puede generar?

__________________________________________________________________________________________________
__________________________________________________________________________________________________
__________________________________________________________________________________________________
__________________________________________________________________________________________________
________________________________________________________________________________________________

MC. Edgar Mauricio Romero Lpez


Dispositivos de Control. Gua de Practicas.

Ahora crea el cdigo:


export _main
area bss(RAM)
MyVar: blk 1 ; Separo 1 byte para una Variable en ram
area text(ROM, REL)
_main:
call LCD_Start
call LED_Start
call LED_On
mov [MyVar], 52 ; Inicializo la Variable
mov A,00h ; Fila = 0
mov X,00h ; Columna = 0
call LCD_Position
mov A,>TablaRom ; Parte alta de la direccin de la tabla en ROM
mov X,<TablaRom ; Parte baja de la direccin de la tabla en ROM
call LCD_PrCString ; Imprime la cadena constante en ROM
mov A,0 ; Fila = 7
mov X,7 ; Columna = 0
call LCD_Position
mov A, [MyVar] ; Paso la Variable Al Acumulador
call LCD_WriteData
mov A,0 ; Fila = 13
mov X,13 ; Columna = 0
call LCD_Position
mov A, [MyVar] ; Paso la Variable Al Acumulador
call LCD_PrHexByte
.terminate:
jmp .terminate
.literal
TablaRom:
asciz "Ascii: Hex:" ; Defino una cadena en rom con terminacin nula
.endliteral

10.- Es posible imprimir nmeros en formato decimal haciendo uso de LCD_PrHexByte? Explica
tu respuesta.

__________________________________________________________________________________________________
__________________________________________________________________________________________________
_________________________________________________________________________________________________

11.- Que ventajas nos proporciona imprimir usando LCD_WriteData a usar LCD_PrString?

__________________________________________________________________________________________________
__________________________________________________________________________________________________
__________________________________________________________________________________________________
________________________________________________________________________________________________

Ahora vamos a crear un pequeo programa que haga uso de los comandos internos del LCD.
Consulta la Hoja de Datos del LCD para poder seguir el programa.
;-----------------------------------------------------------------------------
; Assembly main line
;-----------------------------------------------------------------------------

include "m8c.inc" ; part specific constants and macros


include "memory.inc" ; Constants & macros for SMM/LMM and Compiler
include "PSoCAPI.inc" ; PSoC API definitions for all User Modules

BorrarLCD: equ 0b00000001


GoHome: equ 0b00000010
SetDDRAM_Addr: equ 0b10000000 ; Seleccionar direccin de la memoria de despliegue del LCD
export _main
area bss(RAM)
MyVar: blk 1 ; Separo 1 byte para una Variable en ram
area text(ROM, REL)
_main:
call LCD_Start
call LED_Start
call LED_On
mov A, BorrarLCD
call LCD_Control ; Borra el LCD
mov A, SetDDRAM_Addr
call LCD_Control ; Me pongo en la primera Posicin del LCD (Direccion 0x00)

MC. Edgar Mauricio Romero Lpez


Dispositivos de Control. Gua de Practicas.
mov A,>TablaRom1 ; Parte alta de la direccin de la tabla en ROM
mov X,<TablaRom1 ; Parte baja de la direccin de la tabla en ROM
call LCD_PrCString ; Imprime la cadena constante en ROM
mov A, SetDDRAM_Addr | 0x40
call LCD_Control ; Me pongo en la primera Posicin de la segunda linea del LCD (Direccion 0x40)
mov A,>TablaRom2 ; Parte alta de la direccin de la tabla en ROM
mov X,<TablaRom2 ; Parte baja de la direccin de la tabla en ROM
call LCD_PrCString ; Imprime la cadena constante en ROM
mov A, 0b00001111
call LCD_Control
mov [MyVar],100
Ciclo:
mov A,200
call LCD_Delay50uTimes
dec [MyVar]
jnz Ciclo
mov A, GoHome
call LCD_Control ; Mueve el Cursor a Home
.terminate:
jmp .terminate
.literal
TablaRom1:
asciz "Linea1" ; Defino una cadena en rom con terminacin nula
TablaRom2:
asciz "Linea2" ; Defino una cadena en rom con terminacin nula

.endliteral

12.- A que cdigo en nuestros programas anteriores sustituyen las lneas: mov A, SetDDRAM_Addr | 0x40 y call
LCD_Control?

__________________________________________________________________________________________________
__________________________________________________________________________________________________
__________________________________________________________________________________________________
__________________________________________________________________________________________________
__________________________________________________________________________________________________
________________________________________________________________________________________________

13.- A que estructura de alto nivel equivale el siguiente cdigo, y para que se utiliza en el
programa?
mov [MyVar],100
Ciclo:
mov A,200
call LCD_Delay50uTimes
dec [MyVar]
jnz Ciclo

__________________________________________________________________________________________________
__________________________________________________________________________________________________
__________________________________________________________________________________________________
__________________________________________________________________________________________________
__________________________________________________________________________________________________
________________________________________________________________________________________________

14.- funcin realizan las instrucciones: mov A, 0b00001111 y call LCD_Control?


__________________________________________________________________________________________________
__________________________________________________________________________________________________
__________________________________________________________________________________________________
__________________________________________________________________________________________________
__________________________________________________________________________________________________
________________________________________________________________________________________________

15.- Que desventajas y ventajas encuentras en el uso de ensamblador para el Manejo del LCD,
con respecto a C?

__________________________________________________________________________________________________
__________________________________________________________________________________________________
MC. Edgar Mauricio Romero Lpez
Dispositivos de Control. Gua de Practicas.

__________________________________________________________________________________________________
__________________________________________________________________________________________________
__________________________________________________________________________________________________
________________________________________________________________________________________________

16.- Crea un Nuevo Proyecto en Ensamblador, y llmalo Practica1c. Haz un programa que
genere y despliegue 8 caracteres propios en el LCD (como por ejemplo: , , , , , , ,
etc.) Cada uno debe de ir apareciendo uno a uno con intervalos de un segundo entre cada
despliegue. Para generar este tiempo de espera entre el despliegue de cada smbolo, crea una
subrutina llamada Pausa1s haciendo uso de la funcin LCD_Delay50uTimes del LCD. De Tal
manera que cada vez que desees hacer una espera de 1 seg uses la instruccin call Pausa1s.

17.- Haz un Programa en C que despliegue el dibujo que se muestra en las figuras, y lo vaya
desplazando de izquierda a derecha, y de derecha a izquierda, continuamente, un pixel a la vez.

Incluye en el reporte de la prctica el diagrama de flujo y el seudocdigo del programa.


MC. Edgar Mauricio Romero Lpez
Dispositivos de Control. Gua de Practicas.

Conclusiones:

MC. Edgar Mauricio Romero Lpez