sensor temperatura

SENSOR DE TEMPERATURA PARA UN ACUARIO

INTEGRANTES

Marco R. Vargas
Jessica montero

Correo: oc.ude.gobbsu.aimedaca|sagravrm#oc.ude.gobbsu.aimedaca|sagravrm
oc.ude.gobbsu.aimedaca|oretnomj#oc.ude.gobbsu.aimedaca|oretnomj

images?q=tbn:ANd9GcQa5chs-k3_97r-aGOHy2xwZ_v1M78raVhyRJrxgYWVmFEaQye8GQ

ABSTRACT

This proyect was thought for the control of temperature for several uses (control of temperature for aquarium, control for oven) all this showed in a lcd screen and the temperature is controlled get cross key board.


INTRODUCCIÓN

Una de las aplicaciones más conocidas en microcontroladores es el uso de control. Por ejemplo la temperatura en un acuario mediante una resistencia especial y un sensor, el sensor le dice al microcontrolador si la temperatura objetivo ha sido alcanzada y el microcontrolador enciende o apaga el calefactor para mantener la temperatura objetivo.
Los controladores por lo tanto funcionan en un bucle, miden la variable y según el resultado de la medición decide como actuar, según la lectura obtenida controlan un actuador externo. Por ejemplo un sistema de calefacción medirá la temperatura de una habitación, si la temperatura actual es menor que la consigna el controlador encenderá la calefacción, en caso contrario la apagará o la mantendrá apagada según como sea el estado inicial del actuador


OBJETIVOS

Diseñar mediante programación por medio de lenguaje C, un programa que sea capaz de controlar según la temperatura del medio un actuador (en este caso el medio será el agua de un acuario y el actuador será una resistencia la cual mantendrá una temperatura escogida para el agua).
Este tendrá como objetvo principal el sensado de temperatura del agua, para que cuando esta halla llegado a cierto rango este pueda desactivar (5v-12v c.c y 110v c.a).


++MARCO TEORICO

Control.

Existen varios tipos de control, pero en este caso se utilizo el mas sencillo. Regulación Proporcional: Esta regulación se basa en que cuanto más lejos estamos del valor objetivo el actuador trabaja con más o menos potencia de forma que si estamos muy lejos el actuador funciona a un 100% y si estamos muy cerca apenas va a actuar.
En otras palabras lo que se hace es tomar una lectura del exterior (temperatura) y escoger un set point (valor de temperatura a controlar) una vez el sensor halla alcanzado la temperatura escogida se debe encender un actuador (bombillo o ventilador para este caso) el cual a su vez se ira aumentando su potencia hasta que la temperatura llegue al rango escogido. El código utilizado se muestra en la Fig.1.

codigo

11349068_10153070447324735_1462308668_n.jpg?oh=413ccd50320a7dfa409d20d1dfb6e5ab&oe=55688DF9&__gda__=1432912289_d8d7f3b9c33ec59c57402656dfacebc6
Fig.1 codigo utilizado para el control de temperatura

Sensor de temperatura:

Este control fue diseñado con un sensor lm35 el cual tiene la capacidad de sensar desde -50C° hasta 150C°,los cual significa que por cada grado centígrado este equivaldrá a diez milivoltios, es decir: (150°=1500mV y -50C°=-500mV) pueden ser seleccionados y controlados a través de un teclado matricial y el progreso del mismo puede ser monitoreado través de una pantalla lcd, como se muestra en la Fig.2

11303534_10153070446849735_1712000758_n.jpg?oh=1717bb9cc4aaa3a81ca7714e64aec9df&oe=5568B47D&__gda__=1432926053_f68a26d7cb816597bf4d11897418801f
Fig 2. Lcd

Cabe destacar que Muchas veces la señal que queremos medir no es adecuada para que nuestro convertidor A/D la lea. Esto puede ocurrir, por ejemplo, si tenemos una señal muy pequeña de 0-20mV cuando el convertidor A/D tiene un margen de medida mínimo de 0-2V. Podremos leer esta señal dado que está dentro del margen de medidas del A/D pero la resolución de nuestro de nuestro A/D seria muy pequeña para este caso entonces lo que se haria es amplificar la medida x100 de forma que el margen de la salida del sensor sea igual al margen de entrada en el A/D.
Se añadio un transistor tip 122 ya que este transistor sirve para que el dispositivo sea capaz de proporcionar una gran ganancia de corriente, el amplificador operacional con una configuración de ganancia x1 es capaz de entregar una
impedancia de entrada muy alta y una impedancia de salida muy baja.
Por otra parte el LM35 no requiere de circuitos adicionales para calibrarlo externamente. La baja impedancia de salida, mas su salida lineal y su precisa calibración hace posible que este integrado sea instalado fácilmente en un circuito de control. Debido a su baja corriente de alimentación se produce un efecto de auto calentamiento muy reducido.


Conversor analogo digital

Para medir una señal analógica con el convertidor A/D lo que hace es convertir un valor analógico (por ejemplo 5 Voltios) en un número digital de varias cifras (por ejemplo 5V = 0101). Una vez tenemos nuestra señal en formato analógico en nuestro equipo digital este va a ser capaz de trabajar con ella.
Un convertidor A/D normalmente solo ve valores entre su máximo y mínimo, por ejemplo un A/D de 10 bits leera valores entre 0 y 1024 mientras que uno de 8 bits medirá entre 0 y 256 luego tenemos un sensor de temperatura con una señal de salida es de 0-5Vdc, siendo 0Vdc= 0ºC y 5Vdc= 100ºC .Por otra parte tenemos un convertidor A/D conectado a esta señal con la referencia de tensión superior a 5Vdc y una inferior a 0Vdc, la precisión del A/D es de 10 bits = 1024 posiciones.
Esto quiere decir que la temperatura mínima que podemos medir es 100ºC/1024= 0.097ºC o lo que es lo mismo en voltios 0.0049 V en dc. Esto quiere decir que si queremos traducir las medidas del A/D a grados debemos multiplicar la medida del A/D por 0.097.
Para medir y controlar la temperatura se utilizo el pic 16f887 con el cual se multiplican un número entero en vez de por un número fraccionario. En el ejemplo anterior podríamos multiplicar lo medido por 97 en vez de 0.097, de esta forma el máximo medido no serían 100ºC pero serían 1024x97= 99328 (error máximo de 100-99.328 de 0.672ºC para 100ºC). como se muestra en la Fig.3.

++++ Codigo

11349068_10153070447324735_1462308668_n.jpg?oh=413ccd50320a7dfa409d20d1dfb6e5ab&oe=55688DF9&__gda__=1432912289_d8d7f3b9c33ec59c57402656dfacebc6
Fig.3 codigo utilizado para la conversión decimal a binario

Circuito utilizado.

Este circuito fue desarrollado para controlar acuarios pero se puede también se puede utilizar para controlar voltajes desde (12v c.c y 110 c.a).
Fig.3 circuito empleado para el control de temperatura

https://fbcdn-sphotos-h-a.akamaihd.net/hphotos-ak-xta1/v/t35.0-12/11297470_10153070470769735_1691620820_o.jpg?oh=ca7069244aadcb83139af7539ef5df83&oe=5568BB9F&__gda__=1432918911_fbc2d012a0b2aa5b967658e4e132f6ae

Fig.4 circuito empleado para el ensamblaje de el control de temperatura diseñado en PCB.

11271922_10153070448079735_1858937799_n.jpg?oh=34dfdb2d38e2fd099e0d7b7e6786e0dc&oe=5568C19D&__gda__=1432914877_35228231439af925711fee5484dde394

Codigo Completo

_ini_sys:

;TempControl.c,37 ::         void ini_sys()
;TempControl.c,39 ::         ADC_Init();
    CALL       _ADC_Init+0
;TempControl.c,40 ::         ANSEL  = 0x80;                        // se configuran los pines como pins  I/O
    MOVLW      128
    MOVWF      ANSEL+0
;TempControl.c,41 ::         ANSELH = 0;
    CLRF       ANSELH+0
;TempControl.c,42 ::         C1ON_bit = 0;                      // desactivacion de comparadores
    BCF        C1ON_bit+0, BitPos(C1ON_bit+0)
;TempControl.c,43 ::         C2ON_bit = 0;
    BCF        C2ON_bit+0, BitPos(C2ON_bit+0)
;TempControl.c,44 ::         PSTRCON=0;
    CLRF       PSTRCON+0
;TempControl.c,45 ::         PCON.ULPWUE=0;
    BCF        PCON+0, 5
;TempControl.c,46 ::         trisa=0xFE;
    MOVLW      254
    MOVWF      TRISA+0
;TempControl.c,47 ::         TRISB=0;
    CLRF       TRISB+0
;TempControl.c,48 ::         TRISC=0xff;
    MOVLW      255
    MOVWF      TRISC+0
;TempControl.c,49 ::         TRISD=0;
    CLRF       TRISD+0
;TempControl.c,50 ::         TRISE=0xff;
    MOVLW      255
    MOVWF      TRISE+0
;TempControl.c,51 ::         porta=0;
    CLRF       PORTA+0
;TempControl.c,52 ::         portb=0;
    CLRF       PORTB+0
;TempControl.c,53 ::         portc=0;
    CLRF       PORTC+0
;TempControl.c,54 ::         portd=0;
    CLRF       PORTD+0
;TempControl.c,55 ::         porte=0;
    CLRF       PORTE+0
;TempControl.c,56 ::         C1=1;
    BSF        RD7_bit+0, BitPos(RD7_bit+0)
;TempControl.c,57 ::         C2=1;
    BSF        RD6_bit+0, BitPos(RD6_bit+0)
;TempControl.c,58 ::         C3=1;
    BSF        RD5_bit+0, BitPos(RD5_bit+0)
;TempControl.c,59 ::         C4=1;
    BSF        RD4_bit+0, BitPos(RD4_bit+0)
;TempControl.c,61 ::         SetTemp=eeprom_read(1);
    MOVLW      1
    MOVWF      FARG_EEPROM_Read_Address+0
    CALL       _EEPROM_Read+0
    MOVF       R0+0, 0
    MOVWF      _SetTemp+0
;TempControl.c,62 ::         if(SetTemp==0xff)
    MOVF       R0+0, 0
    XORLW      255
    BTFSS      STATUS+0, 2
    GOTO       L_ini_sys0
;TempControl.c,63 ::         {  eeprom_write(1,18);
    MOVLW      1
    MOVWF      FARG_EEPROM_Write_Address+0
    MOVLW      18
    MOVWF      FARG_EEPROM_Write_data_+0
    CALL       _EEPROM_Write+0
;TempControl.c,64 ::         SetTemp=18;}
    MOVLW      18
    MOVWF      _SetTemp+0
L_ini_sys0:
;TempControl.c,65 ::         delay_ms(100);
    MOVLW      130
    MOVWF      R12+0
    MOVLW      221
    MOVWF      R13+0
L_ini_sys1:
    DECFSZ     R13+0, 1
    GOTO       L_ini_sys1
    DECFSZ     R12+0, 1
    GOTO       L_ini_sys1
    NOP
    NOP
;TempControl.c,66 ::         }
L_end_ini_sys:
    RETURN
; end of _ini_sys

Codigo BCD

_BCD://

;TempControl.c,68 :: void BCD(int aux, unsigned short opcion)
;TempControl.c,70 :: Ctemp=aux/100;
MOVLW 100
MOVWF R4+0
MOVLW 0
MOVWF R4+1
MOVF FARG_BCD_aux+0, 0
MOVWF R0+0
MOVF FARG_BCD_aux+1, 0
MOVWF R0+1
CALL _Div_16x16_S+0
MOVF R0+0, 0
MOVWF _Ctemp+0
;TempControl.c,71 :: Dtemp=aux-Ctemp*100;
MOVLW 100
MOVWF R4+0
CALL _Mul_8x8_U+0
MOVF R0+0, 0
SUBWF FARG_BCD_aux+0, 0
MOVWF R0+0
MOVF R0+0, 0
MOVWF _Dtemp+0
;TempControl.c,72 :: Dtemp=Dtemp/10;
MOVLW 10
MOVWF R4+0
CALL _Div_8x8_U+0
MOVF R0+0, 0
MOVWF _Dtemp+0
;TempControl.c,73 :: Utemp=aux-Ctemp*100-Dtemp*10;
MOVF _Ctemp+0, 0
MOVWF R0+0
MOVLW 100
MOVWF R4+0
CALL _Mul_8x8_U+0
MOVF R0+0, 0
SUBWF FARG_BCD_aux+0, 0
MOVWF _Utemp+0
MOVF _Dtemp+0, 0
MOVWF R0+0
MOVLW 10
MOVWF R4+0
CALL _Mul_8x8_U+0
MOVF R0+0, 0
SUBWF _Utemp+0, 1
;TempControl.c,74 :: Ctemp+=0x30;
MOVLW 48
ADDWF _Ctemp+0, 1
;TempControl.c,75 :: Dtemp+=0x30;
MOVLW 48
ADDWF _Dtemp+0, 1
;TempControl.c,76 :: Utemp+=0x30;
MOVLW 48
ADDWF _Utemp+0, 1
;TempControl.c,77 :: switch(opcion)
GOTO L_BCD2
;TempControl.c,79 :: case 1:
L_BCD4:
;TempControl.c,80 :: LCD_out(2,1,"TEMP: ");
MOVLW 2
MOVWF FARG_Lcd_Out_row+0
MOVLW 1
MOVWF FARG_Lcd_Out_column+0
MOVLW ?lstr1_TempControl+0
MOVWF FARG_Lcd_Out_text+0
CALL _Lcd_Out+0
;TempControl.c,81 :: LCD_chr_cp(Ctemp);
MOVF _Ctemp+0, 0
MOVWF FARG_Lcd_Chr_CP_out_char+0
CALL _Lcd_Chr_CP+0
;TempControl.c,82 :: LCD_chr_cp(Dtemp);
MOVF _Dtemp+0, 0
MOVWF FARG_Lcd_Chr_CP_out_char+0
CALL _Lcd_Chr_CP+0
;TempControl.c,83 :: LCD_chr_cp(Utemp);
MOVF _Utemp+0, 0
MOVWF FARG_Lcd_Chr_CP_out_char+0
CALL _Lcd_Chr_CP+0
;TempControl.c,84 :: break;
GOTO L_BCD3
;TempControl.c,85 :: case 2:
L_BCD5:
;TempControl.c,86 :: LCD_out(1,1,"TEMP. SET: ");
MOVLW 1
MOVWF FARG_Lcd_Out_row+0
MOVLW 1
MOVWF FARG_Lcd_Out_column+0
MOVLW ?lstr2_TempControl+0
MOVWF FARG_Lcd_Out_text+0
CALL _Lcd_Out+0
;TempControl.c,87 :: LCD_chr_cp(Ctemp);
MOVF _Ctemp+0, 0
MOVWF FARG_Lcd_Chr_CP_out_char+0
CALL _Lcd_Chr_CP+0
;TempControl.c,88 :: LCD_chr_cp(Dtemp);
MOVF _Dtemp+0, 0
MOVWF FARG_Lcd_Chr_CP_out_char+0
CALL _Lcd_Chr_CP+0
;TempControl.c,89 :: LCD_chr_cp(Utemp);
MOVF _Utemp+0, 0
MOVWF FARG_Lcd_Chr_CP_out_char+0
CALL _Lcd_Chr_CP+0
;TempControl.c,90 :: break;
GOTO L_BCD3
;TempControl.c,91 :: }
L_BCD2:
MOVF FARG_BCD_opcion+0, 0
XORLW 1
BTFSC STATUS+0, 2
GOTO L_BCD4
MOVF FARG_BCD_opcion+0, 0
XORLW 2
BTFSC STATUS+0, 2
GOTO L_BCD5
L_BCD3:
;TempControl.c,92 :: }
L_end_BCD:
RETURN
; end of _BCD

Codigo teclado

_keyboard://configuracion del teclado

;TempControl.c,95 :: unsigned short keyboard()
;TempControl.c,97 :: C1=1;
BSF RD7_bit+0, BitPos(RD7_bit+0)
;TempControl.c,98 :: C2=1;
BSF RD6_bit+0, BitPos(RD6_bit+0)
;TempControl.c,99 :: C3=1;
BSF RD5_bit+0, BitPos(RD5_bit+0)
;TempControl.c,100 :: C4=1;
BSF RD4_bit+0, BitPos(RD4_bit+0)
;TempControl.c,102 :: C1=0;
BCF RD7_bit+0, BitPos(RD7_bit+0)
;TempControl.c,103 :: if(F1==0)
BTFSC RC7_bit+0, BitPos(RC7_bit+0)
GOTO L_keyboard6
;TempControl.c,104 :: return 0x31;
MOVLW 49
MOVWF R0+0
GOTO L_end_keyboard
L_keyboard6:
;TempControl.c,105 :: else if(F2==0)
BTFSC RC6_bit+0, BitPos(RC6_bit+0)
GOTO L_keyboard8
;TempControl.c,106 :: return 0x32;
MOVLW 50
MOVWF R0+0
GOTO L_end_keyboard
L_keyboard8:
;TempControl.c,107 :: else if(F3==0)
BTFSC RC5_bit+0, BitPos(RC5_bit+0)
GOTO L_keyboard10
;TempControl.c,108 :: return 0x33;
MOVLW 51
MOVWF R0+0
GOTO L_end_keyboard
L_keyboard10:
;TempControl.c,109 :: else if(F4==0)
BTFSC RC4_bit+0, BitPos(RC4_bit+0)
GOTO L_keyboard12
;TempControl.c,110 :: return 0x45;
MOVLW 69
MOVWF R0+0
GOTO L_end_keyboard
L_keyboard12:
;TempControl.c,111 :: C1=1;
BSF RD7_bit+0, BitPos(RD7_bit+0)
;TempControl.c,112 :: C2=0;
BCF RD6_bit+0, BitPos(RD6_bit+0)
;TempControl.c,113 :: if(F1==0)
BTFSC RC7_bit+0, BitPos(RC7_bit+0)
GOTO L_keyboard13
;TempControl.c,114 :: return 0x34;
MOVLW 52
MOVWF R0+0
GOTO L_end_keyboard
L_keyboard13:
;TempControl.c,115 :: else if(F2==0)
BTFSC RC6_bit+0, BitPos(RC6_bit+0)
GOTO L_keyboard15
;TempControl.c,116 :: return 0x35;
MOVLW 53
MOVWF R0+0
GOTO L_end_keyboard
L_keyboard15:
;TempControl.c,117 :: else if(F3==0)
BTFSC RC5_bit+0, BitPos(RC5_bit+0)
GOTO L_keyboard17
;TempControl.c,118 :: return 0x36;
MOVLW 54
MOVWF R0+0
GOTO L_end_keyboard
L_keyboard17:
;TempControl.c,119 :: else if(F4==0)
BTFSC RC4_bit+0, BitPos(RC4_bit+0)
GOTO L_keyboard19
;TempControl.c,120 :: return 0x46;
MOVLW 70
MOVWF R0+0
GOTO L_end_keyboard
L_keyboard19:
;TempControl.c,121 :: C2=1;
BSF RD6_bit+0, BitPos(RD6_bit+0)
;TempControl.c,122 :: C3=0;
BCF RD5_bit+0, BitPos(RD5_bit+0)
;TempControl.c,123 :: if(F1==0)
BTFSC RC7_bit+0, BitPos(RC7_bit+0)
GOTO L_keyboard20
;TempControl.c,124 :: return 0x37;
MOVLW 55
MOVWF R0+0
GOTO L_end_keyboard
L_keyboard20:
;TempControl.c,125 :: else if(F2==0)
BTFSC RC6_bit+0, BitPos(RC6_bit+0)
GOTO L_keyboard22
;TempControl.c,126 :: return 0x38;
MOVLW 56
MOVWF R0+0
GOTO L_end_keyboard
L_keyboard22:
;TempControl.c,127 :: else if(F3==0)
BTFSC RC5_bit+0, BitPos(RC5_bit+0)
GOTO L_keyboard24
;TempControl.c,128 :: return 0x39;
MOVLW 57
MOVWF R0+0
GOTO L_end_keyboard
L_keyboard24:

;TempControl.c,129 :: else if(F4==0)
BTFSC RC4_bit+0, BitPos(RC4_bit+0)
GOTO L_keyboard26
;TempControl.c,130 :: return 0x47;
MOVLW 71
MOVWF R0+0
GOTO L_end_keyboard
L_keyboard26:
;TempControl.c,131 :: C3=1;
BSF RD5_bit+0, BitPos(RD5_bit+0)
;TempControl.c,132 :: C4=0;
BCF RD4_bit+0, BitPos(RD4_bit+0)
;TempControl.c,133 :: if(F1==0)
BTFSC RC7_bit+0, BitPos(RC7_bit+0)
GOTO L_keyboard27
;TempControl.c,134 :: return 0x2a;
MOVLW 42
MOVWF R0+0
GOTO L_end_keyboard
L_keyboard27:
;TempControl.c,135 :: else if(F2==0)
BTFSC RC6_bit+0, BitPos(RC6_bit+0)
GOTO L_keyboard29
;TempControl.c,136 :: return 0x30;
MOVLW 48
MOVWF R0+0
GOTO L_end_keyboard
L_keyboard29:
;TempControl.c,137 :: else if(F3==0)
BTFSC RC5_bit+0, BitPos(RC5_bit+0)
GOTO L_keyboard31
;TempControl.c,138 :: return 0x23;
MOVLW 35
MOVWF R0+0
GOTO L_end_keyboard
L_keyboard31:
;TempControl.c,139 :: else if(F4==0)
BTFSC RC4_bit+0, BitPos(RC4_bit+0)
GOTO L_keyboard33
;TempControl.c,140 :: return 0x48;
MOVLW 72
MOVWF R0+0
GOTO L_end_keyboard
L_keyboard33:
;TempControl.c,141 :: return 0x20;//no hay tecla presionada.
MOVLW 32
MOVWF R0+0
;TempControl.c,142 :: }
L_end_keyboard:
RETURN
; end of _keyboard

_write_ee:

;TempControl.c,144 :: short write_ee(short Ctemp, short Dtemp, short Utemp)
;TempControl.c,146 :: int aux=0;
CLRF write_ee_aux_L0+0
CLRF write_ee_aux_L0+1
;TempControl.c,147 :: Ctemp-=0x30;
MOVLW 48
SUBWF FARG_write_ee_Ctemp+0, 0
MOVWF R0+0
MOVF R0+0, 0
MOVWF FARG_write_ee_Ctemp+0
;TempControl.c,148 :: Dtemp-=0x30;
MOVLW 48
SUBWF FARG_write_ee_Dtemp+0, 1
;TempControl.c,149 :: Utemp-=0x30;
MOVLW 48
SUBWF FARG_write_ee_Utemp+0, 1
;TempControl.c,150 :: aux=Ctemp*100;
MOVLW 100
MOVWF R4+0
CALL _Mul_8x8_S+0
MOVF R0+0, 0
MOVWF write_ee_aux_L0+0
MOVF R0+1, 0
MOVWF write_ee_aux_L0+1
;TempControl.c,151 :: aux+=Dtemp*10;
MOVF FARG_write_ee_Dtemp+0, 0
MOVWF R0+0
MOVLW 10
MOVWF R4+0
CALL _Mul_8x8_S+0
MOVF write_ee_aux_L0+0, 0
ADDWF R0+0, 1
MOVF write_ee_aux_L0+1, 0
BTFSC STATUS+0, 0
ADDLW 1
ADDWF R0+1, 1
MOVF R0+0, 0
MOVWF write_ee_aux_L0+0
MOVF R0+1, 0
MOVWF write_ee_aux_L0+1
;TempControl.c,152 :: aux+=Utemp;
MOVF FARG_write_ee_Utemp+0, 0
ADDWF R0+0, 1
BTFSC STATUS+0, 0
INCF R0+1, 1
MOVLW 0
BTFSC FARG_write_ee_Utemp+0, 7
MOVLW 255
ADDWF R0+1, 1
MOVF R0+0, 0
MOVWF write_ee_aux_L0+0
MOVF R0+1, 0
MOVWF write_ee_aux_L0+1
;TempControl.c,153 :: eeprom_write(1,aux);
MOVLW 1
MOVWF FARG_EEPROM_Write_Address+0
MOVF R0+0, 0
MOVWF FARG_EEPROM_Write_data_+0
CALL _EEPROM_Write+0
;TempControl.c,154 :: delay_ms(100);
MOVLW 130
MOVWF R12+0
MOVLW 221
MOVWF R13+0
L_write_ee34:
DECFSZ R13+0, 1
GOTO L_write_ee34
DECFSZ R12+0, 1
GOTO L_write_ee34
NOP
NOP
;TempControl.c,155 :: return aux;
MOVF write_ee_aux_L0+0, 0
MOVWF R0+0
;TempControl.c,156 :: }
L_end_write_ee:
RETURN
; end of _write_ee

_main:

;TempControl.c,158 :: void main() {
;TempControl.c,160 :: int ADC_valor=0;llamado de la libreria adc para mostrarla en la lcd
;TempControl.c,161 :: unsigned short tecla=0,id=0,Ct=0,Dt=0,Ut=0,cont=0,temperatura=0;
CLRF main_tecla_L0+0
CLRF main_id_L0+0
CLRF main_Ct_L0+0
CLRF main_Dt_L0+0
CLRF main_Ut_L0+0
CLRF main_cont_L0+0
CLRF main_temperatura_L0+0
;TempControl.c,162 :: ini_sys();
CALL _ini_sys+0
;TempControl.c,163 :: Lcd_Init();
CALL _Lcd_Init+0
;TempControl.c,164 :: delay_ms(200);
MOVLW 2
MOVWF R11+0
MOVLW 4
MOVWF R12+0
MOVLW 186
MOVWF R13+0
L_main35:
DECFSZ R13+0, 1
GOTO L_main35
DECFSZ R12+0, 1
GOTO L_main35
DECFSZ R11+0, 1
GOTO L_main35
NOP
;TempControl.c,165 :: Lcd_Cmd(_LCD_CLEAR);
MOVLW 1
MOVWF FARG_Lcd_Cmd_out_char+0
CALL _Lcd_Cmd+0
;TempControl.c,166 :: Lcd_Cmd(_LCD_CURSOR_OFF);
MOVLW 12
MOVWF FARG_Lcd_Cmd_out_char+0
CALL _Lcd_Cmd+0
;TempControl.c,167 :: Lcd_Out(1,1,txt1);
MOVLW 1
MOVWF FARG_Lcd_Out_row+0
MOVLW 1
MOVWF FARG_Lcd_Out_column+0
MOVLW _txt1+0
MOVWF FARG_Lcd_Out_text+0
CALL _Lcd_Out+0
;TempControl.c,168 :: LCD_out(2,1,txt2);
MOVLW 2
MOVWF FARG_Lcd_Out_row+0
MOVLW 1
MOVWF FARG_Lcd_Out_column+0
MOVLW _txt2+0
MOVWF FARG_Lcd_Out_text+0
CALL _Lcd_Out+0
;TempControl.c,169 :: delay_ms(2000);
MOVLW 11
MOVWF R11+0
MOVLW 38
MOVWF R12+0
MOVLW 93
MOVWF R13+0
L_main36:
DECFSZ R13+0, 1
GOTO L_main36
DECFSZ R12+0, 1
GOTO L_main36
DECFSZ R11+0, 1
GOTO L_main36
NOP
NOP
;TempControl.c,170 :: Lcd_Cmd(_LCD_CLEAR);
MOVLW 1
MOVWF FARG_Lcd_Cmd_out_char+0
CALL _Lcd_Cmd+0
;TempControl.c,171 :: BCD(SetTemp,2);
MOVF _SetTemp+0, 0
MOVWF FARG_BCD_aux+0
CLRF FARG_BCD_aux+1
MOVLW 2
MOVWF FARG_BCD_opcion+0
CALL _BCD+0
;TempControl.c,172 :: while(1)
L_main37:
;TempControl.c,174 :: ADC_valor = ADC_Read(7);
MOVLW 7
MOVWF FARG_ADC_Read_channel+0
CALL _ADC_Read+0
;TempControl.c,175 :: temperatura=ADC_valor/3;
valor temperatura,configuracion del sensor
MOVLW 3
MOVWF R4+0
MOVLW 0
MOVWF R4+1
CALL _Div_16x16_S+0
MOVF R0+0, 0
MOVWF main_temperatura_L0+0
;TempControl.c,176 :: BCD(temperatura,1);
MOVF R0+0, 0
MOVWF FARG_BCD_aux+0
CLRF FARG_BCD_aux+1
MOVLW 1
MOVWF FARG_BCD_opcion+0
CALL _BCD+0
;TempControl.c,177 :: if(temperatura>SetTemp+1)
MOVF _SetTemp+0, 0
ADDLW 1
MOVWF R1+0
CLRF R1+1
BTFSC STATUS+0, 0
INCF R1+1, 1
MOVLW 128
XORWF R1+1, 0
MOVWF R0+0
MOVLW 128
SUBWF R0+0, 0
BTFSS STATUS+0, 2
GOTO Lmain77
MOVF main_temperatura_L0+0, 0
SUBWF R1+0, 0
L
main77:
BTFSC STATUS+0, 0
GOTO L_main39
;TempControl.c,179 :: luz=0;
BCF RA0_bit+0, BitPos(RA0_bit+0)
;TempControl.c,180 :: vent=1;
BSF RD0_bit+0, BitPos(RD0_bit+0)
;TempControl.c,181 :: }
GOTO L_main40
L_main39:
;TempControl.c,182 :: else if (temperatura<SetTemp-1)
MOVLW 1
SUBWF _SetTemp+0, 0
MOVWF R1+0
CLRF R1+1
BTFSS STATUS+0, 0
DECF R1+1, 1
MOVLW 128
MOVWF R0+0
MOVLW 128
XORWF R1+1, 0
SUBWF R0+0, 0
BTFSS STATUS+0, 2
GOTO Lmain78
MOVF R1+0, 0
SUBWF main_temperatura_L0+0, 0
L
main78:
BTFSC STATUS+0, 0
GOTO L_main41
;TempControl.c,184 :: luz=1;
BSF RA0_bit+0, BitPos(RA0_bit+0)
;TempControl.c,185 :: vent=0;
BCF RD0_bit+0, BitPos(RD0_bit+0)
;TempControl.c,186 :: }
GOTO L_main42
L_main41:
;TempControl.c,187 :: else if(temperatura<SetTemp+1 && temperatura>SetTemp-1)
MOVF _SetTemp+0, 0
ADDLW 1
MOVWF R1+0
CLRF R1+1
BTFSC STATUS+0, 0
INCF R1+1, 1
MOVLW 128
MOVWF R0+0
MOVLW 128
XORWF R1+1, 0
SUBWF R0+0, 0
BTFSS STATUS+0, 2
GOTO Lmain79
MOVF R1+0, 0
SUBWF main_temperatura_L0+0, 0
L
main79:
BTFSC STATUS+0, 0
GOTO L_main45
MOVLW 1
SUBWF _SetTemp+0, 0
MOVWF R1+0
CLRF R1+1
BTFSS STATUS+0, 0
DECF R1+1, 1
MOVLW 128
XORWF R1+1, 0
MOVWF R0+0
MOVLW 128
SUBWF R0+0, 0
BTFSS STATUS+0, 2
GOTO Lmain80
MOVF main_temperatura_L0+0, 0
SUBWF R1+0, 0
L
main80:
BTFSC STATUS+0, 0
GOTO L_main45
Lmain71:
;TempControl.c,189 :: luz=0;
BCF RA0_bit+0, BitPos(RA0_bit+0)
;TempControl.c,190 :: vent=0;
BCF RD0_bit+0, BitPos(RD0_bit+0)
;TempControl.c,191 :: }
L_main45:
L_main42:
L_main40:
;TempControl.c,192 :: tecla=keyboard();
CALL _keyboard+0
MOVF R0+0, 0
MOVWF main_tecla_L0+0
;TempControl.c,193 :: if(tecla!=0x20)
MOVF R0+0, 0
XORLW 32
BTFSC STATUS+0, 2
GOTO L_main46
;TempControl.c,195 :: if(tecla==0x2a)//programacion de SET point
MOVF main_tecla_L0+0, 0
XORLW 42
BTFSS STATUS+0, 2
GOTO L_main47
;TempControl.c,196 :: { Lcd_Cmd(_LCD_CLEAR);
MOVLW 1
MOVWF FARG_Lcd_Cmd_out_char+0
CALL _Lcd_Cmd+0
;TempControl.c,197 :: Lcd_out(1,1,"TEMP. Set point");
MOVLW 1
MOVWF FARG_Lcd_Out_row+0
MOVLW 1
MOVWF FARG_Lcd_Out_column+0
MOVLW ?lstr3_TempControl+0
MOVWF FARG_Lcd_Out_text+0
CALL _Lcd_Out+0
;TempControl.c,198 :: delay_ms(600);
MOVLW 4
MOVWF R11+0
MOVLW 12
MOVWF R12+0
MOVLW 51
MOVWF R13+0
L_main48:
DECFSZ R13+0, 1
GOTO L_main48
DECFSZ R12+0, 1
GOTO L_main48
DECFSZ R11+0, 1
GOTO L_main48
NOP
NOP
;TempControl.c,199 :: id=0;
CLRF main_id_L0+0
;TempControl.c,200 :: cont=0;
CLRF main_cont_L0+0
;TempControl.c,201 :: while(id==0)
L_main49:
MOVF main_id_L0+0, 0
XORLW 0
BTFSS STATUS+0, 2
GOTO L_main50
;TempControl.c,203 :: tecla=keyboard();
CALL _keyboard+0
MOVF R0+0, 0
MOVWF main_tecla_L0+0
;TempControl.c,205 :: if(tecla==0x23)
MOVF R0+0, 0
XORLW 35
BTFSS STATUS+0, 2
GOTO L_main51
;TempControl.c,206 :: {id=1;
MOVLW 1
MOVWF main_id_L0+0
;TempControl.c,207 :: SetTemp=write_ee(Ct,Dt,Ut);
MOVF main_Ct_L0+0, 0
MOVWF FARG_write_ee_Ctemp+0
MOVF main_Dt_L0+0, 0
MOVWF FARG_write_ee_Dtemp+0
MOVF main_Ut_L0+0, 0
MOVWF FARG_write_ee_Utemp+0
CALL _write_ee+0
MOVF R0+0, 0
MOVWF _SetTemp+0
;TempControl.c,208 :: cont=0;
CLRF main_cont_L0+0
;TempControl.c,209 :: delay_ms(500);
MOVLW 3
MOVWF R11+0
MOVLW 138
MOVWF R12+0
MOVLW 85
MOVWF R13+0
L_main52:
DECFSZ R13+0, 1
GOTO L_main52
DECFSZ R12+0, 1
GOTO L_main52
DECFSZ R11+0, 1
GOTO L_main52
NOP
NOP
;TempControl.c,210 :: }
GOTO L_main53
L_main51:
;TempControl.c,211 :: else if(cont==0 && tecla!=0x45 && tecla!=0x46 && tecla!=0x47 && tecla!=0x48 && tecla!=0x20)
MOVF main_cont_L0+0, 0
XORLW 0
BTFSS STATUS+0, 2
GOTO L_main56
MOVF main_tecla_L0+0, 0
XORLW 69
BTFSC STATUS+0, 2
GOTO L_main56
MOVF main_tecla_L0+0, 0
XORLW 70
BTFSC STATUS+0, 2
GOTO L_main56
MOVF main_tecla_L0+0, 0
XORLW 71
BTFSC STATUS+0, 2
GOTO L_main56
MOVF main_tecla_L0+0, 0
XORLW 72
BTFSC STATUS+0, 2
GOTO L_main56
MOVF main_tecla_L0+0, 0
XORLW 32
BTFSC STATUS+0, 2
GOTO L_main56
L
main70:
;TempControl.c,212 :: { cont+=1;
INCF main_cont_L0+0, 1
;TempControl.c,213 :: Ct=tecla;
MOVF main_tecla_L0+0, 0
MOVWF main_Ct_L0+0
;TempControl.c,214 :: Lcd_chr(2,6,Ct);
MOVLW 2
MOVWF FARG_Lcd_Chr_row+0
MOVLW 6
MOVWF FARG_Lcd_Chr_column+0
MOVF main_tecla_L0+0, 0
MOVWF FARG_Lcd_Chr_out_char+0
CALL _Lcd_Chr+0
;TempControl.c,215 :: delay_ms(500);
MOVLW 3
MOVWF R11+0
MOVLW 138
MOVWF R12+0
MOVLW 85
MOVWF R13+0
L_main57:
DECFSZ R13+0, 1
GOTO L_main57
DECFSZ R12+0, 1
GOTO L_main57
DECFSZ R11+0, 1
GOTO L_main57
NOP
NOP
;TempControl.c,216 :: }
GOTO L_main58
L_main56:
;TempControl.c,217 :: else if(cont==1 && tecla!=0x45 && tecla!=0x46 && tecla!=0x47 && tecla!=0x48 && tecla!=0x20)
MOVF main_cont_L0+0, 0
XORLW 1
BTFSS STATUS+0, 2
GOTO L_main61
MOVF main_tecla_L0+0, 0
XORLW 69
BTFSC STATUS+0, 2
GOTO L_main61
MOVF main_tecla_L0+0, 0
XORLW 70
BTFSC STATUS+0, 2
GOTO L_main61
MOVF main_tecla_L0+0, 0
XORLW 71
BTFSC STATUS+0, 2
GOTO L_main61
MOVF main_tecla_L0+0, 0
XORLW 72
BTFSC STATUS+0, 2
GOTO L_main61
MOVF main_tecla_L0+0, 0
XORLW 32
BTFSC STATUS+0, 2
GOTO L_main61
Lmain69:
;TempControl.c,218 :: { cont+=1;
INCF main_cont_L0+0, 1
;TempControl.c,219 :: Dt=tecla;
MOVF main_tecla_L0+0, 0
MOVWF main_Dt_L0+0
;TempControl.c,220 :: Lcd_chr(2,7,Dt);
MOVLW 2
MOVWF FARG_Lcd_Chr_row+0
MOVLW 7
MOVWF FARG_Lcd_Chr_column+0
MOVF main_tecla_L0+0, 0
MOVWF FARG_Lcd_Chr_out_char+0
CALL _Lcd_Chr+0
;TempControl.c,221 :: delay_ms(500);
MOVLW 3
MOVWF R11+0
MOVLW 138
MOVWF R12+0
MOVLW 85
MOVWF R13+0
L_main62:
DECFSZ R13+0, 1
GOTO L_main62
DECFSZ R12+0, 1
GOTO L_main62
DECFSZ R11+0, 1
GOTO L_main62
NOP
NOP
;TempControl.c,222 :: }
GOTO L_main63
L_main61:
;TempControl.c,223 :: else if(cont==2 && tecla!=0x45 && tecla!=0x46 && tecla!=0x47 && tecla!=0x48 && tecla!=0x20)
MOVF main_cont_L0+0, 0
XORLW 2
BTFSS STATUS+0, 2
GOTO L_main66
MOVF main_tecla_L0+0, 0
XORLW 69
BTFSC STATUS+0, 2
GOTO L_main66
MOVF main_tecla_L0+0, 0
XORLW 70
BTFSC STATUS+0, 2
GOTO L_main66
MOVF main_tecla_L0+0, 0
XORLW 71
BTFSC STATUS+0, 2
GOTO L_main66
MOVF main_tecla_L0+0, 0
XORLW 72
BTFSC STATUS+0, 2
GOTO L_main66
MOVF main_tecla_L0+0, 0
XORLW 32
BTFSC STATUS+0, 2
GOTO L_main66
L
main68:
;TempControl.c,224 :: { cont+=1;
INCF main_cont_L0+0, 1
;TempControl.c,225 :: Ut=tecla;
MOVF main_tecla_L0+0, 0
MOVWF main_Ut_L0+0
;TempControl.c,226 :: Lcd_chr(2,8,Ut);
MOVLW 2
MOVWF FARG_Lcd_Chr_row+0
MOVLW 8
MOVWF FARG_Lcd_Chr_column+0
MOVF main_tecla_L0+0, 0
MOVWF FARG_Lcd_Chr_out_char+0
CALL _Lcd_Chr+0
;TempControl.c,227 :: delay_ms(500);
MOVLW 3
MOVWF R11+0
MOVLW 138
MOVWF R12+0
MOVLW 85
MOVWF R13+0
L_main67:
DECFSZ R13+0, 1
GOTO L_main67
DECFSZ R12+0, 1
GOTO L_main67
DECFSZ R11+0, 1
GOTO L_main67
NOP
NOP
;TempControl.c,228 :: }
L_main66:
L_main63:
L_main58:
L_main53:
;TempControl.c,229 :: }
GOTO L_main49
L_main50:
;TempControl.c,230 :: Lcd_Cmd(_LCD_CLEAR);
MOVLW 1
MOVWF FARG_Lcd_Cmd_out_char+0
CALL _Lcd_Cmd+0
;TempControl.c,231 :: BCD(SetTemp,2);
MOVF _SetTemp+0, 0
MOVWF FARG_BCD_aux+0
CLRF FARG_BCD_aux+1
MOVLW 2
MOVWF FARG_BCD_opcion+0
CALL _BCD+0
;TempControl.c,232 :: }
L_main47:
;TempControl.c,233 :: }
L_main46:
;TempControl.c,234 :: }
GOTO L_main37
;TempControl.c,235 :: }
L_end_main:
GOTO $+0
; end of _main

Conclusiones.

Se pudo concluir que por el tipo de control solo se pudo medir dos estados, ya que en un sensor de temperatura solo mediriamos 0ºC o 100ºC ,si nuestra temperatura actual estuviera entre estos dos valores no nos enteraríamos, por esta razón se programo el ADC el cual ya esta includio en estos microntroladores los cuales suelen tener convertidores de entre 8 y 16 bits.
Con un microcontrolador con entrada analógica nos quitamos muchos dolores de cabeza y problemas en el circuito integrado al tener menos componentes.

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License