Práctica 5 - Manejo de LCD
Nombres: Santiago Tobón - Diego Uribe - Jorge Vargas
Objetivos:
Vss: Gnd
Vdd: +5 voltios
Vee: corresponde al pin de contraste, lo regularemos con un potenciómetro de 10K conectado a Vdd.
RS: Corresponde al pin de selección de registro de control de datos (0) o registro de datos(1). Es decir el pin RS funciona paralelamente a los pines del bus de datos. Cuando RS es 0 el dato presente en el bus pertenece a un registro de control/instrucción. y cuando RS es 1 el dato presente en el bus de datos pertenece a un registro de datos o un carácter.
RW: Corresponde al pin de Escritura(0) o de Lectura(1). Nos permite escribir un dato en la pantalla o leer un dato desde la pantalla.
E: Corresponde al pin Enable o de habilitación. Si E(0) esto quiere decir que el LCD no esta activado para recibir datos, pero si E(1) se encuentra activo y podemos escribir o leer desde el LCD.
El Bus de datos bidireccional comprende desde los pines D0 a D7. Para realizar la comunicación con el LCD podemos hacerlo utilizando los 8 bits del bus de datos(D0 a D7) o empleando los 4 bits mas significativos del bus de datos(D4 a D7). En este caso vamos a explicar la comunicación con el bus de 4 bits.
Objetivos:
- Manejar un periférico de visualización de información alfanumérica.
- Visualizar caracteres personalizados en el LCD.
- Relacionar al estudiante con funciones propias del PSoC para manipular el LCD.
Introducción
El LCD(Liquid Crystal Dysplay) o pantalla de cristal líquido es un dispositivo empleado para la visualización de contenidos o información de una forma gráfica, mediante caracteres, símbolos o pequeños dibujos dependiendo del modelo. Está gobernado por un microcontrolador el cual dirige todo su funcionamiento.
En este caso vamos a emplear un LCD de 16x2, esto quiere decir que dispone de 2 filas de 16 caracteres cada una. Los píxeles de cada símbolo o carácter, varían en función de cada modelo.
Pines de alimentación:
Vdd: +5 voltios
Vee: corresponde al pin de contraste, lo regularemos con un potenciómetro de 10K conectado a Vdd.
Pines de control:
RW: Corresponde al pin de Escritura(0) o de Lectura(1). Nos permite escribir un dato en la pantalla o leer un dato desde la pantalla.
E: Corresponde al pin Enable o de habilitación. Si E(0) esto quiere decir que el LCD no esta activado para recibir datos, pero si E(1) se encuentra activo y podemos escribir o leer desde el LCD.
Pines de Bus de datos:
Procedimiento.
Se realiza el montaje del LCD y se enlaza con el microcontrolador, las conexiones se revisan en el Datasheet del PSoC Creator los cuales ya vienen por defecto, luego se procede a realizar la lógica en el programa, cabe tener en cuenta que se debía realizar comunicación con un periférico como el Docklight , por lo cual se debe asignar de manera correcta los pines de RX y TX, para su correcto Funcionamiento
#include "project.h"
uint8 fun(uint8 letra);
char var_rx;
uint8 ev_rx = 0;
uint8 ev_tim=0;
uint8 fun(uint8 letra);
uint8 arregloz []={0};
uint16 contador=0;
uint8 letra=0;
uint8 fun(uint8 rx_isr);
uint8 estado=0;
uint8 P=0;
uint8 bloqueo=1;
CY_ISR(rx_isr)
{
ev_rx = 1;
}
CY_ISR(TIM_ISR)
{
ev_tim = 1;
}
int main(void)
{
CyGlobalIntEnable; /* Enable global interrupts. */
//LCD_Char_1_DisplayOn();
LCD_Char_1_Start();
UART_1_Start();
Tim_int_StartEx(TIM_ISR);
isr_1_StartEx(rx_isr);
Tiempo_Start();
LCD_Char_1_Position(0,0);
LCD_Char_1_PrintString("Santiago y ");
LCD_Char_1_Position(1,0);
LCD_Char_1_PrintString("Diego");
LCD_Char_1_Position (1,6);
LCD_Char_1_PutChar(LCD_Char_1_CUSTOM_0);
LCD_Char_1_Position (1,7);
LCD_Char_1_PutChar(LCD_Char_1_CUSTOM_1);
LCD_Char_1_Position (1,8);
LCD_Char_1_PutChar(LCD_Char_1_CUSTOM_2);
LCD_Char_1_Position (1,9);
LCD_Char_1_PutChar(LCD_Char_1_CUSTOM_3);
LCD_Char_1_Position (1,10);
LCD_Char_1_PutChar(LCD_Char_1_CUSTOM_4);
CyDelay (4000);
LCD_Char_1_Position(0,0);
LCD_Char_1_PrintString(" ");
LCD_Char_1_Position(1,0);
LCD_Char_1_PrintString(" ");
for(;;)
{
if (Pin_Read()==1){
estado=1;
if(bloqueo==0)
{
LCD_Char_1_Position(1,0);
LCD_Char_1_PrintString("Abierto ");
}else {
LCD_Char_1_Position(1,0);
LCD_Char_1_PrintString(" ");
}
}
else {
estado =0;
if(bloqueo==0)
{
LCD_Char_1_Position(1,0);
LCD_Char_1_PrintString("Cerrado ");
}else {
LCD_Char_1_Position(1,0);
LCD_Char_1_PrintString(" ");
}
}
if(ev_rx == 1)
{
ev_rx = 0;
var_rx=UART_1_GetChar();
fun(var_rx);
}
}
} //Funciones
uint8 fun(uint8 letra){
UART_1_PutChar (arregloz[0]);
arregloz[0]=letra;
if (letra=='b'){
bloqueo=1;
LCD_Char_1_Position(0,0);
LCD_Char_1_PrintString("Bloqueado ");
LCD_Char_1_Position(1,1);
LCD_Char_1_PrintString(" ");
}else {
if (letra=='d'){
bloqueo=0;
LCD_Char_1_Position(0,0);
LCD_Char_1_PrintString("Desbloqueado ");
LCD_Char_1_Position(1,0);
LCD_Char_1_PrintString(" ");
}
}
return estado;
}
Resultados y análisis de resultados
El
estado de la puerta (abierto o cerrado) estaba ligado a la comunicación a
través de la UART, pues solo se leia el estado de la puerta cada vez que se
ejecutaba la acción de desbloquear, mientras que la idea era que si la puerta
estaba desbloqueada se pudiera abrir y cerrar en cualquier momento, pero solo
mostraba el estado una sola vez, en el momento de desbloquear.
A continuación está el video donde se visualiza el resultado de la practica
Comentarios
Publicar un comentario