0% encontró este documento útil (0 votos)
76 vistas17 páginas

p4 Ssanchez

Este documento describe una práctica de laboratorio sobre el manejo de módulos LCD, teclados y displays de 7 segmentos utilizando microprocesadores. Incluye información sobre el funcionamiento del módulo LCD, sus líneas de interfaz y su inicialización mediante instrucciones. También presenta subrutinas para el manejo del LCD en lenguaje ensamblador y el código C para un sistema que utiliza estos componentes para mostrar contadores en el display y LEDs, controlados por un teclado.
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)
76 vistas17 páginas

p4 Ssanchez

Este documento describe una práctica de laboratorio sobre el manejo de módulos LCD, teclados y displays de 7 segmentos utilizando microprocesadores. Incluye información sobre el funcionamiento del módulo LCD, sus líneas de interfaz y su inicialización mediante instrucciones. También presenta subrutinas para el manejo del LCD en lenguaje ensamblador y el código C para un sistema que utiliza estos componentes para mostrar contadores en el display y LEDs, controlados por un teclado.
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
Está en la página 1/ 17

ESCUELA POLITÉCNICA NACIONAL

FACULTAD DE INGENIERÍA ELÉCTRICA


Y ELECTRÓNICA

LABORATORIO DE
CONTROL CON MICROPROCESADORES

TRABAJO PREPARATORIO

Práctica No: 04

Tema: LCD, TÉCNICAS DE BARRIDO DE


TECLADOS Y MODO EXTENDIDO

Grupo: GR-6

Realizado por: Sebástian Sánchez

Fecha de Entrega: 02/07/2020


Semestre 2020A
Trabajo preparatorio:
1. Consultar acerca del Display de Cristal Líquido:
• Funcionamiento del módulo LCD
• Líneas de interfaz (RS, R/W, E, D4-D7, D0-D3, Vdd, Vss, Vo)
• Modos de interfaz con el Microprocesador
• Inicialización del módulo: por medio de instrucciones.
• Set de Instrucciones
• Características eléctricas

El módulo LCD funciona cuando se energiza sus pines correspondientes, me puede mostrar
caracteres alfanuméricos que previamente ya están almacenados en la memoria del dispositivo,
estos caracteres se los pude poner mediante una combinación en los pines de datos, también
se pude configurar al LCD mediante estos pines.

Fig. 1. Display de Cristal Líquido (LCD).

Fig. 2. Líneas de Interfaz.

La inicialización del LCD se lo puede realzar por programa, consiste en enviar una serie de
comandos y esperar un determinado tiempo, recordando que se debe enviar la primera
instrucción de trabajo después de que haya pasado 15 ms, para completar la secuencia de
inicialización.
Fig. 3. Inicialización del módulo por instrucciones.

Set de instrucciones:

Clear display:

Fig.4. Clear display

Home:

Fig.5. Home

Entry mode set:

Fig.6. Entry mode set

Display ON/OFF control:

Fig.7. Display ON/OFF control

Cursor or display shift:

Fig.8 Cursor or display shift


Function set:

Fig.9 Function set

DDRAM addres set:

Fig.10. DDRAM addres set

Read busy flag and addres:

Fig.11. Read busy flag and addres:

Características Eléctricas:

Los módulos requieren + 5V a 1 a 10 miliamperios. La temperatura extendida y algunos


módulos de alto contraste requieren -5V, también a baja corriente. Los circuitos integrados
económicos convierten + 5V a -5V de manera eficiente. Si la pantalla tiene retroiluminación, la
potencia requerida también debe presupuestarse. La fuente de alimentación no tiene que
"bloquearse" + 5V pero no debe "aumentar" más allá de los máximos absolutos del módulo.

Los circuitos lógicos de un módulo tienen 3 conexiones a la fuente de alimentación: VDD (+


5VDC); VSS (tierra); y VO, ajuste del ángulo de visión, a veces llamado control de contraste o
sesgo.
2. Desarrollar las subrutinas para el manejo del LCD en lenguaje ensamblador.
Fig.12. Subrutina en lenguaje ensamblador para el manejo del LCD.

3. Un sistema microprocesado dispone de los siguientes elementos. Un LCD, un display de 7


segmentos, 8 LEDS, un teclado a base de pulsadores de 5 teclas, todos conectados al mismo
puerto del microcontrolador. El sistema funciona de la siguiente manera. El teclado tendrá las
teclas, subir, bajar, izquierda, derecha, modo. El display será un contador [0-9] y podrá ser
modificado por las teclas subir/bajar. Los leds serán un contador de 8 bits [0-255] y podrá ser
modificado por las teclas izquierda/derecha. El LCD siempre mostrará en la primera línea el
nombre de la tecla presionada y el mensaje “OK” si puede aumentar o disminuir los contadores
mencionados en la segunda línea. Si se intenta modificar los contadores fuera del rango en la
segunda línea se mostrará el mensaje “ERROR”. La tecla modo, permite mostrar los contadores
en un HMI, en el LCD se mostrará “MODO HMI”, además, el display y los leds se apagarán. Al
presionar la tecla modo nuevamente los contadores no se mostrarán en el HMI y el sistema
funcionará de la manera anteriormente indicada.

Código:
#include <avr/io.h> ,0b10000010 int conta1;
#define F_CPU 8000000ul ,0b11111000,0b10000000,0b1 int conta2;
#include <avr/interrupt.h> 0010000}; int aux1;
#include <util/delay.h> unsigned char int apagado;
#include "lcd.h" display_off[10]={0b1111111 int dato;
1,0b11111001,0b10100100,0b int HMI;
unsigned char valor; 10110000,0b10011001,0b1001 // CONFIGURO COMUNICAION
unsigned char 0010,0b10000010 SERIAL
display[10]={0b11000000,0b ,0b11111000,0b10000000,0b1 void USART_Init(unsigned
11111001,0b10100100,0b1011 0010000}; int ubrr)
0000,0b10011001,0b10010010 unsigned char serial; {
UBRR0=0; {
PORTC=0; usart_putchar(cont
UCSR0B|=(1<<RXCIE0 // activo a2); // Envio el
)|(1<<RXEN0)|(1<<TXEN0); Y0 Displays. contador2
config_salida(); }
UCSR0C|=(3<<1); PORTB=display[cont else
a1]; if(aux1==2)
UBRR0=ubrr; _delay_ms(200); // REGRESO MODO
sei(); } NORMAL
void LEDS(void) {
} {
void usart_putchar(char PORTC=1; lcd_clrscr();
data) // activo
{ Y1 Leds. lcd_puts("PULSE
config_salida(); UNA TECLA ");
while(!(UCSR0A&(1< PORTB=conta2;
<UDRE0))); //Espero, } lcd_gotoxy(0,1);
que este limpio el buffer void Display_apagado(void)
UDR0=data; { lcd_puts(" PARA
PORTC=0; CONTINUAR ");
// activo
//transmisión de Y0 Displays. aux1=0;
dato config_salida();
} apagado=0; Display();
unsigned char PORTB=display_off[
usart_getchar(void) apagado]; LEDS();
{ _delay_ms(100); }
} else if
while(!(UCSR0A&(1< void LEDS_apagado(void) (aux1==0) // MODO
<RXC0))); // { NORMAL
espera, mientras no este PORTC=1; {
limpio el buffer // activo
return Y1 Leds. Display();
UDR0; config_salida();
//Retornar PORTB=0; LEDS();
dato } }
} int main(void) }
// CONFIGURACION GENERAL { }
void configuracion(void) configuracion(); ISR(INT0_vect)
{ USART_Init(51); {
DDRA=0; lcd_init(LCD_DISP_ // MENSAJE DE
// PUERTO ON); TECLA PRESIONADA
A ENTRADA lcd_clrscr(); valor=PINA;
PORTA=255; lcd_puts(" valor=valor&(0b000
DDRC=0b00001111; // PRACTICA 4 "); 00111);
PUERTO C SALIDA Y ENTRADA lcd_gotoxy(0,1); if (valor==0)
PORTC=0b11110000; lcd_puts("
DDRD=0b00000010; // SANCHEZ. S "); {
PUERTO D ENTRADA y PIND 2 conta1=0; conta1++;
COMO SALIDA conta2=0; // Aumento
PORTD=0b11111101; aux1=0; el contador del DISPLAY
// INTERRUPCIONES apagado=0;
EIMSK=0b00000001; while (1) lcd_clrscr();
// INT0 { lcd_puts("
EICRA=0b00000010; // MODO TECLA SUBIR ");
// FLANCO DE if // MENSAJE
BAJADA (aux1==1) DE ERROR CONTA 1
sei(); // MODO if
} HMI (conta1>=9) // Limito
// DATOS COMO E/S { que el contador no suba
void config_entrada(void) mas de 9
{ lcd_clrscr(); {
DDRB=0; //
Bus de datos como entrada; lcd_puts(" MODO conta1=9;
PORTB=255; HMI ");
} lcd_gotoxy(0,1); //
void config_salida(void) Display_apagado(); Si ya no puede subir mas
{ ERROR
DDRB=255; LEDS_apagado();
// Bus de datos lcd_puts("
como salida; usart_putchar(cont ERROR ");
PORTB=0; a1); // Envio el }
} contador1 else //
void Display(void) MENSAJE DE OK CONTA 1
{ Aumento el contador de los
LEDS if(conta2<0)
lcd_gotoxy(0,1); { // Limito que el
conta2++; contador no baje mas de 0
lcd_puts(" {
OK "); lcd_clrscr();
} lcd_puts(" conta2=0;
} TECLA DERECHA ");
else if(valor==1) // MENSAJE lcd_gotoxy(0,1); //
// DE ERROR CONTA 2 Si ya no puede bajar mas
Disminuyo el contador del if ERROR
DISPLAY (conta2>=255) //
{ Limito que el contador no lcd_puts("
conta1--; suba mas de 255 ERROR ");
{ }
lcd_clrscr(); else //
lcd_puts(" conta2=255; MENSAJE DE OK CONTA 2
TECLA BAJAR "); {
// MENSAJE lcd_gotoxy(0,1); //
DE ERROR CONTA 1 Si ya no puede subir mas lcd_gotoxy(0,1);
ERROR
if(conta1<0) lcd_puts("
// Limito que el lcd_puts(" OK ");
contador no baje mas de 0 ERROR "); }
{ } }
else // else if(valor==4)
conta1=0; MENSAJE DE OK CONTA 2 //
{ MODO
lcd_gotoxy(0,1); // {
Si ya no puede bajar mas lcd_gotoxy(0,1); aux1++;
ERROR }
lcd_puts(" EIFR=0;
lcd_puts(" OK ");
ERROR "); }
} } // Levanto la
else // else if(valor==3) bandera de interrupcion
MENSAJE DE OK CONTA 1 // }
{ Disminuyo el contador de ISR(USART0_RX_vect)
los LEDS {
lcd_gotoxy(0,1); { dato=usart_getchar
conta2--; ();
lcd_puts(" //usart_putchar(co
OK "); lcd_clrscr(); nta1);
} lcd_puts(" }
} TECLA IZQUIERDA");
else if(valor==2) // MENSAJE
// DE ERROR CONTA 2
Diagrama de flujo:

Fig. 13. Diagrama de flujo del programa.

Fig. 14. Programa en LabVIEW.


Evidencias:

Fig. 15. Evidencia Funcionamiento.

En esta imagen se puede ver que, al encender el micro, los contadores empiezan en cero, el
display de 7 segmentos me muestra un “0”, los leds están apagados y en la parte del HMI no
igualmente, adicionalmente el LCD me muestra un mensaje de inicio.
Fig.
Fig.16. Evidencia Funcionamiento.

En las siguientes imágenes se ve el funcionamiento del primer contador, se presionó el botón


subir, el contador que muestra el display de 7 segmentos aumento y en el LCD se muestra la
tecla presionada y un “ok” que significa que puede seguir aumentando su valor, los LEDS siguen
apagados ya que no se ah presionado la tecla que aumente su contador, en el HMI los
contadores siguen desactivados.

Fig. 17. Evidencia Funcionamiento.

En esta imagen se llevó al contador a su máximo valor posible que es nueve, se ve que el display
muestra el valor, y en el LCD muestra la tecla presionada y un mensaje de ERROR indicando que
el contador no puede aumentar más.
Fig. 18. Evidencia Funcionamiento.

En estas imágenes se presiono la tecla bajar, lo que disminuye el contador del display de 7
segmentos como se puede ver, además en el LCD se muestra la nueva tecla presionada, y un OK
que indica que el contador puede seguir disminuyendo su valor.
Fig. 19. Evidencia Funcionamiento.

En estas imágenes se pulso otro nuevo botón, esta vez fue “derecha” al presionar este botón, el
contador 2 que muestra los LEDS aumenta, además en el LCD se muestra la tecla presionada y
el mensaje de OK indicando que el contador 2 puede seguir aumentando su valor.
Fig. 20. Evidencia Funcionamiento.

En estas imágenes se presiono la tecla “izquierda” lo que disminuye el contador de los LEDS
como se ve en las imágenes, se llegó al valor de cero y se trato de disminuir una vez más, por lo
que en el LCD me muestra la tecla presionada y el mensaje de ERROR indicando que el contador
2 no puede disminuir mas su valor.
Fig. 21. Evidencia Funcionamiento.

En esta imagen se puso un valor al contador 1 y al contador 2, el botón modo no esta presionado
por lo que en el HMI no me muestra nada.

Fig. 22. Evidencia Funcionamiento.

En esta imagen se ve que cuando presiono el botón “MODO” primero el display de 7 segmentos
se apaga, al igual que los LEDS, seguido el LCD me muestra un mensaje “MODO HMI” que me
dice que los contadores ahora se ven en el HMI, en el HMI efectivamente se puede ver los valores
que tenían el display y los leds respectivamente.
Fig. 23. Evidencia Funcionamiento.

En esta imagen se volvió a presionar el botón “MODO” cuando eso sucede, el display y los leds
se vuelven a encender, en el HMI ya no me muestra el valor de los contadores, en el LCD me
muestra un mensaje que dice “PULSE UNA TECLA PARA CONTINUAR” dándonos a saber que
podemos volver a incrementar los contadores desde el micro, volviendo al estado anterior.
Fig. 24. Evidencia Funcionamiento.

Finalmente, en estas 3 imágenes se ve nuevamente el funcionamiento del programa, al


disminuir el contador 1 y aumentar el contador 2, luego se presiona el botón modo y podemos
ver los nuevos valores de los contadores en el HMI.

alimentación principal se activa un led rojo que notifica que se esta alimentando con una
batería externa.

Referencias:

[1] Atmel. Datasheet ATmega164P.

[2] N. Sotomayor. Control con microprocesadores, Abril 2020, Escuela Politécnica Nacional.

[3] C. Canto. Q. Modulo LCD HD44780 de Hitachi y el uc 8051.

[4] Densitron. Application Notes for Character Mode LCDs.


DECODIFICADOR DEDIRECCIONES P1
U1
D0 40 PB0/XCK0/T0/PCINT8 PA0/ADC0/PCINT0 37 A MICROPROCESADOR U6 DCD 1
D1 41 PB1/T1/CLKO/PCINT9 PA1/ADC1/PCINT1 36 B A1 1 A Y0 15 Y0 DSR 6
D2 42 PB2/AIN0/INT2/PCINT10 PA2/ADC2/PCINT2 35 C B1 2 B Y1 14 Y1 RXD 2 RX
D3 43 PB3/AIN1/OC0A/PCINT11 PA3/ADC3/PCINT3 34 C1 3 C Y2 13 RTS 7
D4 44 PB4/SS/OC0B/PCINT12 PA4/ADC4/PCINT4 33 RS Y3 12 TXD 3 TX
D5 1 PB5/MOSI/PCINT13 PA5/ADC5/PCINT5 32 RW Y4 11 CTS 8
D6 2 PB6/MISO/PCINT14 PA6/ADC6/PCINT6 31 E 6 E1 Y5 10 DTR 4
D7 3 PB7/SCK/PCINT15 PA7/ADC7/PCINT7 30 4 E2 Y6 9 RI 9
5 E3 Y7 7
RX 9 PD0/RXD0/PCINT24 PC0/SCL/PCINT16 19 A1
TX 10 PD1/TXD0/PCINT25 PC1/SDA/PCINT17 20 B1 74LS138
11 21 ERROR
IN PD2/INT0/RXD1/PCINT26 PC2/TCK/PCINT18 C1
R5 12 PD3/INT1/TXD1/PCINT27 PC3/TMS/PCINT19 22 EN COMPIM
10k 13 PD4/OC1B/XCK1/PCINT28 PC4/TDO/PCINT20 23 DATA1 COMUNICACION SERIAL
14 PD5/OC1A/PCINT29 PC5/TDI/PCINT21 24 DATA2
15 PD6/ICP/OC2B/PCINT30 PC6/TOSC1/PCINT22 25 DATA3
16 PD7/OC2A/PCINT31 PC7/TOSC2/PCINT23 26 DATA4
C7 1nF CONEXION LED

1
29 AREF XTAL1 8 U3 RN1 U4
C6 27 AVCC XTAL2 7 X1 D0 3 D0 Q0 2 1 16 1 20
1nF 4 RESET CRYSTAL D1 4 D1 Q1 5 2 15 2 19
D2 7 D2 Q2 6 3 14 3 18

2
ATMEGA164P D3 8 D3 Q3 9 4 13 4 17
C8 1nF D4 13 D4 Q4 12 5 12 5 16
D5 14 D5 Q5 15 6 11 6 15
D6 17 D6 Q6 16 7 10 7 14
D7 18 D7 Q7 19 8 9 8 13
A

9 12
R1 1 OE 150 10 11
U5 11 LE
10k D12 D9 D4 LED-BARGRAPH-RED
Y1 74LS373
B

DIODE DIODE DIODE


R2 NOT

10k D13 D7 D5 LCD1 LCD


C

LM016L
DIODE DIODE DIODE
R3
U2 10k D11 D10 D8 D6
DIODE DIODE DIODE DIODE
IN
MODO IZQUIERDA DERECHA BAJAR SUBIR

VDD
VSS

VEE

RW
RS

D0
D1
D2
D3
D4
D5
D6
D7
E
AND_3 D1 D2 D3
DIODE DIODE DIODE DECODFICACION DE TECLADO

1
2
3

4
5
6

7
8
9
10
11
12
13
14
GND R4
10k

RS

DATA1
DATA2
DATA3
DATA4
RW
CONEXION DISPLAYS 7 SEGMENTOS
U8 RN2
D0 3 D0 Q0 2 1 16 SUBIR
4 5 2 15
D1
D2 7
D1
D2
Q1
Q2 6 3 14 TECLADO SUBIR

D3 8 D3 Q3 9 4 13
D4 13 D4 Q4 12 5 12
D5 14 D5 Q5 15 6 11
17 16 7 10 1nF
D6 D6 Q6
D7 18 D7 Q7 19 8 9
GND
1 OE 150
U7 11 LE
MODO
Y0 74LS373 IZQUIERDA DERECHA
IZQUIERDA MODO DERECHA
NOT

1nF 1nF 1nF

GND GND GND

BAJAR

1nF

GND

BAJAR

También podría gustarte