UNIVERSIDAD NACIONAL ³SANTIAGO ANTÚNEZ DE MAYOLO´
FACULTAD DE CIENCIAS
Escuela Profesional de Ingeniería de Sistemas e Informática
MICROPROCESADORES Y PERIFERICOS
DOCENTE:
ING. ALVARADO CACERES LUIS
TEMA:
TERMÓMETRO DIGITAL CON PIC 16f877A
ALUMNOS:
Blas Cerda Elmer Chauca Guzmán John Harold Guerra Calderón Lenin Maldonado Inti Nelson Vitaliano Pohl Cáceres Paul Silverio Torres Edison Tahua Quijano Edwin HUARAZ ± 2011
INTRODUCCIÓN En el presente trabajo se explica el diseño y desarrollo para implementar un termómetro digital basado en el microcontrolador PIC 16f877A, fabricado por Microchip, el cual se programará en el lenguaje ensamblador del microcontrolador para el funcionamiento del proyecto. La temperatura es un factor de medida engañoso debido a su simplicidad. A menudo pensamos en ella como un simple número, pero en realidad es una estructura estadística cuya exactitud y repetitividad pueden verse afectadas por la masa térmica, el tiempo de medida, el ruido eléctrico y los algoritmos de medida. La temperatura es difícil de medir con exactitud aún en circunstancias óptimas, y en las condiciones de prueba en entornos reales es aún más difícil. Entendiendo las ventajas y los inconvenientes de los diversos enfoques que existen para medir la temperatura, resultará más fácil evitar los problemas y obtener mejores resultados.
1. DESCRIPCIONES GENERALES
El presente proyecto pretende construir un termómetro digital que haciendo uso de un sensor de calor LM35DZ muestre la temperatura del ambiente en un visualizador LCD. Para realizar este proyecto será necesario el uso del microcontrolador PIC 16f877A el cual tiene incorporado un convertidor analógico digital que hace de interprete entre el sensor y el PIC, este PIC será programado en lenguaje ensamblador para que realice los métodos necesarios. Con el presente proyecto pretendemos poner en práctica los conceptos hasta ahora aprendidos en el curso y además desarrollar nuestras capacidades de formulación, desarrollo e implementación de proyectos de sistemas. 2 .
M ARCO
TEÓRICO
Sensor LM35DZ
El sensor que se utilizará será el transistor LM35DZ modelo TO-92, el cual es un sensor de temperatura con buena precisión en escala Celsius. Éste dispositivo transforma la temperatura del ambiente en voltaje, del orden de mV. El LM35DZ entrega a la salida una resolución de 10mV por cada grado centígrado. Empleándolo solo sin ninguna configuración en especial, el dispositivo presenta un rango de medición de 2 a 150°C, como se muestra a continuación:
Esta configuración es la idónea para el proyecto pues solamente la utilizaremos para medir temperaturas hasta 99°C.
Este sensor es fabricado por Fairchild y National Semiconductor.
Convertidor analógico-digit al La etapa de conversión se llevará a cabo mediante un convertidor analógico-digital, el cual es A / D de 8 bits con salida en paralelo, debido a que es uno de los dispositivos más populares en aplicaciones de sistemas, además de estar bien documentado, pues existe gran cantidad de información en libros y en Internet para poderlo emplear en aplicaciones con microprocesadores, microcontroladores y PLDs. Dicho convertidor utiliza el método de aproximaciones sucesivas para la conversión, que se describe brevemente a continuación: Los convertidores de aproximaciones sucesivas contienen un valor fijo en su tiempo de conversión que no depende del valor de la entrada analógica, la disposición básica es semejante a la de ADC de rampa digital, sin embargo, el convertidor de aproximaciones sucesivas no utiliza ningún contador para dar la entrada en el bloque del convertidor DAC, pero en cambio usa un registro con lógica de control que modifica el contenido del registro bit a bit hasta que los datos del registro son el equivalente digital de la entrada analógica. El tiempo de conversión de los convertidores de aproximaciones sucesivas de "n" bits requieren "n" ciclos de reloj para realizar su conversión sin importar la magnitud del voltaje que esta presente en su entrada, esto se debe a que los circuitos de control tienen que ensayar un 1 lógico en cada posición del bit para ver si se necesita o no, es por esto que los convertidores de aproximaciones sucesivas tienen tiempos de conversión muy rápidos, su uso en aplicaciones de sistemas con adquisición de datos permitirán que se adquieran mas valores de datos en un intervalo de tiempo dado. Esto puede ser muy importante cuando los datos analógicos cambian su valor rápidamente.
Ejemplo de un convertidor A/D tenemos el ADC0804 La función de cada uno de sus pines es:
Pin 1 2 3 4 5 6 7 8 9 10 11/18 19 20
Nombre
Función
Lógica
CS- Chip Select RD- Salida autorizada WR- Start conversion CLKIN INTR Vlts + Vlts A GND Vref/2 D GND DB7 a DB0 CLK R Vcc
Habilita el chip Lee la información Iniciar conversión Entrada de reloj Indicador fin conversión Señal positiva analógica Señal negativa analógica Tierra analógica 1/2 máximo del Pin 6 Tierra digital Salidas digitales Salidas reloj interno Alimentación
I/0 I/0 I/0 I/0 -0,3/16V 0 0
I/0 hasta 6,5V
Este convertidor es fabricado por National Semiconductor. Este convertidor se empleará debido a que el sensor LM35DZ nos entrega la temperatura como voltaje y como el voltaje es una cantidad analógica, necesitamos convertirla a su equivalente en valor digital para poderla manejar, pues los valores
digitales son cantidades discretas y por lo tanto es más fácil trabajar con ellas que con cantidades analógicas.
El convertidor presenta el siguiente diagrama de acuerdo a la colocación de sus pines descritos anteriormente:
Sus características más importantes son: Posee dos entradas analógicas: VIN (+) y VIN (-), las cuales permiten tener entradas diferenciales. Es decir, el voltaje real de entrada V IN es la diferencia entre los voltajes aplicados en dichas terminales. En mediciones hechas en un solo punto, la entrada analógica se aplica en V IN(+) mientras que VIN(-) se conecta a la tierra analógica. Durante la operación normal, el convertidor utiliza V CC = +5 V como voltaje de referencia y la entrada analógica puede variar desde 0 hasta 5 V, que es el valor de escala completa. y Convierte el voltaje analógico de entrada en una salida digital de ocho bits. La salida es de tres estados, lo que permite conectar al convertidor con facilidad en canales de datos. Con ocho bits la resolución es de 5V / 255 = 19.6 mV. y Tiene un circuito de reloj interno que produce una frecuencia igual con f=1/(1.1RC), donde R y C son los valores de los componentes externos conectados al convertidor. Una frecuencia típica de reloj es de 606 kHz y se y
obtiene con R = 10k ; y C = 150 pf. Si se desea también se puede conectar un reloj externo; éste se conecta a la terminal CLKIN del CI. y Al utilizar un frecuencia de 606 kHz, el tiempo de conversión es, aproximadamente, igual a 100Qs. y Tiene conexiones a tierra por separado para los voltajes analógicos y digitales. La terminal ocho corresponde a la tierra analógica y se conecta al punto común como referencia en el circuito analógico que genera el voltaje analógico. La terminal diez es la tierra digital, que es la que utilizan todos los dispositivos digitales que integran al sistema.
Microcontrolador PIC 16f877 A La interpretación de los datos obtenidos del convertidor A / D se realiza dentro del microcontrolador PIC 16f877A, fabricado por Microchip. El PIC 16f877A convierte los valores del convertidor A / D en valores equivalentes para la visualización. Como éste dispositivo es el que desarrollará el trabajo más importante de nuestro proyecto, pues de nada sirve tener el mejor sensor de temperatura ni el convertidor analógico digital más exacto sino contamos con un dispositivo que interprete los valores correctamente, se describirá brevemente a continuación al PIC 16f877A: Para las aplicaciones más habituales (casi un 90%) la elección de una versión adecuada de PIC es la mejor solución; sin embargo, dado su carácter general, otras familias de microcontroladores son más eficaces en aplicaciones específicas, especialmente si en ellas predomina una característica concreta, que puede estar muy desarrollada en otra familia. Los detalles más importantes de la excelente acogida que tienen los PIC son los siguientes: y y y y y y y y
Sencillez de manejo: Tienen un juego de instrucciones reducido; 35 en la gama media. Buena información, fácil de conseguir y económica. Precio: Su coste es comparativamente inferior al de sus competidores. Poseen una elevada velocidad de funcionamiento. Buen promedio de parámetros: velocidad, consumo, tamaño, alimentación, código compacto, etc. Herramientas de desarrollo fáciles y baratas. Existe una gran variedad de herramientas hardware que permiten grabar, depurar, borrar y comprobar el comportamiento de los PIC. Diseño rápido. La gran variedad de modelos de PIC permite elegir el que mejor responde a los requerimientos de la aplicación. Una de las razones del éxito de los PIC se basa en su utilización. Cuando se aprende a manejar uno de ellos, conociendo su arquitectura y su repertorio de instrucciones, es muy fácil emplear otro modelo.
Características relevantes. Descripción de las características más representativas de los PIC: Arquitectur
a.
La arquitectura del procesador sigue el modelo Harvard. En esta arquitectura, la CPU se conecta de forma independiente y con buses distintos con la memoria de instrucciones y con la de datos. La arquitectura Harvard permite a la CPU acceder simultáneamente a las dos memorias. Además, propicia numerosas ventajas al funcionamiento del sistema como se irán describiendo. Segment ación.
Se aplica la técnica de segmentación ("pipe-line") en la ejecución de las instrucciones. La segmentación permite al procesador realizar al mismo tiempo la ejecución de una instrucción y la búsqueda del código de la siguiente. De esta forma se puede ejecutar cada instrucción en un ciclo (un ciclo de instrucción equivale a cuatro ciclos de reloj). Las instrucciones de salto ocupan dos ciclos al no conocer la dirección de la siguiente instrucción hasta que no se haya completado la de bifurcación.
Formato de las instrucciones. El formato de todas las instrucciones es de la misma longitud Todas las instrucciones de los microcontroladores de la gama baja tienen una longitud de 12 bits. Las de la gama media tienen 14 bits y más las de la gama alta. Esta característica es muy ventajosa en la optimización de la memoria de instrucciones y facilita enormemente la construcción de ensambladores y compiladores.
Juego de instrucciones. Procesador RISC (Computador de Juego de Instrucciones Reducido). Los modelos de la gama baja disponen de un repertorio de 33 instrucciones, 35 los de la gama media y casi 60 los de la alta.
Todas las instrucciones son ortogonales Cualquier instrucción puede manejar cualquier elemento de la arquitectura como fuente o como destino. a basada en un "banco de registros" Esto significa que todos los objetos del sistema (puertas de E/S, temporizadores, posiciones de memoria, etc.) están implementados físicamente como registros.
Arquitectur
Diversidad de modelos de microcontroladores con prest aciones y recursos dif erentes La gran variedad de modelos de microcontroladores PIC permite que el usuario pueda seleccionar el más conveniente para su proyecto. Herramient as de soporte potentes y económicas La empresa Microchip y otras que utilizan los PIC ponen a disposición de los usuarios numerosas herramientas para desarrollar hardware y software. Son muy abundantes los programadores, los simuladores software, los emuladores en tiempo real, Ensambladores, Compiladores C, Intérpretes y Compiladores BASIC, etc.
y y
La arquitectura Harvard y la técnica de segmentación son los principales recursos en los que se apoya el elevado rendimiento que caracteriza estos dispositivos programables, mejorando dos características esenciales: Velocidad de ejecución. Eficiencia en la compactación del código. Características del PIC 16f877 A
y y y y y y y
Memoria RAM de programa de 1K con palabra de 14 bits tipo Flash. Memoria EEPROM de datos con 68 registros de propósito general. ALU de 8 bits. 2 puertos de comunicación puerto A de 5 bits y puerto B de 8 bits. Temporizador con preescaler. Stack de 8 niveles. Contador de programa de 13 bits.
Di pl
d (k 0066u)
¡
¢
£
cri al líquid ¤
¥
(LCD) d
£
2 lí
¦
£
a
por 16 carac r ¤
£
£
P r la visuali aci de la t emperatura se emplear u display de crist al lí uido (L de 2 lí eas por 16 caract eres (k s 66u el cual ser conect ado a la salida del puert o B del PI 16F para enviarle a ést e los dat os a visuali ar siendo ést os los equivalent es anúmeros decimales de la palabra di it al obt enida del ADC y po r el puert o A se enviar n las señales para controlar el dispositivo.
3 .
A Á §
¨
©
©
E l t ermómetr o d i it al ser bloq u es
de sarr ollado de ac u erdo al si ui en t e d iagrama a
220 ohm
En el diagrama de bloques se muestra el esquema general del proyect o que partiendo de un sensor que en est e caso es el L el cual trans orma la t emperatura del ambient e en volt aje, del orden de mV, est e dispositivo entrega a la salida una resolución de 10mV por cada grado centígrado. E mpleándolo solo sin n ingu na conf igur ación en e spec ial, el d ispo sitivo p resen t a u n rango de med ición de 2 a 150 °C, est a conf igur ación e s la idónea pa r a el p royect o p u es solamen t e la uti li aremo s pa r a med ir t empe ratur ash ast a 99 °C. Una vez ob t en ida la salida del sen sor q u e e s analógica est a se env ía el conve rti do r analógico-d igit al (A/D), el c u al es u n conve rti do r A/D de 8 b its con salida en pa ralelo, el cu al tiene la g ran labo r de transformar la señal analóg ica del L 5 en u na señal d igit al de 8 b its qu e se env ía a la fa se de int erpret ación.
La interpretación de los datos obtenidos del convertidor A/D la realizará en el microcontrolador PIC 16f877A, este convertirá los valores equivalentes para la visualización. Este dispositivo necesita ser programado adecuadamente para obtener el funcionamiento deseado por lo cual es de de gran importancia esta etapa ya que definirá el éxito o fracaso del proyecto. Esta programación se realiza en lenguaje Ensamblador para el posterior quemado. Para la visualización de la temperatura se empleará un display de cristal líquido (LCD) de 2 líneas por 16 caracteres el cual será conectado a la salida del puerto B del PIC 16f877A para enviarle a éste los datos a visualizar, siendo éstos los equivalentes a números decimales de la palabra digital obtenida del ADC y por el puerto A se enviarán las señales para controlar el dispositivo. Para que el PIC 16f877A pueda realizar la interpretación de los datos es necesario que este sea programado con la funcionalidad deseada para ello emplearemos el siguiente diagrama de bloques del funcionamiento del programa que será quemado en el PIC 16f877A.
4. IMPLEMENT ACION TERMÓMETRO DIGIT AL M ATERI AL Y EQUIPO A EMPLE AR: y y y y y y y y y y y y y y y
1 PROTOBOARD PIC 16f877A SENSOR LM35DZ ADC0804 CRISTAL DE 4Mhz DISPLAY DE CRISTAL LÍQUIDO DE 2 X 16 2 CAPACITORES CERÁMICOS DE 27pf CAPACITOR CERÁMICO DE 150pf 2 POTENCIÓMETROS DE PRESICIÓN DE 10K ; RESISTENCIA DE 10K ; A ¼ DE WATT FUENTE DE ALIMENTACIÓN DE 5V CABLE TELEFÓNICO PINZAS DE PUNTA Y CORTE MULTIMETRO DIGITAL FUENTE DE ALIMENTACIÓN REGULADA DE 5V
DES ARROLLO DEL TERMÓMETRO DIGIT AL Inicialmente se tiene que considerar la manera cómo funciona el sensor LM35, que como anteriormente se mencionó, nos entrega a la salida 10mV por cada grado centígrado. Como la salida del sensor es en mV dicha salida se convertirá en una cantidad digital para facilitar su manejo. Para esto se empleará el ADC0804. Para la conversión analógica digital el ADC0804 se manipulará de la siguien te manera:
1. Se habilita el CAD mediante un pulso bajo aplicado a la terminal de CS, para que se inicie la conversión. 2. Se habilita la terminal (pulso bajo) denominada WR para que inicie el proceso de conversión, para esto se debe esperar 100 Q s aproximadamente para que se lleve a cabo la conversión. 3. Se habilita la terminal (pulso bajo) denominada RD para que a la salida se tenga el resultado de la conversión. 4. Finalmente se deshabilita el convertidor. Lo anterior se observa en el siguiente diagrama:
El voltaje de referencia que se manejará en el convertidor se calcula de la siguiente manera: Como el LM35 nos entrega a la salida 10mV/°C y la máxima temperatura que puede detectar es de 150 °C, se tiene que 10mV x 150 = 1.5V, el cual es el máximo voltaje que nos puede entregar, entonces, en base a este voltaje como es el máximo será el voltaje de referencia. Pero como el ADC maneja en su entrada VREF/2 el voltaje de referencia será de 0.75 V. La corriente que se manejará en dicho voltaje de referencia será de 1mA y el voltaje se obtendrá de V CC= 5V mediante un divisor de tensión:
La resistencia total del divisor se calcula: Rt = V CC / Ideseada Rt = 5V / 1mA = 2.5 k ; El factor que se manejará para poder calcular R1 y R2 del divisor de tensión se calcula: Vdeseado/ Vtotal = 0.75V / 5V = 0.15 Una vez obtenido el factor se procede a calcular el valor de los resistores:
R1 = 0.15 * 2.5k ; = 375; R2 = 2.5k ; - 375; = 2125; Ahora se comprobará si los valores son correctos: Vref = (375 ;/375 ;+2125;) * 5V = 0.75 V Que es el voltaje que se necesita para ajustar los pasos del convertidor a escala completa. En lo que respecta al PIC 16f877A, para interpretar el valor de la conversión y la visualización de la misma, se desarrolló el programa de conforme al siguiente diagrama de bloques:
De lo expuesto en el diagrama d e bloques se desarrolla el siguiente código en lenguaje MikroC. ; unsigned unsigned int dc_rd; char *text,*text2,*text ; l ng tl ng; int i,j; id ain() {
I
!
"
= 0;
B, 4, 5, , 3, 2, , 0); cd_Config(&P CD_Cmd(LCD_CUR S R_OFF); LCD_Cmd(LCD_CLEA R); f or(i=0;i<5;i++ ){ LCD_Cmd(LCD_CLEA R); text = "I . SIS E AS"; LCD_Out(1,i,text); Del ay_ms(1000); text2 = "I E IE RIA E LE CTRONIC A"; LCD_Out(2,i,text2); Del ay_ms(1000); $
&
#
'
%
(
$
#
0
&
)
1
0
)
)
} text1 = "INGENIE RIA E LE CTRONIC A"; LCD_Out(2,1,text1); ADCON1 = 0x82; = 0xFF; TRISA Del ay_ms(10000); LCD_Cmd(LCD_CLEA R); text = "Temperatura:"; f or( j=16;j>0;j--){ LCD_Cmd(LCD_CL EA R); LCD_Out(1,j,text); Del ay_ms(500); } hile (1) { adc_rd = ADC_read(2);
2
tlong = (long)adc_rd * 5000; tlong = tlong / 1023 - 40; ch = tlong / 1000; if (ch==0) LCD_Chr(2,6,' '); el se LCD_Chr(2,6,48+ch);
= (tlong / 100) % 10;
ch
LCD_Chr_CP(48+ch); ch = (tlong / 10) % 10; LCD_Chr_CP(48+ch); LCD_Chr_CP('.' );
}
ch = tlong % 10; LCD_Chr_CP(48+ch); LCD_Chr_CP(' C'); Del ay_ms(200);
}
Y en el lenguaje assembler el código es el siguiente: ;############################################################# LIST p= PIC 16f 877 A #include < 16F84A.inc> 4
; Directi a para definir micro. ; Fichero st ndard de cabezera. 3
__CONFIG _CP _OFF & _WDT_OFF & _ PWRT E _ON & _XT_OSC
;#################### DEFINICIONES ########################### Lcd_var E U CONT A1 E U CONT U A2 AS CI E U 0X12 CONT U A3 CONT U A4 TE PE R ATUR A E U UNIT E U DE CT E U 5
5
5
0X10 0X08 0EX09
5
5
5
5
1
5
5
0EX20 0EX21 0X24 0X25 0X26
DIEZ UNO UNI
E U 0X27 E U 0X28 E U 0X29 ;################ COMIENZO DE L PROGR A M A ##################### 6
6
6
ORG 0X00 GOTO INICIO
;################ P ROGR AM A PRINCIPA L ######################### 0X05 ORG #include < LCD1602.inc> ; Fichero de ru ti nas LCD. ;*********T ABL A DE VA LORES DE TE MPE R ATUR A.******************* ;************************************************************ ;Rutina: T ABL A ;Func ion: Tabla con los valores de la temperatura para represent ar en el LCD. ;Entradas: W . ;Salidas: W . ;Var iabl es utilizadas: Ninguna. ;************************************************************ T ABL A
ADDWF PCL,F RETLW B'10000011' RETLW B'10000010' RETLW B'10000001' RETLW B'00000000' RETLW B'00000001' RETLW B'000000 10' RETLW B'000000 11' RETLW B'00000100' RETLW B'00000101' RETLW B'00000110' RETLW B'00000111 ' RETLW B'0000 1000' RETLW B'0000 1001' RETLW B'0000 1010' RETLW B'0000 1011' RETLW B'0000 1100' RETLW B'0000 1101' RETLW B'0000 1110' RETLW B'0000 1111' RETLW B'000 10000' RETLW B'000 10001' RETLW B'000 10010' RETLW B'000 10011' RETLW B'000 10100' RETLW B'000 10101' RETLW B'000 10110' RETLW B'000 10111 ' RETLW B'000 11000' RETLW B'000 11001' RETLW B'000 11010' RETLW B'000 11011' RETLW B'000 111 00' RETLW B'000 111 01' RETLW B'000 11110' RETLW B'000 11111 ' RETLW B'00 100000' RETLW B'00 10000 1' RETLW B'00 1000 10' RETLW B'00 1000 11' RETLW B'00 100100' RETLW B'00 100101' RETLW B'00 100110' RETLW B'00 100111 ' RETLW B'00 101000' RETLW B'00 101000' RETLW B'00 101000' RETLW B'00 101000' RETLW B'00 101000' RETLW B'00 101000' RETLW B'00 101000' RE TURN
;SUM A W A PCL ;- 3°C POS.0 ;- 2°C POS.1 ;- 1°C POS.2 ; 0°C POS.3 ;+ 1°C POS.4 ;+ 2°C POS.5 ;+ 3°C POS.6 ;+ 4°C POS.7 ;+ 5°C POS.8 ;+ 6°C POS.9 ;+ 7°C POS.10 ;+ 8°C POS.11 ;+ 9°C POS.12 ;+10°C POS.13 ;+11°C POS.14 ;+12°C POS.15 ;+13°C POS.16 ;+14°C POS.17 ;+15°C POS.18 ;+16°C POS.19 ;+17°C POS.20 ;+18°C POS.21 ;+19°C POS.22 ;+20° C POS.23 ;+21°C POS.24 ;+22° C POS.25 ;+23°C POS.26 ;+24° C POS.27 ;+25°C POS.28 ;+26°C POS.29 ;+27°C POS.30 ;+28°C POS.31 ;+29°C POS.32 ;+30° C POS.33 ;+31°C POS.34 ;+32° C POS.35 ;+33°C POS.36 ;+34° C POS.37 ;+35°C POS.38 ;+36°C POS.39 ;+37°C POS.40 ;+38°C POS.41 ;+39°C POS.43 ;+40° C POS.44 ;+40° C POS.45 ;+40° C POS.46 ;+40° C POS.47 ;+40° C POS.48 ;+40° C POS.49 ;+40° C POS.50 ;RETORN A DE L A SUB RUTIN A.
;*************** INICIALIZA CION DE L P ROGR AM A.*****************
INICIO
BSF ST ATUS,RP0 ;PONE MOS LOS P UE RTOS A Y B COMO SALID AS, CLRF TRISB CLRF TRISA BCF ST ATUS, RP0 MOVLW B'00110000' ;I NTRODUCI MOS E L N§ '00110000' E N EL REGISTRO ;ASCI. MOVWF AS CI C ALL LCD_ INI ;INICIALIZAMOS EL DISPL AY LCD.
MEDIA NTE C ALL
MOVLW B'0000 1100' C A LL LCD_R EG
;DISPL AY LCD SIN PA RPA DEO Y SI N CURSOR.
MOVLW 0X80 C A LL LCD_R EG
;VISU ALIZA CION DE L A FR ASE " L A TEMPE R ATUR A" ;EN L A PRIME R A LINEA DEL DISPL AY LCD
;L AS ORDE NES LCD_REG Y LCD_D A TO DE L ARCHIVO MOVLW 'L' LCD_D ATO ;LCD16 02.I NC. MOVLW 'A' C A LL LCD_D ATO MOVLW ' ' C A LL LCD_D ATO MOVLW 'T' C A LL LCD_D ATO MOVLW 'E' C A LL LCD_D ATO MOVLW 'M' C A LL LCD_D ATO MOVLW 'P' C A LL LCD_D ATO MOVLW 'E' C A LL LCD_D ATO MOVLW 'R' C A LL LCD_D ATO MOVLW 'A' C A LL LCD_D ATO MOVLW 'T' C A LL LCD_D ATO MOVLW 'U' C A LL LCD_D ATO MOVLW 'R' C A LL LCD_D ATO MOVLW 'A' C A LL LCD_D ATO MOVLW 0XC0 C A LL LCD_R EG
;VISU ALIZA CION DE L A FR ASE "ES DE: +00° C" ;EN L A SEGUND A LINEA DEL DISP L AY LCD
MOVLW C A LL MOVLW C A LL MOVLW C A LL MOVLW C A LL MOVLW C A LL MOVLW C A LL MOVLW C A LL MOVLW C A LL MOVLW C A LL MOVLW C A LL MOVLW C A LL MOVLW C A LL
;L AS ORDE NES LCD_REG Y LCD_D A TO DE L ARCHIVO ;LCD_CXX.INC.
MEDIA NTE
'E' LCD_D ATO
'S'
LCD_D ATO
''
LCD_D ATO 'D' LCD_D ATO
'E'
LCD_D ATO ': ' LCD_D ATO
'' LCD_D ATO
'+' LCD_D ATO
'0' LCD_D ATO
'0' LCD_D ATO B'11011111' LCD_D ATO 'C' LCD_D ATO
;*************** COMIENZO DE L PROGR A M A P RINCIPA L.************* PRI NCIPAL
MOVLW B'000 11000' MOVWF PORT A
; DES H ABILIT ACION DEL DISPL AY Y EL ADC.
C A LL FUNCION A MIENTO C A LL C A LL C A LL C A LL
TEMPO1
;TEMPORIZA CIONES PA R A E L BUE N
TEMPO1 TEMPO1 TEMPO1 TEMPO1
;DEL A DC.
BSF ST ATUS,RP0 MOVLW B'11111111' MOVWF TRISB BCF ST ATUS, RP0 MOVLW B'000 10000' MOVWF PORT A
;PUE RTO B COMO ENTR A D AS PAR A RE CIBIR D A TOS, ;H ABILIT ACION DEL ADC COMO LE CTUR A.
C A LL C A LL C A LL C A LL C A LL
;TEMPORIZA CION PA R A TE RMIN A R DE REA LIZA R ;L A LECTUR A EL ADC.
TEMPO1 TEMPO1 TEMPO1 TEMPO1 TEMPO1
MOVLW B'00000000' MOVWF PORT A
; H ABILIT ACION DE L A ESCRITUR A DEL A DC.
C A LL C A LL C A LL C A LL C A LL
TEMPO1 TEMPO1 TEMPO1 TEMPO1 TEMPO1
;TEMPORIZA CION PA R A TE RMIN A R DE REA LIZA R ;L A ESCRITUR A DE L A DC.
MOVF
PORTB,W
;RE COGID A DE D A TOS DE L ADC, LL A M A D A A
T ABL A C A LL T ABL MOVWF TEMPE R ATUR
BSF
ST ATUS,RP0
A A
R A L A CON ;PAVE RSION DE D A TOS Y A LM A CE N A E DE TOS D ATOS E N REGISTRO TE MPE R ATUR A. ;ES 7
;PUE RTO B COMO SALID AS, DES H ABI LIT A CION DEL
ADC BCF
CLRF TRISB ST ATUS, RP0 MOVLW B'000 11100' MOVWF PORT A
BTFSS
;Y H ABILIT ACION DEL DISP L AY LCD.
GOTO
TEMPE R ATUR A,7 ;PREGUNT A SI EL D ATO ES P OSITIVO O POSITIVO ; NEG ATIVO CON EL BI T 7 DEL REGISTRO
GOTO
NEG A TIVO
MOVLW C A LL MOVLW C A LL GOTO
0XC7
NEG A TIVO TEMPE R ATUR A
BCF
TEMPE R ATUR A,7 ;PONE A CE RO EL BIT 7 DEL REGISTRO
FINT
C A LL
TEMPE R ATUR A.
POSITIVO
LCD_R EG
'+'
;M AND A EL SIGNO '+' A L A POSICION 0XC7 ;DEL DISP L AY LCD Y SALT A A L A POSICION ;FINT.
LCD_D ATO FINT
MOVLW 0XC7 ;Y M AND A EL SIGNO '-' A L A POSICION 0XC7 ;DEL DISPL AY LCD. C ALL LCD_REG MOVLW '-' C A LL LCD_D ATO
MOVF
BCDT
MOVLW 0XC9 C A LL LCD_R EG UNIT,W C A LL LCD_D ATO MOVLW C ALL MOVF C A LL
0XC8
GOTO
PRI NCIPA L
LCD_R EG DE CT,W LCD_D ATO
;LL AM A A L A S UB RUTIN A DE CONVE RSION A BCD. ;ESCRIBE EL D A TO DE L REGISTRO UNIT EN L A ;POSICION 0XC9 DEL DISP L AY LCD.
;ESCRIBE EL D A TO DE L REGISTRO DE CT EN L A ;POSICION 0XC8 DEL DISP L AY LCD.
;SALT A A L A POSICION PRINCIPA L.
;******************** SUB RUTIN A TEMPO1.********************** ;*************************************************************
;Rutina: TEMPO1 ;Func ion: Ret ardo para l a correct a lectura del A DC con 2 cont adores en decimal de 255 y 40 respec tivament e. ; ;Entradas: Ninguna. ;Salidas: Ninguna. ;Var iabl es utilizadas: CONT A3,CONT A4 ;*************************************************** ********** TEMPO1 MOVLW .255 ;SUBRUTIN A DE TEMPORIZACION ME DIA NTE MOVWF CONT A3 DOS CONT ; A DORES C A RG A DOS CON LOS NUME ROS ;EN DE CIM A L 255 Y 40 RESPE CTIVA ME NTE. MOVLW .40 MOVWF CONT A4 BUCLE3
DE CFSZ CONT A3,1 GOTO BUCLE3
BUCLE4
DE CFSZ CONT A4,1 GOTO BUCLE3 RE TURN
;************ CONVE RSION A B CD DE L A TE MPE R A TUR A.************* ;************************************************************ ;Rutina: BCDT ;Func ion: Convier te los valores analogicos de t emperat ura a digitales para separar l as decenas de l as unidades y conver tir l o en val or AS CI. ; ;Entradas: TE MPE R A TUR A, ASCI. ;Salidas: UNIT, DE CT. ;Var iabl es utilizadas: Ninguna. ;******************** ************* *************************** BCDT
CLRF UNIT ;SUB RUTI N A UE CONVIERTE E L VALOR E N CLRF DE CT ;BIN ARIO DE UN REGISTRO A BCD. MOVLW B'00001010' ;VARIABLE DIEZ= 10. MOVWF DIEZ MOVLW B'0000000 1' ;VARIABLE UNO=1. MOVWF UNO GOTO DOS PRI NCI INCF DECT,F ;INCRE ME NT A MOS DE CT EN 1 POR C A D A DOS MOVF TEMPE R ATUR A,W ;DE CE N A DE TE MPE R A TUR A. TRES MOVWF UNI MOVF DIEZ,W SUBWF TEMPE R A TUR A,F ;REST A MOS 10 A L A TEMPE R ATUR A PAR A BTFSC ST ATUS,C ;SEPA R A R L AS DE CE N AS DE L AS UNID A DES. GOTO PRINC I GOTO CU ATRO INCF UNIT,F ;INCRE ME NT AMOS UNIT EN 1 POR C A D A CINCO ;UNID A D DE TEMPE R A TUR A. CU A TRO MOVF UNO,W SUBWF UNI,F ;REST AMOS 1 A L AS UNI D A DES PA R A SABE R BTFSC ST ATUS,C ;L AS UNID A DES. GOTO CINCO MOVF ASCI,W ;CONVE RTIMOS EL VALOR DE UNIT A ASCI. XORWF UNIT MOVF ASCI,W ;CONVE RTIMOS EL VALOR DE DECT A ASCI. XORWF DECT RETURN ;################ FIN PROGR A M A P RINCIPA L ##################### END ; Fin de programa 8
Después de compilar el código y generar su código hexadecimal se simulara su funcionamiento en el Software Proteus de acuerdo al siguiente gráfico
Diagrama del termómetro en proteus
5 .
SÍNTESIS
Como hemos explicado el proyecto realiza la medición de la temperatura del ambiente usando un sensor LM35 el cual nos da la medida en una señal analógica, la que será convertida a digital por el convertidor analógico digital que otorgara como salida una señal digital de 8bits que serán interpretadas por el PIC 16f877A y se realizará la visualización de los datos en el LCD. Con este dispositivo podemos medir la temperatura de un ambiente o aparato en concreto como pudiera ser un motor, nevera, etc. BIBLIOGR AFÍ A y
Microcontroladores PIC, Diseño práctico de aplicaciones José Ma. Ángulo Usategui, Ignacio Ángulo Martínez 2da. edición Editorial Mc Graw Hill Págs. 29,30 1999
www.microchip.com www.fairchildsemi.com www.monografias.com y www.samsung.com y y y