Report e Pract 4

19
Actividades prácticas. Parte 1. Verificar el funcionamiento de los programas propuestos. Ejemplo 1. Simulación en proteus: Fig1. Circuito simulado en proteus. Explique el funcionamiento del programa al oprimir cada uno de los interruptores. Al oprimir el botón A0 se limpia la LCD mediante la instrucción lcd_putc(`\f`), se manda imprimir a la lcd mediante printf(lcd_putc, “micro-electronik “), se hace una pausa de 2 segundos y se vuelve a limpiar la lcd mediante lcd_putc(`\`f`) posteriormente se imprime de nuevo Presiona un boton. Fig2. Mensaje al oprimir el botón A0. Al oprimir el botón A1 se limpia la lcd mediante la instrucción lcd_putc(`\f``) y mediante un ciclo For se inicializa una variable en 17 que será la posición donde se imprimirá el mensaje a visualizar en la lcd, mediante la instrucción lcd_gotoxy(i,1) se ira moviendo el mensaje hacia la izquierda. Fig3. Mensaje recorriéndose de derecha a izquierda.

Transcript of Report e Pract 4

Page 1: Report e Pract 4

Actividades prácticas.

Parte 1. Verificar el funcionamiento de los programas propuestos.

Ejemplo 1.

Simulación en proteus:

Fig1. Circuito simulado en proteus.

Explique el funcionamiento del programa al oprimir cada uno de los interruptores.

Al oprimir el botón A0 se limpia la LCD mediante la instrucción lcd_putc(`\f`), se manda imprimir

a la lcd mediante printf(lcd_putc, “micro-electronik “), se hace una pausa de 2 segundos y se

vuelve a limpiar la lcd mediante lcd_putc(`\`f`) posteriormente se imprime de nuevo Presiona un

boton.

Fig2. Mensaje al oprimir el botón A0.

Al oprimir el botón A1 se limpia la lcd mediante la instrucción lcd_putc(`\f``) y mediante un ciclo

For se inicializa una variable en 17 que será la posición donde se imprimirá el mensaje a visualizar

en la lcd, mediante la instrucción lcd_gotoxy(i,1) se ira moviendo el mensaje hacia la izquierda.

Fig3. Mensaje recorriéndose de derecha a izquierda.

Page 2: Report e Pract 4

Al oprimir el botón A2 se borra el lcd y nuevamente se utiliza un ciclo For para ir recorriendo el

mensaje de izquierda a derecha mediante la instrucción que posiciona el cursor lcd_gotoxy(i,1) y la

que manda imprimir en pantalla que es printf(lcd_putc,”recorriendo a la derecha”).

Fig4. Recorriendo mensaje a la derecha.

Menciona cual es la manera de recorrer un texto a la derecha o izquierda.

Se puede recorrer mediante la instrucción gotoxy(i,i) que nos indica la posición del cursor en la lcd,

variando las coordenadas y las impresiones en la lcd mediante Printf(lcd_putc,” “) se puede hacer el

recorrido hacia la derecha o izquierda.

Ejemplo2.

Simulación en proteus:

Fig5. Simulación en proteus teclado matricial.

Page 3: Report e Pract 4

Ejemplo3:

Este progreama utiliza las librerías lcd.c y Kbd.c para poder utilizar la pantalla LCD y la matriz de

4X3. Mediante la instrucción kbd_getch( ); se obtiene el valor de la tecla que se selecciona, ese

valor se imprime en la lcd mediante la instrucción printf(lcd_putc, “tecla=%c,k);

Simulación en proteus:

Fig6. Circuito matriz-lcd.

Fig7. Despliegue de la tecla seleccionada.

Ejemplo4:

Este programa despliega en el lcd una leyenda diferente dependiendo el valor que tome la variable

K, esta variable guarda el dato del valor de la tecla seleccionada en el teclado matricial.

Simulación proteus:

Fig8. Mensajes dependiendo la tecla.

Page 4: Report e Pract 4

A) Utilizando el Circuito de la figura 4.3 y el elemento actuador del circuito 4.3 (relevador),

proponga un programa que inicie con el mensaje “Contraseña” y obtenga 3 dígitos de contraseña

mediante el teclado, visualizando en un LCD uno a uno de los caracteres, al obtener los tres dígitos

visualizar la contraseña y esperar un segundo para mostrar el mensaje “acceso” recorriéndolo a la

derecha y activar el relevador durante 2 segundo, el caso de ser incorrecto que aparezca “denegado”

recorriendo el texto a la derecha durante 2 segundos, al finalizar que aparezca el texto

“Contraseña”.

Código:

Para tener una contraseña fija se guardan los dígitos de esta en memoria rom como lo muestra la

línea 11 del código, se utilizaron las librerías lcd.c y kbd.c que corresponden a las funciones de la

pantalla LCd y al teclado matricial, el valor del teclado matricial se obtiene utilizando la instrucción

kbd_getch( ); que se asigna a la variable K.

Mediante la instrucción lcd_gotoxy(i,i) se imprimen los dígitos ingresados en el teclado sobre la

segunda línea del LCD. Se leen los valores de la contraseña definida en la memoria rom mediante la

instrucción read_eeprom(i); y se comparan con los datos ingresados mediante el teclado, si los datos

son iguales se despliega de izquierda a derecha la palabra acceso y se pone en alto el pin c4 que

seria el que active el relevador, de lo contrario se despliega la palabra denegado de izquierda a

derecha.

Page 5: Report e Pract 4
Page 6: Report e Pract 4

Simulación:

Fig9. Circuito teclado-LCD.

Fig10. Mensajes de acceso.

Page 7: Report e Pract 4

B) Se requiere un tablero digital implementado en un LCD. El sistema deberá mostrar la

puntuación de para juegos de hockey, en ambas porterías existen sensores denominado A y

B que detectan cuando se anota un gol por lo que automáticamente se marcara el puntaje y

tiene un botón para reiniciar la cuenta.

Código:

Nuevamente se utilizo la función lcd.c para

poder habilitar la pantalla LCD. Se utilizo

la instrucción printf(lcd_putc,” “); para

desplegar información en la pantalla.

Se pregunto por el botón que se apretaba y

dependiendo este se incrementaba un

contador que era el marcador y se mandaba

imprimir a la pantalla LCD.

Page 8: Report e Pract 4

Simulación en proteus:

Fig11. Marcador local-visitante

C) Utilizando un LCD, teclado matricial, implemente programa que realice las función como un

horno de microondas del 0 a la 9 definidas por el usuario donde la función 0 debe durar un tiempo

100seg y las opciones restantes deben ser definidas por el programador.

En el LCD se debe iniciar con la leyenda Selecciona, posteriormente al oprimir la tecla debe

aparecer cual oprimió, luego la función (por ejemplo 0 es igual descongelar) y deben de visualizar

el tiempo que lleva al llegar a cero debe aparecer finalizado y encender un led para posteriormente

volver a seleccionar, las opciones * y # deben marcar “no validas

Código:

Para este código se utilizo las librerias lcd.c y kbd.c para poder habilitar las funciones de la pantalla

LCD así como el teclado matricial, para obtener el valor de la tecla seleccionada se utilizo la

instrucción kbd_getch( );.

Para entrara a cada función del teclado se utilizo un Switch y cada caso correspondía a un digito del

teclado matricial.

Dentro de cada caso se mando imprimir la función que correspondía (descongelar, pollo, etc)

posteriormente un contador va decrementando el valor inicial y se desplegaba continuamente en la

pantalla LCD hasta que llega a cero. Al finalizar el tiempo aparece un mensaje de “finalizado” y se

manda a alto el pin C0.

Para los botones “#” y “*” se despliega en la pantalla LCD un mensaje de “no valido” por un

periodo de dos segundos.

Page 9: Report e Pract 4
Page 10: Report e Pract 4
Page 11: Report e Pract 4
Page 12: Report e Pract 4
Page 13: Report e Pract 4

Simulación en proteus:

Fig12. Circuito teclado-LCD.

Fig13. Selección de dígitos.

Page 14: Report e Pract 4

D) Utilizando un LCD, teclado matricial, implemente programa que realice las función como un

horno de microondas donde con el teclado numérico definir el tiempo de funcionamiento En el

LCD se debe iniciar con la leyenda Selecciona tiempo , posteriormente pedir el tiempo en segundo

el valor máximo debe ser 5 minutos, al iniciar deben de visualizar el tiempo que lleva al llegar a

cero debe aparecer finalizado y encender un led para posteriormente volver a seleccionar tiempo,

las opciones * y # deben marcar ser usar para iniciar la cuenta o para reiniciar y pedir el y tiempo de

nuevo.

Código:

Page 15: Report e Pract 4
Page 16: Report e Pract 4

Simulación en proteus:

Fig14. Circuito horno de microondas.

Fig15. Ingresando valores.

Page 17: Report e Pract 4

Cuestionario

A) Menciona los diferentes formatos para expresar un carácter en un LCD con el compilador

de C.

El formato es %nt, donde n es opcional y pude ser:

1-9: para especificar cuantos caracteres se deben especificar.

01-09: para indicar la cantidad de ceros a la izquierda.

1.1-9.9 para coma flotante.

T puede indicar:

C carácter.

S cadena o carácter.

U entero sin signo.

d entero con signo.

Lu entero largo sin signo.

Ld entero largo con signo.

X entero hexadecimal.

Lx entero largo hexadecimal.

F flotante con truncado.

G flotante con redondeo.

E flotante en formato exponencial.

W entero sin signo con decimales insertados.

B) En el caso del archivo de manejo de LCD como de teclado, ¿Que modificaciones se tienen

que realizar para utilizar un puerto diferente al B o D?

Se puede trabajar con otros puertos, por ejemplo el PortC, modificando el fichero lcd.c.

Modificando las siguientes sentencias se puede trabajar con otro puerto (A,C,etc).

#if defined use_portb_lcd

#locate lcd = getenv(“sfr: PORTB”)

#define set_tris_lcd(x) set_tris_b(x)

#else

#locate lcd = getenv(“sfr: PORTD”)

#define set_tris_lcd(x) set_tris_d(x)

#endif

C) ¿Por qué en la instrucción #rom tiene el valor 0x2100

Porque la dirección de la memoria EEPROM comienza desde la dirección 0x2100 y termina hasta

la dirección 0x21FF

D) Que modificación se tendrían que realizar para manejar el teclado en puerto B y LCD en

el puerto C

Para utilizar el puerto B es necesario eliminar el comentario de la siguiente línea el archivo LCD.C.

#define use_port_kbd TRUE

Para poder utilizar la pantalla LCD con el puerto C necesitas modificar las sentencias en el fichero

lcd.c como se indico en la pregunta del inciso b

Page 18: Report e Pract 4

E) Que modificación se tendrían que realizar para manejar el teclado en puerto C y LCD en

el puerto D, si se desea utilizar un pic16f887

La pantalla LCD por defecto utiliza el puerto D, para poder utilizar el teclado en el puerto C debes

modificar las siguientes sentencias en el fichero kbd.c

#if defined use_portb_lcd

#define set_tris_lcd(x) set_tris_b(x)

#else

#define set_tris_lcd(x) set_tris_d(x)

#endif

Conclusiones:

Garcia Barajas Luis Alberto.

Esta práctica es de gran ayuda ya que el uso de una pantalla LCD o un teclado matricial son

elementos que en un proyecto son de gran utilidad. La práctica nos lleva de la mano en el uso e

implementación tanto de una pantalla LCD como un teclado matricial, nos muestra cuales son sus

principales funciones y nos ayuda a comprender como es la adquisición de datos o el despliegue de

ellos. Es evidente que el uso de estos elementos es mucho más sencillo en lenguaje C que en

lenguaje ensamblador ya que te ahorras toda la programación de la inicialización en el caso de la

pantalla LCD como en la obtención de los datos en el teclado marcial.

Chávez González Gamaliel

Al manipular una LCD y un teclado matricial hemos hecho un gran avance, la simplificación al

manejar estos dispositivos es bastante útil, el controlar una compleja LCD por medio de

ensamblador es algo tardado, pero controlarla por medio de micro C, es sencillo y el teclado

matricial también, por lo cual podremos utilizar estos elementos con gran sencillez, el manipular

esto para poder elegir el puerto que necesitamos es bastante sencillo de igual forma, solo

necesitamos cambiar una línea de la librería .C.

Page 19: Report e Pract 4

INSTITUTO POLITÉCNICO NACIONAL

UPIITA

MICRICONTROLADORES AVANZADOS

PRACTICA 4

LCD Y TECLADO MATRICIAL

ALUMNOS:

GARCÍA BARAJAS LUIS ALBERTO.

CHÁVEZ GONZÁLEZ GAMALIEL.

GRUPO: 4MV2