Professional Documents
Culture Documents
Por:
Efrn Leonardo Sosa Bonilla
Presentado a :
Ing. Miguel Angel Montilla Garcia
Universidad de ibague
Programa de ingeniera electrnica
2014B
Objetivos
Estrategia de solucin
Para dar una solucin del problema primero se debe saber el hardware con el que se cuenta en
este caso el sensor de temperatura ser un LM35 el cual se encargara de enviar los datos de la
seal actual, se contara con un teclado matricial 4*4 el cual servir para ingresar el rango de
temperatura al que se trabajara por ltimo se dispondr de una pantalla de cristal lquido el cual
mostrara los datos que se estarn procesando y las alertas segn segn en el estado en que este.
El algoritmo tendr como datos de entrada los datos que el LM35 que ingresaran por el conversor
anlogo digital estos datos sern procesados y dependiendo de los valores que se hallan ingresado
por el teclado matricial se determinara si la temperatura es inferior o superior a este rango, si la
temperatura inferior es mayor que la superior tambin se mostrara un mensaje de error, para la
parte del nivel se dispondrn 3 rangos bajo medio y alto estos sern entradas por puesto c los
cuales sern pulsadores que simularan la entrada de estos niveles el nivel medio no se mostrara
en pantalla los otros dos si se mostraran dando prioridad en las alertas; todo estos mensajes y
resultados se mostraran en la pantalla de cristal liquido
Diagramas de bloques
Sensor de
temperatura
Nivel
Procesamiento
de la seal
Visualizacin de
Mediciones y alertas
Simulacin
Conclusiones
Algoritmo
#include <16F877A.h>
#device ADC = 10
#fuses XT,NOWDT,NOPROTECT,NOLVP
#use delay(clock=4000000)
#include <DriverTec4x4.c>
#include <lcd.c>
// fusibles
//void nivel(){
//
if(!input(nivel1)
void ProcesarTeclado(){
// Esta funcin ejecuta la accin requerida por cada pulsador del teclado.
if(NTec!=16){
// Si se oprimi algn pulsador se
delay_ms(150);}}
void teclado(){
while(n == 0){
NTec = LeerTeclado();
if( NTec == 0){
V = 1;
n++;
delay_ms(150);}
else if(NTec == 1){
V = 2;
n++;
delay_ms(150);}
else if(NTec == 2){
V = 3;
n++;
delay_ms(150);}
else if(NTec == 4){
V = 4;
n++;
delay_ms(150);}
else if(NTec == 5){
V = 5;
n++;
delay_ms(150);}
else if(NTec == 6){
V = 6;
n++;
delay_ms(150);}
else if(NTec == 8){
V = 7;
n++;
delay_ms(150);}
else if(NTec == 9){
V = 8;
n++;
delay_ms(150);}
else if(NTec == 10){
V = 9;
n++;
delay_ms(150);}
else if(NTec == 13){
V = 0;
n++;
delay_ms(150);}
}
}
//////////////////////////////////////////////////////////////////////////////////////
//
PROGRAMA PRINCIPAL
//
//////////////////////////////////////////////////////////////////////////////////////
void CONV_SENAL(){
aux = Valor*5*0.9765625;}
void main(){
IniPuertos();
IniConversorAD();
lcd_init();
lcd_putc("\f* TAYLOR * ");
lcd_putc("\nPOR: LEONARDO XD ");
Delay_ms(2000);
while (true){
n = 0;
Tmin[0] = 0;
Tmin[1] = 0;
Tmin[2] = 0;
Tmin[3] = 0;
Tmax[0] = 0;
Tmax[1] = 0;
Tmax[2] = 0;
Tmax[3] = 0;
aux_vtmin = 0;
aux_vtmax = 0;
teclado();
// se acquieren los valores del teclado
n = 0;
Tmin[0] = V;
lcd_gotoxy(12,2);
lcd_putc( Tmin[0] + 0x30);
delay_ms(100);
teclado();
// se acquieren los valores del teclado
n = 0;
Tmin[1] = V;
lcd_putc( Tmin[1] + 0x30);
delay_ms(150);
teclado();
// se acquieren los valores del teclado
n = 0;
Tmin[2] = V;
lcd_putc( Tmin[2] + 0x30);
delay_ms(150);
teclado();
n=0;
Tmin[3] = V;
lcd_gotoxy(16,2);
lcd_putc( Tmin[3] + 0x30);
delay_ms(800);
teclado();
// se acquieren los valores del teclado
n = 0;
Tmax[1] = V;
lcd_putc( Tmax[1] + 0x30);
delay_ms(150);
teclado();
// se acquieren los valores del teclado
n = 0;
Tmax[2] = V;
lcd_putc( Tmax[2] + 0x30);
delay_ms(150);
teclado();
// se acquieren los valores del teclado
n = 0;
Tmax[3] = V;
lcd_gotoxy(16,2);
lcd_putc( Tmax[3] + 0x30);
delay_ms(800);
lcd_putc("\fTEMP INTRODUCIDO ");
delay_ms(1000);
aux_vtmin = ((Tmin[0]*1000) + (Tmin[1]*100) + Tmin[2]*10 + Tmin[3]); // se normaliza los valores de los vectores y
se guardan en una variable
aux_vtmax = ((Tmax[0]*1000) + (Tmax[1]*100) + Tmax[2]*10 + Tmax[3]);
if(aux_vtmin >= aux_vtmax){
leersenal();
CONV_SENAL();
UNIDAD = (aux/1000);
DECENA = (aux%1000)/100;
aux1=aux%100;
CENTENA = (aux1/10);
UNIDADMIL = (aux1%10);
while(input(nivel1)){
lcd_putc("\n NIVEL BAJO");
delay_ms(150);
}
while(input(nivel3)){
lcd_putc("\n NIVEL ALTO");
delay_ms(150);
}
while (aux > aux_vtmax){
lcd_putc("\nTemperatura alta");
delay_ms(150);
leersenal();
CONV_SENAL();
}