TODOPIC

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. ;-)

http://www.todopic.com.ar/foros/index.php?topic=13389.msg77809#msg77809
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:

movlw        .48
addwf         centenas,W
movwf        XXXX
call             display_dato

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
  1. movlw   .48             ;cargo el valor 48 decimal en el reguistro W
  2.         addwf   centena,W       ;sumo W con el reguistro centena, el resultado lo almaceno en W
  3.         call    LCD_DATO        ;llamo a la sub-rutina LCD_DATO
  4.         movlw   .48
  5.         addwf   decena,W
  6.         call    LCD_DATO
  7.         movlw   .48
  8.         addwf   unidad,W
  9.         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.:

;*****************************************************************************************************************
;Descripción                                                                                                     *
;*****************************************************************************************************************



;*****************************************************************************************************************
;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


                 
                  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
                 
;*****************************************************************************************************************
;Progama principal.                                                                                              *
;*****************************************************************************************************************
                 
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
             
;*****************************************************************************************************************                 
;Subrutinas                                                                                                      *
;*****************************************************************************************************************

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      

ENDC
      ;BITS CONVERSOR
      
 
   ORG   0
      GOTO   INICIO


   
   TABLA   ADDWF   PCL,1
      RETLW   B'11000000'
      RETLW   B'11111001'
      RETLW   B'10100100'
      RETLW   B'10110000'
      RETLW   B'10011001'
      RETLW   B'10010010'
      RETLW   B'10000010'
      RETLW   B'11111000'
      RETLW   B'10000000'
      RETLW   B'10011000'
      RETLW   B'10111111'
      RETLW   B'11111111'
   
   
   ; Code generated by PDEL  ver 1.0  on 17/04/2007 at 12:21:18 a.m.
   ; Description: Waits 5000 cycles
   ;-------------------------------------------------------------
   PDelay  movlw     .6        ; 1 set number of repetitions (B)
           movwf     PDel0     ; 1 |
   PLoop1  movlw     .207      ; 1 set number of repetitions (A)
           movwf     PDel1     ; 1 |
   PLoop2  clrwdt              ; 1 clear watchdog
           decfsz    PDel1, 1  ; 1 + (1) is the time over? (A)
           goto      PLoop2    ; 2 no, loop
           decfsz    PDel0,  1 ; 1 + (1) is the time over? (B)
           goto      PLoop1    ; 2 no, loop
   PDelL1  goto PDelL2         ; 2 cycles delay
   PDelL2  clrwdt              ; 1 cycle delay
           return              ; 2+2 Done
   
   
      INICIO

      BSF      STATUS,5
      CLRF   TRISB
      CLRF   TRISC
      MOVLW   B'00000011'
      MOVWF   PORTA
      CLRF   ADCON1
      BCF      STATUS,5
      MOVLW   B'00000000'
      MOVWF   ADCON0
      CLRF   PORTB
      CLRF   PORTC

   
CHUCHO
   
   MOVLW   b'01000001' ; Canal 0
   MOVWF   ADCON0
   BSF      ADCON0,2

CHUCHO1

   BTFSC   ADCON0,2
   GOTO   CHUCHO1
   MOVF   ADRESH,W
   MOVWF   REG1
   
FELLO

   MOVLW   b'01001001' ; Canal 1
   MOVWF   ADCON0
   BSF      ADCON0,2

   
CHUCHO2

   BTFSC   ADCON0,2
   GOTO   CHUCHO2
   MOVF   ADRESH,W
   MOVWF   REG2
   MOVF   REG2,W
   MOVWF   NUMERO
   CALL   UDC
   
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.

;*****************************************************************************************************************
;Progama principal.                                                                                              *
;*****************************************************************************************************************
                 
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

;*****************************************************************************************************************                 
;Subrutinas                                                                                                      *
;*****************************************************************************************************************
                   
CONVERSION_II     BANCO0
                  clrf           unidad
                  clrf           decena
                  clrf           centena                 
CENTENAS          movlw          .100
                  subwf          TEMPERATURA,W              ;TEMPERATURA-100=W.
                  btfss          STATUS,C                   ;¿TEMPERATURA es menor ke .100?
                  goto           DECENAS                    ;Si.
                  movwf          TEMPERATURA                ;No,salva el resto.
                  incf           centena,F
                  goto           CENTENAS
DECENAS           movlw          .10
                  subwf          TEMPERATURA,W
                  btfss          STATUS,C                   ;¿TEMPERATURA es menor ke .10?
                  goto           UNIDADES                   ;Si.
                  movwf          TEMPERATURA                ;No,Salva el resto.
                  incf           decena,F
                  goto           DECENAS
UNIDADES          movf           TEMPERATURA,W
                  movwf          unidad
                  clrf           TEMPERATURA

MUESTRA           movlw          .128
                  call           LCDI
                  movlw          "T"
                  call           LCDC                       ;Rutina ke indica modo dato y saca el caracter.
                  movlw          "e"
                  call           LCDC
                  movlw          "m"
                  call           LCDC
                  movlw          "p"
                  call           LCDC
                  movlw          "e"
                  call           LCDC
                  movlw          "r"
                  call           LCDC
                  movlw          "a"
                  call           LCDC
                  movlw          "t"
                  call           LCDC
                  movlw          "u"
                  call           LCDC
                  movlw          "r"
                  call           LCDC
                  movlw          "a"
                  call           LCDC
                  movlw          "="
                  call           LCDC
                  movf           centena,W
                  sublw          .0
                  btfsc          STATUS,Z
                  goto           $+3
                  addlw          .48
                  call           LCDC
                  movf           decena,W
                  addlw          .48
                  call           LCDC
                  movf           unidad,W
                  addlw          .48
                  call           LCDC
                  movlw          b'01101111'
                  call           LCDC
                  movlw          "C"
                  call           LCDC
                  goto           STAR
Fuera_escala      movlw          .128
                  call           LCDI
                  movlw          "F"
                  call           LCDC
                  movlw          "u"
                  call           LCDC
                  movlw          "e"
                  call           LCDC
                  movlw          "r"
                  call           LCDC
                  movlw          "a"
                  call           LCDC
                  movlw          " "
                  call           LCDC
                  movlw          "d"
                  call           LCDC
                  movlw          "e"
                  call           LCDC
                  movlw          " "
                  call           LCDC
                  movlw          "e"
                  call           LCDC
                  movlw          "s"
                  call           LCDC
                  movlw          "c"
                  call           LCDC
                  movlw          "a"
                  call           LCDC
                  movlw          "l"
                  call           LCDC
                  movlw          "a"
                  call           LCDC
                  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.

;*****************************************************************************************************************
;Progama principal.                                                                                              *
;*****************************************************************************************************************
                 
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

;*****************************************************************************************************************                 
;Subrutinas                                                                                                      *
;*****************************************************************************************************************
                   
CONVERSION_II     BANCO0
                  clrf           unidad
                  clrf           decena
                  clrf           centena                 
CENTENAS          movlw          .100
                  subwf          TEMPERATURA,W              ;TEMPERATURA-100=W.
                  btfss          STATUS,C                   ;¿TEMPERATURA es menor ke .100?
                  goto           DECENAS                    ;Si.
                  movwf          TEMPERATURA                ;No,salva el resto.
                  incf           centena,F
                  goto           CENTENAS
DECENAS           movlw          .10
                  subwf          TEMPERATURA,W
                  btfss          STATUS,C                   ;¿TEMPERATURA es menor ke .10?
                  goto           UNIDADES                   ;Si.
                  movwf          TEMPERATURA                ;No,Salva el resto.
                  incf           decena,F
                  goto           DECENAS
UNIDADES          movf           TEMPERATURA,W
                  movwf          unidad
                  clrf           TEMPERATURA

MUESTRA           movlw          .128
                  call           LCDI
                  movlw          "T"
                  call           LCDC                       ;Rutina ke indica modo dato y saca el caracter.
                  movlw          "e"
                  call           LCDC
                  movlw          "m"
                  call           LCDC
                  movlw          "p"
                  call           LCDC
                  movlw          "e"
                  call           LCDC
                  movlw          "r"
                  call           LCDC
                  movlw          "a"
                  call           LCDC
                  movlw          "t"
                  call           LCDC
                  movlw          "u"
                  call           LCDC
                  movlw          "r"
                  call           LCDC
                  movlw          "a"
                  call           LCDC
                  movlw          "="
                  call           LCDC
                  movf           centena,W
                  sublw          .0
                  btfsc          STATUS,Z
                  goto           $+3
                  addlw          .48
                  call           LCDC
                  movf           decena,W
                  addlw          .48
                  call           LCDC
                  movf           unidad,W
                  addlw          .48
                  call           LCDC
                  movlw          b'01101111'
                  call           LCDC
                  movlw          "C"
                  call           LCDC
                  goto           STAR
Fuera_escala      movlw          .128
                  call           LCDI
                  movlw          "F"
                  call           LCDC
                  movlw          "u"
                  call           LCDC
                  movlw          "e"
                  call           LCDC
                  movlw          "r"
                  call           LCDC
                  movlw          "a"
                  call           LCDC
                  movlw          " "
                  call           LCDC
                  movlw          "d"
                  call           LCDC
                  movlw          "e"
                  call           LCDC
                  movlw          " "
                  call           LCDC
                  movlw          "e"
                  call           LCDC
                  movlw          "s"
                  call           LCDC
                  movlw          "c"
                  call           LCDC
                  movlw          "a"
                  call           LCDC
                  movlw          "l"
                  call           LCDC
                  movlw          "a"
                  call           LCDC
                  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