MICROCONTROLADORES
Laboratorio Nº 11
Programación de una
Pantalla LCD
1. CAPACIDAD TERMINAL:
● Utilizar al microcontrolador en aplicaciones de control electrónico.
● Desarrollar y ejecutar programas en un microcontrolador PIC
● Programar y configurar interfaces básicas del microcontrolador.
● Programar eficientemente el LCD
● Programar HMI para proyecto actual.
● Utilizar al microcontrolador en aplicaciones de control electrónico.
● Desarrollar y ejecutar programas en un microcontrolador PIC
● Programar y configurar interfaces básicas del microcontrolador.
2. COMPETENCIA ESPECÍFICA DE LA SESIÓN:
● Conocer el Display LCD y su funcionamiento● Programar eficientemente el LCD
● Programar HMI para proyecto actual.
3. CONTENIDOS A TRATAR:
● Display LCD● Manejo de teclado matricial
4. RESULTADOS:
●Diseñan y optimizan sistemas y procesos para cumplir con las condiciones establecidas y gestionando adecuadamente los recursos materiales y humanos.
● Pantalla LCD:
Es una pantalla de cristal líquido o LCD (Liquid Crystal Display) es una pantalla delgada y plana formada por un número de píxeles en color o monocromos colocados delante de una fuente de luz o reflectora. En este caso vamos a emplear un LCD de 16x2, esto quiere decir que dispone de 2 filas de 16 caracteres cada una.
Conexiones:
Pines de alimentación:
Vss: Gnd
Vdd: +5 voltios
Vee: corresponde al pin de contraste, lo regularemos con un potenciómetro de 10K
Pines de control:
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.
Pines de Bus de datos:
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 cuanto al bus de datos, haremos uso de los cuatro últimos como podrán verlo a continuación en la programación (D4, D5, D6 y D7)
6. TAREA GUIADA DENTRO DEL LABORATORIO:
1. Simule y pruebe en el entrenador el programa del LCD de acuerdo al circuito y código siguiente:
#include <16f877a.h>
#use delay (clock=20M) #fuses HS, NOPROTECT, NOWDT #define LCD_ENABLE_PIN PIN_D3 //Definimos los pines a ser #define LCD_RS_PIN PIN_D2 //pantalla LCD #define LCD_RW_PIN PIN_A0 #define LCD_DATA4 PIN_D4 #define LCD_DATA5 PIN_D5 #define LCD_DATA6 PIN_D6 #define LCD_DATA7 PIN_D7 #include <lcd.c> // Incluimos librería para manejar Pantalla LCD int16 dato; void main () { lcd_init () ; // Inicializamos pantalla LCD dato = 50; // Damos valor inicial para empezar la cuenta printf (lcd_putc, " CONTADOR") ; // Mandamos mensaje por única vez lcd_gotoxy(1,2); printf (lcd_putc, "Valor: %4lu", dato) ; WHILE (true) { IF (!input(PIN_D0)) // Rutina para INCREMENTAR dato { dato++; lcd_gotoxy(1,2); printf (lcd_putc, "Valor: %4lu", dato) ; while (!input(PIN_D0)) // Rutina ANTIRREBOTE por software {} } IF (!input(PIN_D1)) { dato--; lcd_gotoxy(1,2); printf (lcd_putc, "Valor: %4lu", dato) ; while (!input(PIN_D1)) // Rutina ANTIRREBOTE por software {} } } } |
7. TAREA A SER EVALUADA:
1. En base al programa anterior, realice un PROGRAMA con los siguientes REQUERIMIENTOS:
Se dispone de una pantalla LCD.
Elaborar un programa que INCREMENTE un número en 50 unidades cada vez que se
presione un pulsador y DECREMENTE dicho número en 15 unidades cada vez que se
presione otro pulsador.
Si el valor del número supera 500
unidades, mostrar en la pantalla LCD en la primera línea: “FULL”, además debe
sonar un BIP por tres veces . Si el valor llega a ser menor o igual a -100, mostrar “VALOR MINIMO” y debe sonar BIP
indefinidamente. En ambos casos el valor del número
no debe incrementarse ni decrementarse.
Agregar un tercer pulsador para
habilitar o deshabilitar la cuenta. En caso que esté desahabilitado, deberá
mostrar en la pantalla LCD “DESHABILITADO”.
#include
<16f877a.h>
#use
delay (clock=20M)
#fuses HS, NOPROTECT,
NOWDT
#define
LCD_ENABLE_PIN PIN_D3 //Definimos los pines a ser
#define LCD_RS_PIN PIN_D2 //pantalla LCD
#define
LCD_RW_PIN PIN_A0
#define
LCD_DATA4 PIN_D4
#define
LCD_DATA5 PIN_D5
#define
LCD_DATA6 PIN_D6
#define LCD_DATA7 PIN_D7
#include
<lcd.c> //
Incluimos librería para manejar Pantalla LCD
signed
int16 dato;
int
i, z;
int
habilitador=1;
void
BIP()
{
FOR (i=0;i<=100;++i)
{
output_high(PIN_E1); // Pone a "1" el pin E1 (envía
5 voltios)
delay_ms(1); // "Congela el tiempo"
durante 1ms
output_low(PIN_E1); // Pone a "0" el pin E1
delay_ms(1); // "Congela el tiempo" durante
1ms
}
}
void main ()
{
lcd_init (); // Inicializamos
pantalla LCD
dato = 50; // Damos valor
inicial para empezar la cuenta
printf (lcd_putc, " CONTADOR") ; // Mandamos mensaje por única vez
lcd_gotoxy(1,2);
printf (lcd_putc, "Valor: %4ld",
dato) ; //Para imprimir variable %,el 4 reserva espacios, ld long signed
WHILE (true)
{
IF(habilitador==1)
{
IF (!input(PIN_D0)) // Rutina para INCREMENTAR dato
{
dato = dato + 50;
printf (lcd_putc, "\f CONTADOR") ;
lcd_gotoxy(1,2);
printf (lcd_putc, "Valor:
%4ld", dato);
while (!input(PIN_D0)) // Rutina ANTIRREBOTE por software
{}
IF ( dato >= 500)
{
printf (lcd_putc,
"\f FULL") ;
lcd_gotoxy(1,2);
printf (lcd_putc, "Valor:
%4ld", dato);
FOR (z=0;z<=2;z++)
{
BIP();
delay_ms(500);
}
while (dato >=500) // Rutina ANTIRREBOTE por software
{}
}
}
IF (!input(PIN_D1))
{
dato = dato - 15;
printf (lcd_putc, "\f CONTADOR") ;
lcd_gotoxy(1,2);
printf (lcd_putc, "Valor:
%4ld", dato);
while (!input(PIN_D1)) // Rutina ANTIRREBOTE por software
{}
IF ( dato <= -100)
{
printf (lcd_putc,
"\f VALOR MINIMO") ;
lcd_gotoxy(1,2);
printf (lcd_putc, "Valor: %4ld", dato);
while (dato <= -100) // Rutina ANTIRREBOTE por software
{
BIP();
delay_ms(10);
}
}
}
}
ELSE
IF (habilitador==0)
{
lcd_putc("\f");
printf (lcd_putc, " DESHABILITADO") ;
delay_ms(160);
}
IF (!input(PIN_E0))
{
habilitador = ! habilitador;
delay_ms(500); // "Congela el tiempo"
durante 500 ms para evitar falsas pulsaciones
}
}
}
|
2. Investigue y responda lo siguiente: ¿Cómo hacer para mostrar números negativos?, ¿cómo hacer para mostrar números con decimales?.
a. Para mostrar números negativos se cita la instrucción signed (con signo).
b. Para mostrar números con decimales se cita la instrucción Long (ld o lu).
8. EVIDENCIA DE TRABAJO EN LABORATORIO:
Link del video: https://youtu.be/gGS7nRZkBL8
9. OBSERVACIONES:
- Se logró ver la diferencia de la ejecución del programa, en el simulador Proteus y en el entrenador PIC siendo algunas como la emisión del sonido (entrecortado en Proteus) y las falsas pulsaciones (en el entrenador PIC).
- Es necesario definir al inicio junto con las librerías, los pines que serán empleados en el desarrollo del programa (los de alimentación, control y de datos).
- El delay_ms es una instrucción muy importante que aportará en toda la programación, ya que es brindarle o permitirle el tiempo mínimo necesario para qué se refresque los datos.
- El código implementado representó la correcta programación elaborada, cumpliendo lo propuesto en este laboratorio.
10. CONCLUSIONES:
- Se implementó la programación eficiente para el ejercicio propuesto, conociendo más instrucciones y su función ejercida, además de sus posibles alteraciones o modificaciones.
- Para que no se ejecute falsas pulsaciones por medio de un pulsador, se empleó la función "while(entrada){}", significando que realizará la ejecución en vacío cuando esa entrada esté energizada de manera prolongada.
- Para poder mostrar valores numéricos con signo, se debe colocar la instrucción "signed" antes del "int" y luego cuando se requiera leer ese valor y mostrarlo en la pantalla lcd, se utiliza la instrucción "ld" dentro de los parámetros de "printf..."; el símbolo % para un valor numérico siendo el número que le sigue los espacios que separará para la escritura.
- Se logró jerarquizar las condiciones y funciones a programar, evaluando cuál es la que gobierna sobre las demás para que dentro de está se sitúen las demás y se cumplan luego de tenerse habilitado la función más grande.
- La declaración de las condiciones para establecer los limites, se plantean dentro de la función correspondiente que llega a ese valor, tanto de incremento o decremento.
- Se hizo uso del símbolo "!" delante de la variable, para cambiar su estado de similar modo que la función toggle; en cada pulso.
No hay comentarios:
Publicar un comentario