You are on page 1of 15

CONTROL DE TEMPERATURA ON – OFF CON HISTÉRESIS PARA UNA

INCUBADORA HACIENDO USO DEL PIC18F4550

Presentado por:

BAUTISTA ALMANZA ANDRÉS FELIPE


Código. 1070610122
BLANCO CAICEDO EDISON DAVID
Código. 96022312925
VELANDIA GÓMEZ PAULA ANDREA
Código. 95052704210

GRUPO A1B

Docente a cargo:

PULIDO CASALLAS OSCAR ANDRÉS


Ingeniero Electrónico

UNIVERSIDAD MANUELA BELTRAN


PROGRAMA DE INGENIERÍA BIOMÉDICA
SISTEMAS DIGITALES APLICADOS
BOGOTÁ D.C.
2016
CONTENIDO

RESUMEN ....................................................................................................................... 1
ABSTRACT ..................................................................................................................... 1
INTRODUCCIÓN .......................................................................................................... 1
OBJETIVOS .................................................................................................................... 1
JUSTIFICACIÓN ........................................................................................................... 2
1. MARCO TEÓRICO .............................................................................................. 2
1.1 TEORÍAS GENÉRICAS EXPLICATIVAS ........................................................ 2
1.2 TEORÍAS GENÉRICAS DEL PROYECTO ...………………………………...4
2. INGENIERIA Y PUESTA EN MARCHA DEL PROYECTO............................... 8
2.1 ANÁLISIS .................................................................................................................. 8
2.2 DISEÑO .................................................................................................................. 10
2.3 RESULTADOS……………………………………………………………..…….11
3. CONCLUSIONES .................................................................................................... .11
4. SUGERENCIAS Y RECOMENDACIONES ......................................................... 11
BIBLIOGRAFIA ........................................................................................................... 11
Anexos ............................................................................................................................ 12

LISTA DE FIGURAS

Figura 1. Display de Cristal Líquido de 2*16. .................................................................. 3


Figura 2. Sensor LM35.. ..................................................................................................... 3
Figura 3. Descripción de los pines de conexión de una LCD. ................................................. 4
Figura 4. Ubicación de los pines de conexión de una LCD. ................................................... 5
Figura 5. Condiciones de la alimentación para producir un reset interno. .............................. 6
Figura 6. Procedimiento a seguir para inicializar la LCD mediante instrucciones. .................. 7
Figura 7. Conexiones del sensor LM35. ............................................................................... 7
Figura 8. Diseño de caja incubadora….………………………………………………….9
Figura 9. Diseño del montaje para la implementación del sistema de control de
temperatura...…………………………………………………………………………...10
Figura 10. Diagrama de flujo para el sistema de control de temperatura on - off ......... 12

LISTA DE TABLAS

Tabla 1. Distribución de niveles y voltajes……………………………………………….8


Tabla 2. Configuración de puertos e identificación de entradas y salidas……………….10

LISTA DE ANEXOS

Anexo A. Diagrama de flujo ........................................................................................... 12


Anexo B. Código Fuente con comentarios ..................................................................... 12
RESUMEN

El presente informe corresponde a la implementación de un sistema para control de temperatura


con tres rutinas diferentes de comparación de temperatura; como instrumento de impresión de
datos se utilizó una pantalla LCD, pulsadores para la selección de rutina y sensor de temperatura
referencia LM35 para el muestreo de la temperatura. Para agilizar el proceso de calentamiento, se
agregó una bombilla de 110VAC con roseta la cual reacciona en relación al umbral de temperatura
deseado que a su vez es controlado por un potenciómetro. Como microcontrolador se utilizó un
PIC18F4550 programado en lenguaje XC8 mediante el entorno MPLAB X de Microchip.

ABSTRACT

This report corresponds to the implementation of a system for temperature control with three
different temperature comparison routines; as an information printing instrument a LCD was used,
selection buttons for routine and a LM35 sensor device for sampling temperature. To speed up the
heating process, an 110VAC light bulb which reacts in relation to the desired temperature threshold
which in turn is controlled by a potentiometer was added. As microcontroller a PIC18F4550 was
used programmed into XC8 language by MPLAB X environment.

INTRODUCCIÓN

Para profundizar más en el uso de microcontroladores, en este caso PIC18F4550 se implementó


un circuito para que recree el funcionamiento de una incubadora básica. Dicho PIC se programó
con un código que muestree correctamente la temperatura y el umbral de la misma; se adiciono
una librería para el control del display LCD mediante instrucciones genéricas; esta librería es la
personalización de una perteneciente a la lista de periféricos. En el programa principal se
incluyeron las lecturas continuas del sensor de temperatura y el potenciómetro además de la rutina
número 1. Para realizar la comparación con las rutinas 2 y 3 se implementaron pulsadores. Por lo
tanto es de vital importancia conocer sobre configuración de entradas y salidas tanto en la
programación como en la realización electrónica.

OBJETIVOS

OBJETIVO GENERAL

Implementar un sistema basado en el PIC18F4550, en el cual se haga un control de temperatura


on – off con histéresis para una incubadora, haciendo uso del módulo ADC del
microcontrolador con un sensor de temperatura LM35 y visualizador LCD.

OBJETIVOS ESPECÍFICOS

 Realizar un diagrama de flujo en donde se organice el proceso de implementación y código


para el sistema de control a realizar.
 Identificar el módulo ADC a usar en el microcontrolador y características necesarias de
uso además de los demás recursos necesarios a ser usados.
 Diseñar el circuito electrónico en proteus para su posterior simulación.
 Plantear el código correspondiente en MPLAB X realizando su correcta compilación para
simular en el circuito diseñado.
 Montar el circuito diseñado en físico, en baquela independiente junto con el
microcontrolador ya programado para realizar pruebas y sustentación.

JUSTIFICACIÓN

Las incubadoras son equipos vitales para el tratamiento de neonatos, estas máquinas consisten en
una cámara cerrada de material transparente que evita la exposición a gérmenes, esta incluye un
revestimiento esterilizado donde se puede acomodar al recién nacido, calefacción, filtro de aire,
ventanas para manipular al paciente, y sofisticados sistemas de monitoreo que incluyen control de
peso, respiración, ritmo cardiaco y actividad cerebral. Este mecanismo es posible por un sistema
de automatización y control de la información adquirida que permita reducir las posibles fallas
operacionales y se tenga un mayor control y rendimiento en el funcionamiento de estos equipos.

Es aquí donde los sistemas digitales proveen una solución de complejidad moderada, que suple las
necesidades en el mecanismo de funcionamiento de calefacción de una incubadora a partir de la
programación de un PIC en lenguaje C, permitiendo la regulación de la temperatura de un
prototipo, donde el usuario puede manipularla a partir de un potenciómetro, dependiendo del
pulsador que se presione, se puede seleccionar el promedio o la mediana de los datos y estos
pueden ser visualizados por el usuario a través de una LCD que va directamente controlada al
microcontrolador con un margen de error pequeño, además de contribuir en la precisión y un grado
de exactitud mayor en el control y manejo de la temperatura que realiza el usuario.

1. MARCO TEÓRICO

1.1.TEORÍAS GENÉRICAS EXPLICATIVAS (Marco Conceptual)

LCD (Liquid Cristal Display)

Es un display alfanumérico formado por matrices de puntos que sirve como interface entre la
máquina y el ser humano, en estas se puede mostrar caracteres de cualquier tipo para formar
mensajes y se encuentran en distintos formatos (2*8, 2*16, 4*20), donde el primer digito indica
el número de filas y el segundo el número de columnas o máximo de caracteres por fila.

Estos dispositivos son controlados por un microcontrolador el cual se encarga de polarizar los
puntos de la pantalla, generar los caracteres, desplazar la pantalla y otras funciones donde el
usuario solo necesita saber los comandos de configuración o instrucciones de alto nivel que le
permitirán mostrar mensajes o animaciones sobre la pantalla. La LCD dispone de un puerto
paralelo al exterior de fácil conexión a otros microcontroladores o microprocesadores.
Los caracteres que se pueden mostrar están almacenados en la memoria ROM del
microcontrolador, donde el fabricante destina una parte de la memoria RAM para los caracteres
diseñados por el usuario como por ejemplo la letra Ñ.

Figura 1. Display de Cristal Líquido de 2*16. Tomada de (Suárez Marcelo, 2015)

Sensor LM35

Es un sensor de temperatura tiene una tensión de salida proporcional a los grados Celsius (°C),
el cual, consta de tres pines y cuya precisión es de ±1/4 °C a temperatura ambiente y ±3/4 °C
a lo largo de su temperatura la cual es de -55 a 150 °C.

Sus características más importantes son su calibrado directamente en grados Celsius, su


precisión, su baja corriente de alimentación y su bajo costo.

Figura 2. Sensor LM35. Tomada de (ELECTRONILAB, s.f.)

Conversor ADC

Es un dispositivo electrónico capaz de convertir una señal analógica, ya sea de tensión o


corriente, en una señal digital mediante un cuantificador y codificándose en muchos casos en
un código binario en particular. Donde un código es la representación unívoca de los
elementos, en este caso, cada valor numérico binario hace corresponder a un solo valor de
tensión o corriente.

En la cuantificación de la señal se produce pérdida de la información que no puede ser


recuperada en el proceso inverso, es decir, en la conversión de señal digital a analógica y esto
es debido a que se truncan los valores entre 2 niveles de cuantificación, mientras mayor
cantidad de bits mayor resolución y por lo tanto menor información pérdida.

Aunque un PIC puede tener del orden de 8-12 posibles canales (pines) de entrada analógica,
solo tiene normalmente un único módulo ADC, lo que significa que no podemos tomar
medidas simultáneas de varios canales. Si es necesario, lo que podemos hacer es ir conectando
(seleccionando) los sucesivos canales al ADC para ir midiendo sus voltajes.

El proceso de una conversión ADC se divide en un tiempo de adquisición Ta (durante el cual


un condensador interno se carga al voltaje exterior) y un tiempo de conversión Tc (durante el
cual se desconecta el pin exterior y se cuantifica el voltaje del condensador).

El tiempo de adquisición Ta depende de las características eléctricas del PIC (en particular de
la capacidad del condensador). Si no se respeta este tiempo, el condensador no habrá alcanzado
el nivel del voltaje exterior y la medida será incorrecta. Los datasheet de los PIC indican los
Ta recomendados para diversas familias.

1.2. TEORÍAS GENÉRICAS DEL PROYECTO (Marco referencial)

Conexión de una LCD

Figura 3. Descripción de los pines de conexión de una LCD. Tomada de (Suárez Marcelo, 2015)

1. Señales de alimentación

Son tres señales correspondientes a los pines 1, 2 y 3.


 El pin 1 corresponde a tierra (Gnd).
 El pin 2 corresponde a la alimentación positiva (normalmente +5Vdc).
 El pin 3 corresponde al ajuste de contraste.

Si se alimenta la LCD si haber dado instrucciones de configuración, el display muestra todos sus
caracteres en negro, si no es así se debe ajustar el contraste.

Para el ajuste de contraste se debe colocar un potenciómetro de aproximadamente 10 KΩ, entre


más baja la tensión en este pin mayor será el contraste.

2. Señales de control

Estas señales están en los pines 4, 5 y 6.

El pin 4 (RS) sirve para seleccionar el registro de datos (DR) cuando este tiene un valor lógico de
1, o de instrucciones (IR) cuando asume un valor de 0.

El pin 5 (R/W) permite seleccionar la lectura o escritura en la LCD, tanto datos como instrucciones.
Cuando esta salida posee un valor lógico de 1 se selecciona lectura, o si tiene un valor de 0 se
selecciona escritura.

El pin 6 (E) permite habilitar o deshabilitar la LCD. Cuando este toma un valor lógico de 1 el enable
está habilitado, o por el contrario si toma un valor de cero el enable estará deshabilitado.

3. Señales de datos

Los pines del 7 al 14 forman un bus de datos bidireccional de 8 bits, (D7 a D0). Por medio de estos
pines se envía y se recibe información (si la LCD no está ocupada se puede leer la información del
estado del cursor).

La LCD también puede ser gobernada por un bus de datos de 4 hilos que se conectan a los 4 bits
más significativos (D7, D6, D5 y D4).

Figura 4. Ubicación de los pines de conexión de una LCD. Tomada de (Suárez Marcelo, 2015)

Como mostrar un carácter en una LCD

Para escribir un carácter en una posición determinada, es necesario mandar al registro de instrucciones la
dirección de la celda (instrucción “set DDRAM address”) y posteriormente enviar el carácter al registro de
datos (write data to CG or DDRAM).
Iniciación de la LCD

Las LCDs necesitan ser inicializarlas tras ser alimentadas. El proceso de inicialización es necesario, si no
se respetan los pasos y los tiempos que indica el fabricante, esta no puede ser puesta en marcha.

1. Inicialización mediante el Reset interno

El microcontrolador lleva incorporado un circuito para reset automático tras la alimentación del
módulo, si no se cumplen los requisitos de tiempos especificados el modulo no se resetea y se deberá
hacer mediante instrucciones.

Figura 5. Condiciones de la alimentación para producir un reset interno. Tomada de (Suárez


Marcelo, 2015)

2. Inicialización mediante instrucciones

Es la forma más confiable de inicializar el modulo, ya que los requerimientos de alimentación


difícilmente se cumplen alguna vez. En la figura 6 se muestra la manera de inicializar teniendo un bus
de datos de 8 bits.
Figura 6. Procedimiento a seguir para inicializar la LCD mediante instrucciones. Tomada de
(Suárez Marcelo, 2015)
Conexiones del sensor LM35

Figura 7. Conexiones del sensor LM35. Tomada de (ELECTRONILAB, s.f.)

El primer pin del sensor va conectado directamente al voltaje de alimentación, el segundo pin se conecta a
la salida de datos del microcontrolador y es donde se puede registrar en tiempo real la temperatura, y el
tercer pin va conectado a tierra.
Módulo ADC

Un ADC convierte mide el voltaje V en un pin (que tendrá que estar declarado como entrada con
el correspondiente registro TRISA) y lo convierte en un número. El voltaje se mide en referencia
a un voltaje mínimo, Vref (-), y a un voltaje máximo, Vref (+):

V_norm = (V – Vref(-)) / (Vref(+) –Vref(-))

La fórmula anterior corresponde a un voltaje normalizado. Si el voltaje V alcanza el máximo


(Vref+) tendremos una salida de 1 y si se queda en el mínimo (Vref-) una salida de 0.

Normalmente Vref- suele ser Vss=GND=0V y Vref+ = Vcc = 5V, pero pueden usarse otros
voltajes de referencia. Si por ejemplo queremos medir una señal que sabemos que oscila entre 2 y
3 voltios usaríamos Vref-=2 y Vref+=3. Así aprovecharíamos mejor el rango dinámico del
conversor.

Como el microcontrolador no va a manejar números en coma flotante, el voltaje normalizado se


expresa con un entero, convirtiendo el intervalo real [0,1] en el intervalo de niveles enteros entre
[0 y Nmax-1]. La resolución del ADC es una característica fundamental y nos dice el número de
niveles con los que cubrimos el intervalo [0,1]. Por ejemplo, en los PIC solemos tener una
resolución de 10 bits, que representan 2^10=1024 niveles. El intervalo real [0,1) se aplicaría al
intervalo [0,1023]. Si asumimos un rango de 5V, tendremos que la resolución de cada nivel es de
r=5/1024 V=4.88 mV. Según la documentación de Microchip (esto puede variar para otros
microcontroladores) cualquier voltaje entre [0 y r] (o por debajo de 0, lo que corresponde
a V<Vref-) se cuantificaría en el nivel 0. Entre r y 2r tendríamos una salida de nivel 1. Así hasta
llegar a nivel 1023 que cuantificaría voltajes por encima de 1023r = 1023x 5/1024 = 4.995V. Como
se ve, voltajes por debajo de Vref- o por encima de Vref+ son posibles y se cuantifican como nivel
mínimo 0 o máximo, 1023. Niveles por debajo de 0V o por encima de la tensión de alimentación
(normalmente 5V) pueden ser dañar el PIC.

Nivel Voltaje
0 <r
1 [r,2r]
2 [2r,3r]
… …
1023 >1023r

2. INGENIERIA Y PUESTA EN MARCHA DEL PROYECTO.

2.1 Análisis

En la implementación del sistema de control de temperatura on – off con histéresis para una
incubadora, se hace uso de una pantalla de cristal líquido LCD, un sensor de temperatura LM35,
sistema calefactor y un potenciómetro para el ajuste de temperatura, de tal manera que cada uno
cumple una función distinta, de tal manera que:

 Pantalla LCD. Se muestra continuamente el valor de temperatura del sistema, de referencia,


máxima y mínima, las cuales, se actualizan con una frecuencia de 1 Hz.
 Sensor LM35. Medirá la temperatura del sistema, definiendo una etapa de linealización, ya
que el rango de valores que toma el módulo ADC en la lectura del potenciómetro se debe
adecuar al rango de temperatura establecido pues el rango de valores en el ADC es de
aproximadamente 0 a 500 y el de la temperatura oscila en 20 °C.
 Sistema calefactor. Estará diseñado mediante una caja de cartón de 15x15 cm cuyo interior
tendrá instalado un bombillo AC conectado a la tomacorriente para calentar el sistema.
Figura 8.
 Potenciómetro. Con este dispositivo, se pueden ajustar los valores máximos y mínimos de
la temperatura en la incubadora con una variación de ±20 °C.

Figura 8. Diseño caja incubadora

Además de esto, el sistema tiene tres rutinas adicionales que definirán la mediciónd e temperatura,
es decir:

 Rutina 1. Rutina de comparación, en donde se define si se enciende o no el sistema


calefactor (Bombillo). Ésta será la principal, y se mantendrá a menos que se seleccione
cualquiera de las otras dos rutinas
 Rutina 2. Mostrará en la LCD el promedio de 5 muestras de temperatura tomadas
previamente por el sensor, luego se pasa a la rutina 1 teniendo en cuenta dichos valores.
 Rutina 3. Mostrará en la LCD la mediana de 5 muestras de temperatura tomadas
previamente por el sensor, luego se pasa a la rutina 1 teniendo en cuenta dichos valores.

Para la implementación de éstos, como se mencionó en apartados anteriores, de acuerdo a su


funcionamiento, se realiza una asignación de pines adecuada para su aplicación y además, una
optimización de espacio de montaje.
De acuerdo a esto, se hace uso de la librería “adc.h” para hacer uso del canal ADC establecido y
la librería “lcd.h” para visualización en la LCD.

De esta manera, se designan los siguientes puertos del PIC18F4550 para la implementación del
sistema:

PUERTO FUNCIÓN
RD2 Salida. RS de la LCD
RD3 Salida. EN de la LCD
RD4-RD7 Salida. Pines de funcionamiento de la LCD
RC6 Salida. Sistema calefactor. Bombillo
RA0 Entrada. Canal ADC para sensor de temperatura LM35
RA1 Entrada. Potenciómetro
RC1 Entrada. Pulsador para rutina 2
RC2 Entrada. Pulsador para rutina 3
Tabla 2. Configuración de puertos e identificación de entradas y salidas

Finalmente, se realiza la compilación del código (Anexo B) de acuerdo a lo establecido


anteriormente y según el diagrama de flujo definido (Anexo A).

2.2 Diseño

El diseño del montaje, simulado con la ayuda de proteus es el siguiente, en cual se tienen en
cuenta la definición de pines anteriormente realizadas, además del sistema de conexión del
bombillo a fuente AC por medio de relé:

RL1

V1
VSINE D1
1N4004
Q1 LCD1
OMIH-SH-124D LM016L
R2
4.7k
1 U2
2N2222
VDD
VSS

VEE

RW
RS

D0
D1
D2
D3
D4
D5
D6
D7

42.0
E

U1
1
2
3

4
5
6

7
8
9
10
11
12
13
14

2 2 15
VOUT RA0/AN0 RC0/T1OSO/T1CKI
3 16
RA1/AN1 RC1/T1OSI/CCP2/UOE
4 17
RA2/AN2/VREF-/CVREF RC2/CCP1/P1A
5 23
RA3/AN3/VREF+ RC4/D-/VM
3 LM35 6 24
RA4/T0CKI/C1OUT/RCV RC5/D+/VP
7 25
RA5/AN4/SS/LVDIN/C2OUT RC6/TX/CK
14 26
RA6/OSC2/CLKO RC7/RX/DT/SDO
13
OSC1/CLKI
33 19
RB0/AN12/INT0/FLT0/SDI/SDA RD0/SPP0
34 20
RB1/AN10/INT1/SCK/SCL RD1/SPP1
35 21
RB2/AN8/INT2/VMO RD2/SPP2
36 22
RB3/AN9/CCP2/VPO RD3/SPP3
37 27
RV2 RB4/AN11/KBI0/CSSPP RD4/SPP4
RV2(3) 38 28
RB5/KBI1/PGM RD5/SPP5/P1B
39 29
RB6/KBI2/PGC RD6/SPP6/P1C
40 30
RB7/KBI3/PGD RD7/SPP7/P1D
70%

8
RE0/AN5/CK1SPP
9
RE1/AN6/CK2SPP
10 R1
RE2/AN7/OESPP
10k 18 1
VUSB RE3/MCLR/VPP
10k
PIC18F4550

R3
1k

R4
1k

Figura 9. Diseño del montaje para la implementación del sistema de control de temperatura
2.3 Resultados

Al implementar el diseño realizado, se obtiene efectivamente el sistema de control de temperatura,


con sus secuencias y rutinas correspondientes. No se evidencian fallas durante las pruebas y la
sustentación realizada.

3. CONCLUSIONES

 Es muy importante tener en cuenta cuales son los procesos a llevar a cabo en la
implementación del sistema de control de temperatura, ya que de esa forma se puede
realizar un diagrama de flujo ordenado y fácil de entender, donde se pueden identificar las
condiciones descritas.
 El uso del módulo ADC, fue efectivo para la conversión de los valores obtenidos mediante
el sensor de temperatura, que posteriormente eran mostrados en la LCD.
 La simulación realizada, permite identificar errores para ser corregidos antes de
implementar el sistema, ya que si se llegan a presentar errores puede ser peligroso para las
personas alrededor, además de que el uso de voltaje AC se debe realizar con cuidado pues
se pueden realizar cortos en las instalaciones eléctricas de la universidad.

4. SUGERENCIAS Y RECOMENDACIONES

Es necesario evaluar el valor resultante de la conversión ADC pues en este caso fue necesario
realizarle un posterior tratamiento antes de su impresión y/o comparación. Así como en pasadas
prácticas de laboratorio, la bombilla de 110VAC debe ser acoplada con un relé que sirva de puente
entre la misma y el microcontrolador, lo anterior como medida de precaución para no poseer
corrientes encontradas. Si la frecuencia de impresión en la LCD hace difícil la lectura del usuario
es necesario agregar un retardo de aproximadamente 1 segundo antes de reemplazar los datos
mostrados en pantalla con otros nuevos. Para la correcta variación del umbral de temperatura con
potenciómetro es necesario realizar un proceso de linealización teniendo en cuenta el rango de
voltaje saliente del potenciómetro, el rango leído por el ADC y la temperatura esperada del mismo.
.

BIBLIOGRAFÍA.

ELECTRONILAB. (s.f.). Sensor de Temperatura LM35. Obtenido de


http://electronilab.co/tienda/sensor-de-temperatura-lm35/
Suárez Marcelo, J. I. (06 de 10 de 2015). Cómo gobernar un display LCD alfanumérico basado
en el controlador HD44780. Obtenido de
http://eii.unex.es/profesores/jisuarez/descargas/ip/lcd_alfa.pdf
ANEXO A. DIAGRAMA DE FLUJO PARA EL SISTEMA DE CONTROL DE MOTOR
PASO A PASO

Figura 10. Diagrama de flujo del sistema de control de temperatura on – off

ANEXO B. CÓDIGO FUENTE PARA CONTROL DE TEMPERATURA ON – OFF CON


HISTÉRESIS PARA UNA INCUBADORA
// PIC18F4550 Configuration Bit Settings __delay_ms(150);
__delay_ms(100);
// 'C' source line config statements }

#include <xc.h> void main(){


#include "lcd.h";
#include <adc.h> TRISD=0;TRISAbits.RA0=1;TRISCbits.RC0=1;TRISCbits.R
#include <math.h> C1=1;TRISCbits.RC2=1;TRISCbits.RC6=0;
luz=0;pr2=0;pr3=0;
Lcd_Init();
#define _XTAL_FREQ 4000000 Lcd_Clear();
#define RS PORTDbits.RD2 Lcd_Set_Cursor(1,1);
#define EN PORTDbits.RD3 Lcd_Write_String("Bienvenido");
#define D4 PORTDbits.RD4 r1s();
#define D5 PORTDbits.RD5
#define D6 PORTDbits.RD6 OpenADC(ADC_FOSC_16 & ADC_RIGHT_JUST &
#define D7 PORTDbits.RD7 ADC_16_TAD , ADC_CH0 & ADC_INT_OFF &
#define pr2 PORTCbits.RC1 //pulsador de rutina 2 ADC_VREFPLUS_VDD & ADC_VREFMINUS_VSS,
#define pr3 PORTCbits.RC2 //pulsador de rutina 3 ADC_2ANA);
#define luz LATCbits.LATC6 ConvertADC();
while (BusyADC());
int tap=ReadADC(); //toma de temperatura del ambiente
tap=0,ta=0,tpmax=0,tpmin=0,u,d,tpot,tpotp,ts,tsp,tl,th,tr,c1,c2, CloseADC();
p,m; ta=tap>>1;
int tmp[5];int tm[5]; Lcd_Clear();
Lcd_Set_Cursor(1,1);
void r1s(){ Lcd_Write_String("Ta:");
Lcd_Set_Cursor(1,5); Lcd_Write_Int(tm[i]); //se imprimen las muestras sin
Lcd_Write_Int(ta); borrar la anterior
r1s(); __delay_ms(100);
tpmin=ta+5; //rango de operacion del potenciometro }
tpmax=ta+25; p=(tm[0]+tm[1]+tm[2]+tm[3]+tm[4])*0.2; //promedio
Lcd_Set_Cursor(2,1);
while(1){ Lcd_Write_String("P:");
Lcd_Clear(); Lcd_Set_Cursor(2,3);
OpenADC(ADC_FOSC_16 & ADC_RIGHT_JUST & Lcd_Write_Int(p);
ADC_16_TAD , ADC_CH0 & ADC_INT_OFF & r1s();
ADC_VREFPLUS_VDD & ADC_VREFMINUS_VSS, if(p<tl){ //comparacion
ADC_2ANA); luz=1;
ConvertADC(); }
while (BusyADC()); if(p>th){
tsp=ReadADC(); //toma de temperatura del sistema luz=0;
CloseADC(); }
ts=tsp>>1; __delay_ms(150);
Lcd_Set_Cursor(1,1); while(pr2==1){}
Lcd_Write_String("Ts:"); }
Lcd_Set_Cursor(1,4);
Lcd_Write_Int(ts); if(pr3==1){ //rutina 3
Lcd_Clear();
OpenADC(ADC_FOSC_16 & ADC_RIGHT_JUST & for(int i=0;i<5;i++){
ADC_16_TAD , ADC_CH1 & ADC_INT_OFF & OpenADC(ADC_FOSC_16 & ADC_RIGHT_JUST &
ADC_VREFPLUS_VDD & ADC_VREFMINUS_VSS, ADC_16_TAD , ADC_CH0 & ADC_INT_OFF &
ADC_2ANA); ADC_VREFPLUS_VDD & ADC_VREFMINUS_VSS,
ConvertADC(); ADC_2ANA);
while (BusyADC()); ConvertADC();
tpotp=ReadADC(); //lectura de potenciometro while (BusyADC());
CloseADC(); tmp[i]=ReadADC();
tpot=tpotp>>1; CloseADC();
tr=(tpot*0.04)+tpmin; //0.04=20/500 (linealizacion) tm[i]=tmp[i]>>1;
Lcd_Set_Cursor(1,8); c1=(3*i)+1; //cursor=3i+1
Lcd_Write_String("Tr:"); Lcd_Set_Cursor(1,c1);
Lcd_Set_Cursor(1,11); Lcd_Write_Int(tm[i]);
Lcd_Write_Int(tr); __delay_ms(100);
}
tl=tr-1; m=tm[2];
Lcd_Set_Cursor(2,1); Lcd_Set_Cursor(2,1);
Lcd_Write_String("Tl:"); Lcd_Write_String("M: ");
Lcd_Set_Cursor(2,4); Lcd_Set_Cursor(2,3);
Lcd_Write_Int(tl); Lcd_Write_Int(m);
r1s();
th=tr+1; if(m<tl){
Lcd_Set_Cursor(2,8); luz=1;
Lcd_Write_String("Th:"); }
Lcd_Set_Cursor(2,11); if(m>th){
Lcd_Write_Int(th); luz=0;
}
if(ts<tl){ //rutina 1 __delay_ms(150);
luz=1; while(pr3==1){}
} }
if(ts>th){ }
luz=0; }
}

if(pr2==1){ //rutina 2
Lcd_Clear();
for(int i=0;i<5;i++){
OpenADC(ADC_FOSC_16 & ADC_RIGHT_JUST &
ADC_16_TAD , ADC_CH0 & ADC_INT_OFF &
ADC_VREFPLUS_VDD & ADC_VREFMINUS_VSS,
ADC_2ANA);
ConvertADC();
while (BusyADC());
tmp[i]=ReadADC(); //se toman 5 muestras
CloseADC();
tm[i]=tmp[i]>>1;
c1=(3*i)+1; //cursor=3i+1
Lcd_Set_Cursor(1,c1);

You might also like