Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: Fello en 25 de Junio de 2007, 10:05:32
Título: Me podrías ayudar con un medidor de temperatura con LM35 Y pic16F877A
Publicado por: Fello en 25 de Junio de 2007, 10:05:32
Casualmente encontré este foro, trato de buscar un programa que me permita observar la temperatura en un dos displays o una pantalla LCD. La temperatura la obtengo de un LM35, usare dos amplificadores operacionales y un 16f877A, el programa deseado es en lenguaje ensamblador.
Mi correo es: areyes@jumex.com.mx
Título: Re: Me podrías ayudar con un medidor de temperatura con LM35 Y pic16F877A
Publicado por: RedPic en 25 de Junio de 2007, 10:14:16
Fello:
En la parte superior derecha de la página del foro hay un icono de Una Lupa, junto a él hay un Campo de Edición vacío y junto a éste un Botón con el texto Buscar.
Escribe la palabra LM35 en el campo de edición y pulsa, con el ratón, sobre el botón Buscar.
Te aparecerán centenares de Post acerca del LM35, caracteristicas técnicas, su conexionado, el uso y disfrute del LM35, programas que usan y abusan del LM35, hechos en varios tipos de C, en ASM o en Nipple, para PIC's de 8 y 16 bits, con el 16F877, con el 16F84, con el 18F876A incluso .... con el LM35 sólo o acompañado de LDR's, con y sin voltajes de referencia, con y sin operacionales .....
Todo lo que usted quiso saber sobre el LM35 y nunca (hasta ahora) se atrevió a preguntar.
En fin, que tampoco se ha leído usted las Reglas del Foro (http://www.todopic.com.ar/foros/index.php?action=globalAnnouncements;id=1) de las cuales la primera es .... Busca antes de preguntar (es una lástima que tenga que ser así pero por algún lado tenemos que empezar)
Título: Re: Me podrías ayudar con un medidor de temperatura con LM35 Y pic16F877A
Publicado por: Giovanny en 25 de Junio de 2007, 17:04:42
totalmente de acuerdo redpic, así debe ser
Título: Re: Me podrías ayudar con un medidor de temperatura con LM35 Y pic16F877A
Publicado por: flacoclau en 25 de Junio de 2007, 17:18:30
Hola Fello acá te dejo un link que te puede servir, por lo demás coincido con el amigo Redpic. suerte con la búsqueda y con los libros. ;-)
Título: Re: Me podrías ayudar con un medidor de temperatura con LM35 Y pic16F877A
Publicado por: J1M en 25 de Junio de 2007, 17:24:48
Macho les has mandado a todos un privado con tu 'necesidad' ??? que barbaridad...............................
Título: Re: Me podrías ayudar con un medidor de temperatura con LM35 Y pic16F877A
Publicado por: Normando en 26 de Junio de 2007, 11:31:24
Si, a mi tambien me mando un privado.....o ¿pirado?....cómo se dice?
Título: Re: Me podrías ayudar con un medidor de temperatura con LM35 Y pic16F877A
Publicado por: Fello en 26 de Junio de 2007, 17:29:54
RedPic, veo que eres moderador de este foro, y das por hecho que no leí las reglas, pero no es así, he leido cada una de ellas y también estuve revisando algo alrededor del LM35, pero no encontré lo que buscaba, por eso extendí mi pregunta en público ya que en privado no encontré respuestas favorables.
flacoclau gracias por el linck, me es de gran ayuda.
normando y J1M entiendo su incapacidad de poderme ayudar, gracias de todos modos.
Aprecio cualquiér ayuda o linck que me puedan proporcionar.
Fello
Título: Re: Me podrías ayudar con un medidor de temperatura con LM35 Y pic16F877A
Publicado por: mariano_pic en 26 de Junio de 2007, 18:53:03
Parese que el amigo fello nesesita que alguien le haga el trabajo.
Pero hay que recordar que este es un foro de alluda en donde las personas hasen preguntas aserca de problemas puntuales que tengan. Y debe de entender que nadie va ha ponerse a resolverle todo un trabajo en especial. Muchas personas que estan aca tienen ocupaciones trabajan o estudian y estan dispuestos a colaborar pero para obtener la ayuda hay que saber pedirla hasiendo una pregunta consisa y puntual, o buscar primero por todo el foro.
Amigo debes ponerte a estudiar, estoy seguro qu puedes resolver tu problema.
un saludo
Título: Re: Me podrías ayudar con un medidor de temperatura con LM35 Y pic16F877A
Publicado por: J1M en 26 de Junio de 2007, 19:53:12
Won't you help to sing these songs of freedom? 'Cause all I ever have... Redemption songs, Redemption songs.
Título: Re: Me podrías ayudar con un medidor de temperatura con LM35 Y pic16F877A
Publicado por: RedPic en 27 de Junio de 2007, 02:12:39
... un programa que me permita observar la temperatura en un dos displays o una pantalla LCD. La temperatura la obtengo de un LM35, usare dos amplificadores operacionales y un 16f877A, el programa deseado es en lenguaje ensamblador.
Bien, Fello, bien ... leo que has leído las normas y ya has buscado sin encontrar, entonces podemos continuar ...
¿Que parte del programa no sabes hacer? ¿La lectura del LM35 mediante una conversión AD? ¿Las conversiones AD en general o la del LM35 en particular? ¿El driver para un par de Displays de 7 segmentos? ¿Cátodo o Ánodo común? ¿Con o sin driver? ¿el del LCD? ¿16x2? ¿20x4? ¿Gráfico? ¿Paralelo con 4 u 8 bits? ¿SPI? ¿Conoces cada uno de estos temas pero te falta integrarlo todo en uno? ¿Conoces el 16F877A, sus posibilidades y sus carencias? ¿Sabes ensamblador de PIC? ¿Tienes las herramientas Soft, (MPLAB y MASM) y Hard (Programador de PIC's) para hacer el trabajo?
¿Qué has hecho hasta ahora y qué te falta?
Porque sería mucha casualidad, rayana a la imposibilidad estádistica, que alguno de nuestros amables foreros tenga realizado un programa en ensamblador para leer la temperatura con un LM35 con dos operacionales y que muestre el resultado en un par de displays o en un LCD usando un 16F877A esperando a que alguien lo pida y pueda gentílmente ofrecerselo para su descarga.
Es mucho mas probable que haya que hacerlo. Y sospecho que entre nuestros mas de ocho mil foreros hay alguno que otro que sabría hacerlo y que podría ayudarte en tu tarea si tienes la gentileza de decirnos qué asunto es el que impide completar tu proyecto.
Un saludo y adelante, que tú puedes. :mrgreen:
Título: Re: Me podrías ayudar con un medidor de temperatura con LM35 Y pic16F877A
Publicado por: microcom en 27 de Junio de 2007, 16:28:01
fello que necesitas? que no entiendes? cual es tu nivel de estudios en pic? hasta donde vas en el programa? que caracterisdticas debe tener el programa? ??????????????
saludos
Título: Re: Me podrías ayudar con un medidor de temperatura con LM35 Y pic16F877A
Publicado por: Trev_11 en 29 de Junio de 2007, 17:42:16
Hola amigos,esta es mi primera participación en este foro...,mi inkietud es la sig.:estoy estudiando el módulo A/D del pic16f877 y lo que estoy haciendo como primer paso de un proyecto futuro para controlar la temperatura(mi idea es manejar una fuente de frio/calor incorporando un teclado,para programar las temperaturas limite,y un LCD como interface de programación y de constante visualización de la temperatura entregada por un LM335)es visualizar el código cargado en el par de regitros ADRES en tres displays de 7 segmentos,lo ke hago es pasar el valor de ADRES a decimal con la sig.rutina: CENTENAS movlw .100 subwf DATO,W ;DATO-100=W. btfss STATUS,C ;¿DATO es menor ke .100? goto DECENAS ;Si. movwf DATO ;No,salva el resto. incf centena,F goto CENTENAS DECENAS movlw .10 subwf DATO,W btfss STATUS,C ;¿DATO es menor ke .10? goto UNIDADES ;Si. movwf DATO ;Salva el resto. incf decena,F goto DECENAS UNIDADES movf DATO,W movwf unidad clrf DATO movlw .0 subwf ADRESH,W btfsc STATUS,Z ;¿ADRESH=.0? goto MUESTRA ;Si,no agrega nada. bien ese seria un primer paso..ahora bien no se como usar los datos de estos 3 registros sin tener ke realizar una multitud de comparaciones usando el carry para poder visualizar en los display valores de temperatura(digamos enteros en principio)ke sean función de estos valores..si alguien podria darme una idea les agradeceria mucho... :)
Título: Re: Me podrías ayudar con un medidor de temperatura con LM35 Y pic16F877A
Publicado por: Chaly29 en 30 de Junio de 2007, 11:42:56
Hola Trev_11, primero una recomendación, si en algun momento piensas ampliar hacia el uso de decimales te recomendaría que lo hagas desde un principio, ya que lluego es muy dificil "añadir" este detalle a un programa, claro está a menos que tengas pensado hacer todo nuevamente.
A tú pregunta:
Tú con la converción de binario a decimal ya tienes 3 datos: centena, decena y unidad, pues para representar esos 3 datos como un solo numero en un display LCD solo tienes que agregarle el valor 48 (decimal) a cada uno de ellos para convertirlos en un código ASCII que pueda interpretar el display, por ejemplo:
Primeramente cargas el decimal 48 en el reguistro W, luego sumas "centena" y W, el resultado lo almacenas en W para no alterar el valor de centenas, como tienes el resultado en W lo cargas al reguistro XXXX y por ultimo llamas a la sub-rutina que se encarga de enviar el dato presente en XXXX al display para que este sea representado.
Entonces si realisas este paso para los 3 reguistros que tenías luego de la convercion a BCD y representas los datos en posiciones consecutivas del display, en el mismo tendrás en la posición X= centenas, X+1= decenas y X+2= unidades, por lo tanto ya te queda el valor que tenías en el reguistro ADRES representado en el display de manera decimal.
Yo acostumbro hacerlo de esta manera:
Código: ASM
movlw .48;cargo el valor 48 decimal en el reguistro W
addwf centena,W ;sumo W con el reguistro centena, el resultado lo almaceno en W
call LCD_DATO ;llamo a la sub-rutina LCD_DATO
movlw .48
addwf decena,W
call LCD_DATO
movlw .48
addwf unidad,W
call LCD_DATO
LCD_DATO es la sub-rutina de envio de un dato al display, esta sub-rutina toma el dato a enviar del reguistro W.
Espero te sea de ayuda.
Un saludo.
Atte. CARLOS.
Título: Re: Me podrías ayudar con un medidor de temperatura con LM35 Y pic16F877A
Publicado por: Trev_11 en 30 de Junio de 2007, 14:33:54
Si...gracias Charly_29,bueno me parece bien lo ke dices,pero mi idea por ahora es no agregar el LCD hasta asegurarme de ke funciona con displays comunes para no complicar el programa(ya ke soy muy malo con los diagrama de flujo),yo hice mas o menos algo asi:mi idea era trabajar con el LM335 y representar en ultima instancia el valor de Tº en dos displays de 7 segmentos,numeros enteros sin decimales nada mas y positivos,digamos entre 0ºc y 50ºc,por ahora ke sea nada mas un sensor sin tomar ninguna decisión,a esto no he llegado aun,pero he podido representar en 3 displays de 7 segmentos el valor ke contiene el par de registros ADRES de 10 bits,mi programa terminado es el sig.:
;***************************************************************************************************************** ;Definiciones,vectores,blokes,configuración de puertos y macros * ;*****************************************************************************************************************
list p=16f877 #include <p16f877.inc> RADIX HEX GO_DONE EQU 2 ;Indica si termino la conversión(0). ADON EQU 0 ;Pone en marcha el modulo(1).
unidad EQU 20 decena EQU 21 centena EQU 22 DATO EQU 23 TIMER1 EQU 24
INICIO BANCO1 clrf TRISB clrf TRISC clrf TRISD movlw b'00001101' ;RA0 es una entrada funcionará como AN0. movwf TRISA ;RA1-5 funcionaran como salidas para las ref. call T_ADQUISICIÓN movlw b'10001111' ;Justificación a la derecha. movwf ADCON1 ;RA0/AN0 y todo lo demás es I/O Digital. BANCO0 movlw b'00000001' ;Pongo en marcha el modulo A/D y movwf ADCON0 ;el canal analogo a emplear será AN0. call T_ADQUISICIÓN bsf ADCON0,GO_DONE ;El módulo A/D esta operativo btfsc ADCON0,GO_DONE ;Ha finalizado la conversión? goto $-1 BANCO1 movf ADRESL,W call CONVERSION goto INICIO
CONVERSION BANCO0 clrf unidad clrf decena clrf centena movwf DATO CENTENAS movlw .100 subwf DATO,W ;DATO-100=W. btfss STATUS,C ;¿DATO es menor ke .100? goto DECENAS ;Si. movwf DATO ;No,salva el resto. incf centena,F goto CENTENAS DECENAS movlw .10 subwf DATO,W btfss STATUS,C ;¿DATO es menor ke .10? goto UNIDADES ;Si. movwf DATO ;Salva el resto. incf decena,F goto DECENAS UNIDADES movf DATO,W movwf unidad clrf DATO movlw .0 subwf ADRESH,W btfsc STATUS,Z ;¿ADRESH=.0? goto MUESTRA ;Si,no agrega nada. movlw .1 subwf ADRESH,W btfsc STATUS,Z ;¿ADRESH=.1? goto SUMA_256 ;Si,suma 2 a centena,5 a decena y 6 a unidad. movlw .2 subwf ADRESH,W btfsc STATUS,Z ;¿ADRESH=.2? goto SUMA_512 ;Si,suma 5 a centena,1 a decena y 2 a unidad. movlw .7 ;No,es = a .3,suma 7 a centena,6 a decena y 8 a unidad. addwf centena,F movlw .247 addwf centena,W ;Comprueba si la suma resulto en mas de .10 btfss STATUS,C goto $+2 ;No resulto mayor ke .10. movwf centena ;Resulto mayor ke .10 deja el resto en centena. movlw .6 addwf decena,F movlw .247 addwf decena,W btfss STATUS,C goto $+3 ;No resulto ser mayor ke .10. incf centena,F ;La suma superó el .10,incrementa la centena y deja el resto movwf decena ;en decena. movlw .8 addwf unidad,F movlw .247 addwf unidad,W btfss STATUS,C goto $+3 incf decena movwf unidad movlw .247 ;Se pregunta si desborda la decena. addwf decena,W btfss STATUS,C goto MUESTRA ;No desbordó,sale. movwf decena incf centena,F goto MUESTRA
SUMA_256 movlw .2 ;No,es = a .3,suma 2 a centena,5 a decena y 6 a unidad. addwf centena,F movlw .247 addwf centena,W ;Comprueba si la suma resulto en mas de .10 btfss STATUS,C goto $+2 ;No resulto mayor ke .10. movwf centena ;Resulto mayor ke .10 deja el resto en centena. movlw .5 addwf decena,F movlw .247 addwf decena,W btfss STATUS,C goto $+3 ;No resulto ser mayor ke .10. incf centena,F ;La suma superó el .10,incrementa la centena y deja el resto movwf decena ;en decena. movlw .6 addwf unidad,F movlw .247 addwf unidad,W btfss STATUS,C goto $+3 incf decena movwf unidad movlw .247 ;Se pregunta si desborda la decena. addwf decena,W btfss STATUS,C goto MUESTRA ;No desbordó,sale. movwf decena incf centena,F goto MUESTRA
SUMA_512 movlw .5 ;No,es = a .3,suma 5 a centena,1 a decena y 2 a unidad. addwf centena,F movlw .247 addwf centena,W ;Comprueba si la suma resulto en mas de .10 btfss STATUS,C goto $+2 ;No resulto mayor ke .10. movwf centena ;Resulto mayor ke .10 deja el resto en centena. movlw .1 addwf decena,F movlw .247 addwf decena,W btfss STATUS,C goto $+3 ;No resulto ser mayor ke .10. incf centena,F ;La suma superó el .10,incrementa la centena y deja el resto movwf decena ;en decena. movlw .2 addwf unidad,F movlw .247 addwf unidad,W btfss STATUS,C goto $+3 incf decena movwf unidad movlw .247 ;Se pregunta si desborda la decena. addwf decena,W btfss STATUS,C goto MUESTRA ;No desbordó,sale. movwf decena incf centena,F MUESTRA movf unidad,W call TABLA goto $+3 movwf DATO comf DATO,W movwf PORTC movf decena,W call TABLA goto $+3 ;Voy a trabajar con dispay's de catodo comun. movwf DATO ;Aca invierto todo para trabajar con display's comf DATO,W ;de anodo comun.Si trabajara con display's de catodo comun movwf PORTB ;salto estas 2 instrucciones. movf centena,W call TABLA goto $+3 movwf DATO comf DATO,W movwf PORTD goto INICIO
TABLA addwf PCL,F ;Suma al contador de programa el valor de offset,o sea,el valor del dígito. retlw 3F ;0 en código de 7 segmentos. retlw 06 retlw 5B retlw 4F retlw 66 retlw 6D retlw 7D retlw 07 retlw 7F retlw 6F
T_ADQUISICIÓN movlw .15 ;Le sobredimensiono y listo. movwf TIMER1 decfsz TIMER1,F goto $-1 return ;Pasaron algunas decenas de µseg.,retorna.
END
Ahora bien,del LM335 se ke entrega 10mv por ºK o sea ke a 0º entrega 10mv*273=2.73V y a 50º entregaria 10mv*(273+50)=3.23V lo cual pasado en terminos de ADRES me daria: 0ºC-------558 decimal aprox 50ºC-----660 decimal ,trazo la recta y obtengo esta ecuacion Cº=a*X+b=0.49*X-273, bien ahora no se como haria para pasar esto a ºC ke pueda representar en 2 display de 7 segmentos lo unico ke se me ocurre es juntar los datos de los 3 registros(centena,decena y unidad)en uno solo y asi poder seleccionar un decimal BCD concreto de una tabla de 50 retlw....si ya han pasado por estos problemas y desean iluminarme el craneo un poco se los agradecere mucho... :)
Título: Re: Me podrías ayudar con un medidor de temperatura con LM35 Y pic16F877A
Publicado por: Fello en 04 de Julio de 2007, 16:09:16
RedPic microcom
Anexo código
LIST P=16F877A #INCLUDE<P16F877A.INC> ;DECLARACION DE VARIABLES ;CONVERSOR ANALOGO DIGITAL DE ;CONVERSOR DE TEMPERATURA
CBLOCK 0x20
UNIDADES DECENAS CENTENAS CONVERSION REG1 REG2 REG3 PDel0 PDel1 NUMERO
FELLO1 ;HACE LA RESTA ENTRE EL POTENCIOMETRO MENOS EL SENSOR
movf REG2,W subwf REG1,W btfsc STATUS,C goto CHUCHO BSF PORTC,0 ; PRENDE EL MOTOR GOTO CHUCHO
; Se separa el valor en unidades, decenas y centenas
UDC MOVWF NUMERO clrf UNIDADES clrf DECENAS clrf CENTENAS restaCentenas movlw .100 subwf NUMERO, W btfss STATUS, C goto restaDecenas movwf NUMERO incf CENTENAS goto restaCentenas restaDecenas movlw .10 subwf NUMERO, W btfss STATUS, C goto restaUnidades movwf NUMERO incf DECENAS goto restaDecenas restaUnidades movf NUMERO, W movwf UNIDADES BSF PORTB,7 movf DECENAS, W call TABLA movwf PORTB call PDelay BCF PORTB,7 movf UNIDADES, W call TABLA movwf PORTB call PDelay
RETURN
END
Bueno, despúes de todo hasta aquí he podido llegar, pero no he podido correr el el circuito, las caracteristicas del proyecto son:
Mostrar en dos displays de anodo común la temperatura del LM35 y cuando llegue a cierta temperatura, que encienda un ventilador para bajar la temperatura. Eso es lo que se busca.
Espero me puedan ayudar a encontrar el problema.
Aprecio su ayuda.
Fello
Título: Re: Me podrías ayudar con un medidor de temperatura con LM35 Y pic16F877A
Publicado por: microcom en 04 de Julio de 2007, 18:57:22
fello por que no tomas adresl que te sale mas facil y ademas la temperatura sensada maxima seria de 125ªc
que es un temperatura buena a no se que pases de temperatura.
amigo aqui tienes un archivo que tal ves te sirva
el led puede ser el motor
saludos
Título: Re: Me podrías ayudar con un medidor de temperatura con LM35 Y pic16F877A
Publicado por: microcom en 04 de Julio de 2007, 19:02:53
ademas tienes que anadirle la otra rutina para el ra1 para el potenciiometro y restar. vamos a ver si sigo añadiendo esta otra rutina para ver
al parecer vamos a ver.
hasta..................
saludos.
Título: Re: Me podrías ayudar con un medidor de temperatura con LM35 Y pic16F877A
Publicado por: Fello en 05 de Julio de 2007, 10:46:40
microcom
Excelente ayuda.
La idea es que cuando exceda de cierta temperatura arranque el ventilador para que enfrie y cuando llegue a la temperatura baja se apague el motor que mueve el ventilador.
Estoy intentando llevar el archivo que me has enviado para que corra en un PIC16f877A pero me envía el siguiente error:
LES RRF CONVERSION,1
Este error, parece ser un comando irreconocible, ¿sabes que tengo que cambiar para que lo corra desde un 16F877A?
¿Es posible grabarlo directamente en el pic colocando todos los componentes en los pines correctos?
Gracias de antemano por tu ayuda.
Título: Re: Me podrías ayudar con un medidor de temperatura con LM35 Y pic16F877A
Publicado por: microcom en 05 de Julio de 2007, 17:06:38
claro amigo , lo que tienes que hacer combiar el encabazado y mirar que correspondan los registros en cada banco creo que no tendras problemas con solo cambiar el nombre del pic puesto que los bancos y registros del pic 16f877 son similares al pic 16f873.
aqui tienes el programa de los rao lm35 ; ra1 potenciometro ambos se simulan con potenciometro.........
al sobrepasar la temperatura al valor del potenciometro se activa el leds/(motor).
aunque veo en tu pprograma buenos aportes...solo que me qued´´o tiempo revisarlo.
se vissualiza la temperatura pera al hacerce ésta mayor que el potencimetro solo se activa el leds.
BTFSS BEN,0 ;esta instruccion es para extablecer los valores de temp; poten en cada canal rao :temp ra1: poten
primero se accede al canal0 despues al canal1
al ahver 850mv en rao es por que hay 85 grados C pero en la salida del adresl = aprox 170valor binario bcd.
por lo tanto al rotar este valor quedaria la 85 que es lo que se va a visualizar
lo mismo secede en ra1:
salida = 850/4.88= 174 al rotar ala izquierda: 86 aprox
MOVWF POTENCIOMETRO ;aqui se restan los valores de los respectivos canales RRF POTENCIOMETRO,0 SUBWF CONVERSION2,1 BTFSC STATUS,0 GOTO PRENDA
saludos
saludos
Título: Re: Me podrías ayudar con un medidor de temperatura con LM35 Y pic16F877A
Publicado por: microcom en 05 de Julio de 2007, 17:14:20
fello
si miras los multimetros en el ejemplo veras algo parecido..
si alguno tiene una ayuda por favor acepto las opiniones y sugerencias.ç
al pasar el codigo al mplab los errores son ortograficos o sea los comentarioss deben ir con ;
mira el data del pic 16f877 y veras que debes hacer pocos o nulos cambios al programas
LIST P=16F877A #INCLUDE<P16F877A.INC> saludos
Título: Re: Me podrías ayudar con un medidor de temperatura con LM35 Y pic16F877A
Publicado por: Trev_11 en 06 de Julio de 2007, 18:51:12
Hola..aca dejo mi programa terminado con el cual puedo medir la Tº entre los 0 y 100ºC,por si a alguno le interesa, si es asi y me ayudan a mejorarlo juntos mejor.Chau :-) ;***************************************************************************************************************** ;Descripción * ;***************************************************************************************************************** ;Este programa visualiza en 3 display de 7 segmentos el valor de Tº en ºC entregado por el sensor LM335. ;Rango de operacion:(2,442V-5V),(0-100ºC),sensibilidad:1/4º
;***************************************************************************************************************** ;Definiciones,vectores,blokes,configuración de puertos y macros * ;*****************************************************************************************************************
list p=16f877 #include <p16f877.inc> RADIX HEX GO_DONE EQU 2 ;Indica si termino la conversión(0). ADON EQU 0 ;Pone en marcha el modulo(1).
unidad EQU 20 decena EQU 21 centena EQU 22 DATO EQU 23 TIMER1 EQU 24 TEMPERATURA EQU 25
org 0 goto INICIO
BANCO0 macro bcf STATUS,RP0 bcf STATUS,RP1 endm
BANCO1 macro bsf STATUS,RP0 bcf STATUS,RP1 endm
BANCO2 macro bcf STATUS,RP0 bsf STATUS,RP1 endm
BANCO3 macro bsf STATUS,RP0 bsf STATUS,RP1 endm
#include <lcdiyda.lib> ;Rutina con los comandos de manejo del LCD.
INICIO BANCO1 clrf TRISC clrf TRISD BANCO0 call TEMPO2 ;Espero hasta ke se estabilicen los voltajes. movlw b'00000001' call LCDI ;Rutina ke indica modo comando. movlw b'00110000' call LCDI movlw b'00111000' call LCDI movlw b'00111100' call LCDI movlw b'00001100' call LCDI movlw b'00000110' call LCDI call TEMPO1 ;Fin de la inicialización del LCD. clrf TEMPERATURA STAR BANCO1 movlw b'00001101' ;RA0 es una entrada funcionará como AN0. movwf TRISA ;RA1-5 funcionaran como entradas para las ref. call T_ADQUISICIÓN movlw b'10001111' ;Justificación a la derecha. movwf ADCON1 ;RA0/AN0 y todo lo demás es I/O Digital. BANCO0 movlw b'00000001' ;Pongo en marcha el modulo A/D y movwf ADCON0 ;el canal analogo a emplear será AN0. call T_ADQUISICIÓN bsf ADCON0,GO_DONE ;El módulo A/D esta operativo btfsc ADCON0,GO_DONE ;Ha finalizado la conversión? goto $-1 ;No,espera. movlw .0 ;Si. subwf ADRESH,W btfsc STATUS,Z goto CUENTA_1 ;ADRESH=.0,o sea,Tº=(1/4.ADRESL)-29 movlw .1 subwf ADRESH,W btfss STATUS,Z goto Fuera_escala CUENTA_2 bcf STATUS,C ;El carry siempre arranca en 1,lo borro pa' ke no joda. BANCO1 ;ADRESH=.1,o sea,Tº=(1/4.ADRESL)+35 rrf ADRESL,W bcf STATUS,C BANCO0 movwf TEMPERATURA rrf TEMPERATURA,W bcf STATUS,C addlw .35 movwf TEMPERATURA call CONVERSION_II ;Descompone este registro en unidad,decena y centena goto STAR ;y almacena estos datos en los registros del mismo nombre. CUENTA_1 BANCO1 movlw .144 addwf ADRESL,W btfss STATUS,C goto Fuera_escala movlw .0 subwf ADRESL,W btfsc STATUS,Z goto Fuera_escala ;La tensión medida es inferior a 2,73V. bcf STATUS,C ;El carry siempre arranca en 1,lo borro pa' ke no joda. rrf ADRESL,W bcf STATUS,C BANCO0 movwf TEMPERATURA rrf TEMPERATURA,F bcf STATUS,C movlw .28 ;En realidad la ordenada=28,75 subwf TEMPERATURA,F call CONVERSION_II goto STAR
T_ADQUISICIÓN movlw .15 ;Le sobredimensiono y listo. movwf TIMER1 decfsz TIMER1,F goto $-1 return ;Pasaron algunas decenas de µseg.,retorna.
END
(http://)
Título: Re: Me podrías ayudar con un medidor de temperatura con LM35 Y pic16F877A
Publicado por: Trev_11 en 11 de Julio de 2007, 13:04:35
Aca posteo mi programa acabado para los que les interese y los que tienen alguna sugerencia para mejorarlo se agradece.Saludos a toos :)
;***************************************************************************************************************** ;Descripción * ;***************************************************************************************************************** ;Este programa visualiza en 3 display de 7 segmentos el valor de Tº en ºC entregado por el sensor LM335. ;Rango de operacion:(2,442V-5V),(0-100ºC),sensibilidad:1/4º
;***************************************************************************************************************** ;Definiciones,vectores,blokes,configuración de puertos y macros * ;*****************************************************************************************************************
list p=16f877 #include <p16f877.inc> RADIX HEX GO_DONE EQU 2 ;Indica si termino la conversión(0). ADON EQU 0 ;Pone en marcha el modulo(1).
unidad EQU 20 decena EQU 21 centena EQU 22 DATO EQU 23 TIMER1 EQU 24 TEMPERATURA EQU 25
org 0 goto INICIO
BANCO0 macro bcf STATUS,RP0 bcf STATUS,RP1 endm
BANCO1 macro bsf STATUS,RP0 bcf STATUS,RP1 endm
BANCO2 macro bcf STATUS,RP0 bsf STATUS,RP1 endm
BANCO3 macro bsf STATUS,RP0 bsf STATUS,RP1 endm
#include <lcdiyda.lib> ;Rutina con los comandos de manejo del LCD.
INICIO BANCO1 clrf TRISC clrf TRISD BANCO0 call TEMPO2 ;Espero hasta ke se estabilicen los voltajes. movlw b'00000001' call LCDI ;Rutina ke indica modo comando. movlw b'00110000' call LCDI movlw b'00111000' call LCDI movlw b'00111100' call LCDI movlw b'00001100' call LCDI movlw b'00000110' call LCDI call TEMPO1 ;Fin de la inicialización del LCD. clrf TEMPERATURA STAR BANCO1 movlw b'00001101' ;RA0 es una entrada funcionará como AN0. movwf TRISA ;RA1-5 funcionaran como entradas para las ref. call T_ADQUISICIÓN movlw b'10001111' ;Justificación a la derecha. movwf ADCON1 ;RA0/AN0 y todo lo demás es I/O Digital. BANCO0 movlw b'00000001' ;Pongo en marcha el modulo A/D y movwf ADCON0 ;el canal analogo a emplear será AN0. call T_ADQUISICIÓN bsf ADCON0,GO_DONE ;El módulo A/D esta operativo btfsc ADCON0,GO_DONE ;Ha finalizado la conversión? goto $-1 ;No,espera. movlw .0 ;Si. subwf ADRESH,W btfsc STATUS,Z goto CUENTA_1 ;ADRESH=.0,o sea,Tº=(1/4.ADRESL)-29 movlw .1 subwf ADRESH,W btfss STATUS,Z goto Fuera_escala CUENTA_2 bcf STATUS,C ;El carry siempre arranca en 1,lo borro pa' ke no joda. BANCO1 ;ADRESH=.1,o sea,Tº=(1/4.ADRESL)+35 rrf ADRESL,W bcf STATUS,C BANCO0 movwf TEMPERATURA rrf TEMPERATURA,W bcf STATUS,C addlw .35 movwf TEMPERATURA call CONVERSION_II ;Descompone este registro en unidad,decena y centena goto STAR ;y almacena estos datos en los registros del mismo nombre. CUENTA_1 BANCO1 movlw .144 addwf ADRESL,W btfss STATUS,C goto Fuera_escala movlw .0 subwf ADRESL,W btfsc STATUS,Z goto Fuera_escala ;La tensión medida es inferior a 2,73V. bcf STATUS,C ;El carry siempre arranca en 1,lo borro pa' ke no joda. rrf ADRESL,W bcf STATUS,C BANCO0 movwf TEMPERATURA rrf TEMPERATURA,F bcf STATUS,C movlw .28 ;En realidad la ordenada=28,75 subwf TEMPERATURA,F call CONVERSION_II goto STAR