TERMÓMETRO DIGITAL CON LM35 Y PIC 18f4550 1 Karen Daniela Escorcia Otálora: 174827 1María Angélica Gómez Gordillo: 01174788; 1Andrea Estefanía Rocha Abella: 01174793 2 Jaime Villalobos 1Estudiantes 1,2 Universidad Nacional de Colombia Fundamentos de electricidad y magnetismo 2 Profesor Bogotá, D. C., 21de junio de 2012 OBJETIVOS OBJETIVO GENERAL: Construir un termómetro digital tomando como base los fundamentos adquiridos durante el curso de Fundamentos de Electricidad y Magnetismo. OBJETIVOS ESPECIFÍCOS: Aplicar los conceptos adquiridos de circuitos. Integrar este trabajo con temáticas que se manejan en nuestra carrera. RESUMEN El circuito se basa en 2 componentes principales el sensor de temperatura LM35 y el PIC18f4550. El LM35 es un sensor de temperatura con una precisión calibrada de 1°C y un rango que abarca desde 0°-100°C. Esto quiere decir, que por cada 1°C en la variación de la temperatura, el sensor en su salida obtendrá una variación de 10 mv. Este voltaje es el que se incerta al PIC 18f4550 el cual a través de su conversor A/D mostrará los datos en la pantalla LCD. INTRODUCCIÓN Microcontrolador 18F4550 El PIC 18F4550, pertecene a los microcontroladores PIC18 de gama alta. Posee una arquitectura RISC (reduced instruction set computer) de 16 bits longitud de instrucciones y 8 bits de datos. La tabla muestra en resumen las caracterísitcas fundamentales de este microcontrolador y de sus antecesores los PIC18F2455/2550/4455. CARACTERÍSTICAS PIC18F2455 PIC18F2450 PIC18F4455 PIC18F4550 Frecuencia de Operación Hasta 48MHz Hasta 48MHz Hasta 48MHz Hasta 48MHz Memoria de Programa (bytes) 24.576 32.768 24.576 32.768 Memoria RAM de Datos (bytes) 2.048 2.048 2.048 2.048 Memoria EEPROM Datos (bytes) 256 256 256 256 Interrupciones 19 19 20 20 Líneas de E/S 24 24 35 35 Temporizadores 4 4 4 4 Módulos de Comparación/Captura/PWM (CCP) 2 2 1 1 Módulos de Comparación/Captura/PWM mejorado (ECCP) 0 0 1 1 Canales de Comunicación Serie MSSP.EUSART MSSP.EUSART MSSP.EUSAR MSSP.EUSAR Canal USB 1 1 1 1 Puerto Paralelo de Transmisión de Datos (SPP) 0 0 1 1 Canales de Conversión A/D de 10 bits 10 Canales 10 Canales 13 Canales 13 Canales Comparadores analógicos 2 2 2 2 Juego de instrucciones 75 (83 ext.) 75 (83 ext.) 75 (83 ext.) 75 (83 ext.) Encapsulados PDIP28 pines SOIC28 pines PDIP28 pines SOIC28 pines PDIP40 pines PDIP40 pines QFN 40 pines QFN 40 pines TQFP 40 pines TQFP 40 pines Pines del PIC18F4550 Diagrama de Bloques Organización de la Memoria El uC PIC18F4550 dispone de las siguientes memorias: Memoria de programa: memoria flash interna de 32.768 bytes. Almacena instrucciones y constantes/datos Puede ser escrita/leída mediante un programador externo o durante la ejecución programa mediante unos punteros. Memoria RAM de datos: memoria SRAM interna de 2048 bytes en la que están incluidos los registros de función especial. Almacena datos de forma temporal durante la ejecución del programa Puede ser escrita/leída en tiempo de ejecución mediante diversas instrucciones. Memoria EEPROM de datos: memoria no volátil de 256 bytes. Almacena datos que se deben conservar aun en ausencia de tensión de alimentación Puede ser escrita/leída en tiempo de ejecución a través de registros. Pila: bloque de 31 palabras de 21 bits. Almacena la dirección de la instrucción que debe ser ejecutada después de una interrupción o subrutina. Memoria de configuración: memoria en la que se incluyen los bits de configuración (12 bytes de memoria flash) y los registros de identificación (2 bytes de memoria de solo lectura). Se trata de un bloque de memoria situado a partir de la posición 30000H de memoria de programa (más allá de la zona de memoria de programa de usuario). En esta memoria de configuración se incluyen: Bits de configuración: contenidos en 12 bytes de memoria flash permiten la configuración de algunas opciones del uC como: - Opciones del oscilador. - Opciones de reset. - Opciones del watchdog. - Opciones de la circuiteria de depuración y programación. - Opciones de protección contra escritura de memoria de programa y memoria EEPROM de datos. Estos bits se configuran generalmente durante la programación del uC, aunque también pueden ser leídos y modificados durante la ejecución del programa. Registros de identificación: se trata de dos registros situados en las direcciones 3FFFFEH y 3FFFFFH que contienen información del modelo y revisión del dispositivo. Son registros de solo lectura y no pueden ser modificados por el usuario. Arquitectura del Hadware El uC PIC18F4550 dispone buses diferentes para el acceso a memoria de programa y memoria de datos (arquitectura Harvard): Bus de la memoria de programa: - 21 líneas de dirección - 16/8 líneas de datos (16 líneas para instrucciones/8 líneas para datos) Bus de la memoria de datos: - 12 líneas de dirección - 8 líneas de datos Esto permite acceder simultáneamente a la memoria de programa y a la memoria de datos. Es decir se puede ejecutar una instrucción (lo que por lo general requiere acceso a memoria de datos) mientras se lee de la memoria de programa la siguiente instrucción (proceso pipeline). Sensor de temperatura LM35 Este sensor posee 3 patas, dos de ellas para alimentarlo y la tercera nos entrega un valor de tensión proporcional a la temperatura medida por el dispositivo, no necesita calibración externa. *La salida es lineal y entrega 10mV/ºC. *Rango de utilización: -55ºC < T < +150ºC. *Rango de alimentación 4 a 30 voltios. *Consumo: 60 microA (en reposo). *Regulador de voltaje 7805. *Regulador de voltaje variable LM317. *Encapusado: El sensor se encuentra disponible en diferentes encapsulados pero el mas común es el TO-92, una cápsula comúnmente utilizada por los transistores de baja potencia, como el BC548 o el 2N2904. Tiene tres pines: alimentación (VCC), tierra (GND) y salida (OUT). Este sensor es fabricado por Fairchild y National Semiconductor. MATERIALES Sensor de temperatura LM35 Microcontroladorpic18f4550 Pantalla LCD 16x2 Protoboard Oscilador de 20MHz Condensador 20pF (2) Potenciómetro 10K Cable para protoboard PROCEDIMIENTO 1. Se realizó la respectiva programación del microcontroladorpic18f4550(en un software llamado MPLAB), ajustando de esta forma la precisión en las mediciones y se calibra el instrumento. Imagen 1: Algoritmo utilizado para el microcontrolador pic 18f4550. #include <p18f4550.h> #define ADC_BITS 10 #define COMANDO 1 #define DATO 0 voidConfiguraADC (void); unsigned char LeeADC (void); voidEscribeLCD (unsigned char dato, char tipo); voidConfiguraLCD (void); voidRetardo (void); void Retardo1 (void); char char char char char char dec; uni; cen; mil; mmil; uni1; TRISB=0; TRISC=0; TRISD=0; TRISE=0; ADCON1=0X0F; ConfiguraLCD (); ConfiguraADC(); EscribeLCD(datoLC D, DATO); Retardo(); datoLCD='S'; EscribeLCD(datoLC D, DATO); Retardo(); datoLCD='O'; EscribeLCD(datoLC D, DATO); Retardo(); datoLCD='R'; EscribeLCD(datoLC D, DATO); Retardo(); Retardo1(); void main (void) { longb,c,d,e,f,g,h,i; chardatoLCD; float A,C; long B; int DatoADC; datoLCD='S'; EscribeLCD(datoLC D, DATO); Retardo(); datoLCD='E'; EscribeLCD(datoLC D, DATO); Retardo(); datoLCD='N'; while(1) { PORTCbits.RC1=1; LeeADC(); A=LeeADC(); C=A; datoLCD= '='; C=(C*100)/255; B=C*1000; b=B/10000; c=B%10000; d=c/1000; e=c%1000; f=e/100; g=e%100; h=g/10; i=g%10; EscribeLCD(datoLC D, DATO); Retardo(); datoLCD= ' '; EscribeLCD(datoLC D, DATO); Retardo(); PORTCbits.RC1=1; EscribeLCD(datoLC D, DATO); Retardo(); datoLCD= 0xDF; EscribeLCD(datoLC D, DATO); Retardo(); datoLCD= 'C'; EscribeLCD(datoLC D, DATO); Retardo1(); datoLCD= b+0x30; datoLCD= 0b00000001; EscribeLCD(datoLC D, COMANDO); Retardo(); datoLCD= 'T'; EscribeLCD(datoLC D, DATO); Retardo(); datoLCD= 'E'; EscribeLCD(datoLC D, DATO); Retardo(); datoLCD= 'M'; EscribeLCD(datoLC D, DATO); Retardo(); datoLCD= 'P'; EscribeLCD(datoLC D, DATO); Retardo(); EscribeLCD(datoLC D, DATO); Retardo(); datoLCD= d+0x30; EscribeLCD(datoLC D, DATO); Retardo(); datoLCD= ','; EscribeLCD(datoLC D, DATO); Retardo(); datoLCD= f+0x30; EscribeLCD(datoLC D, DATO); Retardo(); datoLCD= h+0x30; EscribeLCD(datoLC D, DATO); Retardo(); datoLCD= i+0x30; } } unsigned char Conf_Timer(void) { PR2=230; PIR1bits.TMR2IF=0; T2CON=0b0111111 1; } voidConfiguraADC (void) { ADCON0=0b00000 101; ADCON1=0b00011 101; ADCON2=0b00000 101; } unsigned char LeeADC (void) { ADCON0bits.GO_D ONE=1; while(ADCON0bits. GO_DONE==1); return ADRESH; } voidEscribeLCD (unsigned char dato, char tipo) { if(tipo==DATO) { PORTEbits.RE0=1; } else { PORTEbits.RE0=0; } PORTEbits.RE1=0; PORTD=dato; PORTEbits.RE2=1; Retardo(); PORTEbits.RE2=0; } voidConfiguraLCD (void) { unsignedchar datoLCD; Retardo(); datoLCD= 0b00000010; EscribeLCD(datoLC D, COMANDO); Retardo(); datoLCD= 0b00111000; EscribeLCD(datoLC D, COMANDO); Retardo(); datoLCD= 0b00001100; EscribeLCD(datoLC D, COMANDO); Retardo(); datoLCD= 0b00000110; EscribeLCD(datoLC D, COMANDO); 2. Simulación en un programa llamado Proteus. Retardo(); datoLCD= 0b00000001; EscribeLCD(datoLC D, COMANDO); Retardo(); } void Retardo1 (void) { int i, j; for(i=0;i<32000;i++ ) { j=j+1; } } voidRetardo (void) { inti,j; for(i=0;i<150;i++) { j=j+1; } } RESULTADOS Imagen 2: Montaje del termómetro Digital Imagen 3: Pantalla LED 16x2 CONCLUSIONES Este proyecto permitió darnos a entender sobre el funcionamiento del termómetro digital, para determinar temperaturas de cuerpos y/o soluciones, siendo lo segundo nuestro punto de interés. Se aplicaron conceptos básicos aprendidos durante el curso, en especial nos basamos en un circuito en serie. Se obtuvo un termómetro digital con una precisión en la medida de 3 cifras decimales, lo cual nos da una cantidad con mayor precisión. BIBLIOGRAFÍA (1) Datasheet Catalog for integrated circuits. “http://www.datasheetcatalog.com/” (Consultado 08/06/12). (2) PIC 18F4550 - ORGANIZACIÓN DE LA MEMORIA “http://www.electromicrodigital.com/site2/index.php?option=com_content&view=article &id=90&Itemid=29&limitstart=1” (Consultado 06/06/12). (3) LM35- UControl “http://www.ucontrol.com.ar/wiki/index.php/LM35” (Consultado 15/06/12). (4) http://www.electromicrodigital.com/site2/index.php?option=com_content&view=article &id=90&Itemid=29&limitstart=1