p4 Ssanchez
p4 Ssanchez
LABORATORIO DE
CONTROL CON MICROPROCESADORES
TRABAJO PREPARATORIO
Práctica No: 04
Grupo: GR-6
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.
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:
Home:
Fig.5. Home
Características Eléctricas:
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:
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 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.
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.
alimentación principal se activa un led rojo que notifica que se esta alimentando con una
batería externa.
Referencias:
[2] N. Sotomayor. Control con microprocesadores, Abril 2020, Escuela Politécnica Nacional.
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
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
BAJAR
1nF
GND
BAJAR