Está en la página 1de 10

21 de octubre 2015

Microcontroladores y DSPs
Practica 4

Integrantes
Edgar Gabriel Hernndez Morales
Lady Guadalupe Feliciano Fuentes

INTRODUCCION:
OBJETIVO GENERAL:
Comprender el funcionamiento y programacin de los puertos de entrada analgicos del
microcontrolador PIC18F4550 y utilizar uno de ellos para medir la temperatura ambiental con un
sensor de temperatura LM35. Utilizar las interrupciones del Timer1 para generar una base de
tiempo constante y utilizarla para crear un reloj.
Marco terico:
Un teclado matricial es un simple arreglo de botones conectados en filas y columnas, de modo que
se pueden leer varios botones con el mnimo nmero de pines requeridos. Un teclado matricial
4x4 solamente ocupa 4 lineas de un puerto para las filas y otras 4 lneas para las columnas, de este
modo se pueden leer 16 teclas utilizando solamente 8 lneas de un microcontrolador. Si asumimos
que todas las columnas y filas inicialmente estn en alto (1 lgico), la pulsacin de un botn se
puede detectar al poner cada fila a en bajo (0 lgico) y checar cada columna en busca de un cero,
si ninguna columna est en bajo entonces el 0 de las filas se recorre hacia la siguiente y as
secuencialmente.

INTERRUPCIONES DEL PIC18F4550:


Las interrupciones son mecanismos de llamado de funciones realizadas por hardware en respuesta
a los estmulos importantes de entrada, tal que se evita su prdida.
Otra funcin de las interrupciones es para ejecutar procesos en tiempo real: un programa en
tiempo real es capaz de realizar todas sus funciones dentro de un tiempo especfico.

-Fuentes de interrupcin y sistema de interrupciones

Planteamiento:
Utilizando el microcontrolador PIC18F4550, cree un sistema de monitoreo de temperatura y
hora con las siguientes caractersticas:
- Teclado matricial conectado al puerto B para la programacin de la hora. Alternativa: Push
buttons conectados al puerto B para programar la hora.
-Uno de los canales analgicos del puerto A para adquirir la seal de temperatura proveniente de
un sensor LM35.
- Puerto D para conectar el display de LCD 2x16.
MATERIALES:
-Programa picCcompiler.
-1 Programador de PICs.
-1protoboard
-1PIC18F4550
-1 LCD

-1 teclado matricial 4x4


-1 potenciometro
-2 leds
DESARROLLO PRCTICO:
Primero se realizo un diagrama de flujo para considerar las variables y las acciones que realizara el
programa y as hacer ms fcil la programacion:
Programa en c compiler:
#include <CANDADO.h>
#define LCD_ENABLE_PIN PIN_D0
#define LCD_RS_PIN PIN_D1
#define LCD_RW_PIN PIN_D2
#define LCD_DATA4 PIN_D4
#define LCD_DATA5 PIN_D5
#define LCD_DATA6 PIN_D6
#define LCD_DATA7 PIN_D7
#include <lcd.c>
#include <KBD4.c>
#use fast_io(A)
int i,noseg=0,pinerr=0;
char k;
char pinUsr[5];
char clave[5]="1234";
void main(){
SET_TRIS_A(0xFA);
lcd_init();
delay_ms(100);

kbd_init();
port_b_pullups(TRUE);
for(;;){
output_bit( PIN_A1, 1);
output_low(PIN_A0);
output_low(PIN_A2);
lcd_putc("\fINGRESE SU PIN ");
i=0;
while(i<4){
k=kbd_getc();
if(k!=0)
{
pinUsr[i]=k;
i++;
lcd_gotoxy(i,2);
lcd_putc('*')
}
}
delay_ms(500);
if (pinUsr[0]==clave[0] && pinUsr[1]==clave[1] && pinUsr[2]==clave[2] && pinUsr[3]==clave[3])
{
lcd_putc("\fPin correcto! ");
pinerr=0;
lcd_putc("\nBienvenido!! ");
output_high(PIN_A0);
output_low(PIN_A2);

delay_ms(1000);
while ( !input(PIN_A1)&& noseg<10)
{
printf(lcd_putc,"\fPor favor cierre");
printf(lcd_putc,"\nLa puerta :)");
delay_ms(1000);
noseg++;

if (!input(PIN_A1)&&noseg==10)
{
lcd_putc("\fAlerta Roja ");
lcd_putc("\n !!!!-_- !!!!");
output_bit( PIN_A2, 1);
while (true)
{
output_low(PIN_A0);
output_low(PIN_A2);
delay_ms(500);
output_high(PIN_A2);
delay_ms(500);
}
}

}
}
else

{
lcd_putc("\fpin incorecto ");
output_LOW(PIN_A2);
output_low(PIN_A0);
delay_ms(1000);
pinerr++;
if(pinerr==5)
{
lcd_putc("\fTecladoBloqueado ");
lcd_putc("\n

-_- ");

output_high(PIN_A2);
while(true)
{
output_low(PIN_A2);
delay_ms(500);
output_high(PIN_A2);
delay_ms(50); }
}
}
}
}

Diagrama de flujo

Descripcin del programa en C:


Se comenz por activar las libreras correspondientes del Teclado de 4x4(<KBD4.c>) que se tuvo
que descargar en internet ya que la que viene por default en pic c compiler es parauno de 3x4, la
del LCD (<lcd.c>). Y declarar los puertos a ocupar.
Posteriormente se declaro que numero seria nuestra contrasea para que se pudiera comparar
mas adelante con lo que se ingresaba en el teclado, se configuro al puerto A para que el pin A0 y
A2 fueran salidas y A1 entrada digital. A continuacin se mostraba en el LCD la frase teclee su pin
para que el usuario escribiera un numero de 4 dgitos mediante el teclado y este fuera comparado
con la contrasea que ya se haba establecido antes, si el numero teclead era incorrecto solo haba
5 oportunidades para ingresar el correcto, de lo contrario se bloqueaba el teclado mediante un
ciclo, y si el pin era el correcto entonces se verificaba que la puerta estuviera cerrada mediante el
PIN A1 que haba sido configurado como entrada digital y si este estaba cerrada o sea reciba una
seal positiva se reiniciaba al principio del programa, y si estaba abierta se peda mediante el
teclado que cerrara la puerta durante 10 segundos, al pasar estos 10 segundos si no se cerraba
pasaba a una alerta roja sealando que la puerta estaba abierta.

RESULTADOS Y CONCLUSIONES
Los resultados fueron los esperados con un retardo en la conclusin de la practica ya que estaban
conectados los pines del teclado matricial de manera inversa y por esta razn no se poda escribir
el PIN correcto, sin embargo este problema fue solucionado y la practica concluyo de manera
exitosa mostrando en el LCD lo esperado y realizando las acciones que se plantearon para esta
practica.
REFERENCIAS:
http://www.circuitoselectronicos.org/2011/03/teclado-matricial-4x4.html
https://www.dropbox.com/s/e33oszeey74i6hu/Unidad%20II%20-%20Interrupciones.pdf?dl=0