Autor Tema: Codificar valor LM35  (Leído 8366 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Kcesreb

  • PIC10
  • *
  • Mensajes: 7
Codificar valor LM35
« en: 09 de Enero de 2005, 23:00:00 »
Hola a todos.
Actualmente estoy realizando un termómetro digital con un sensor LM35, mi problema es que no he podido codificar el valor entregado por el sensor a un display 7 segmentos, en estos momentos estoy varado. Espero una ayuda, sugerencia u otra información. Agradezco mucho a quien atienda este mensaje.

PD. Trabajo con un PIC16F818, el LM35 conectado al AN0.

Desconectado ejmc

  • PIC18
  • ****
  • Mensajes: 311
RE: Codificar valor LM35
« Respuesta #1 en: 10 de Enero de 2005, 06:27:00 »
Hola KcesrebSonrisa
Como es tu programa?. El valor que tienes en la convercion del pic es proporcional a la tension. No se a que te refieres con codificar?. Creo que tendras que aclarar un poco mas

Desconectado Falconhunter

  • PIC12
  • **
  • Mensajes: 60
RE: Codificar valor LM35
« Respuesta #2 en: 10 de Enero de 2005, 16:39:00 »
Ahora mismo estoy tambien con un termometro con un LM35. Yo lo he conectado a un operacional para darle ganacia, pero aparece el problema de los limites de salida del operacional. No se como lo habras conectado ni que codigo estas usando. Danos un poco mas de detalle.

Desconectado Kcesreb

  • PIC10
  • *
  • Mensajes: 7
RE: Codificar valor LM35
« Respuesta #3 en: 11 de Enero de 2005, 15:24:00 »
Hi ejmc
"Como es tu programa?"
Por el momento no tengo programa.

"El valor que tienes en la convercion del pic es proporcional a la tension. No se a que te refieres con codificar?. "

Debe serlo puesto que el LM35 la salida es proporcional a la temperatura
(10mV/°C). Lo que busco es que este voltaje que entra al PIC lo interprete como la temperatura en un display, entonces del valor del conversor al 7 segmentos debería haber una codificación o conversión, es aqui donde estoy varado!!!!
Espero aclararte un poco, porque realmente estoy un poco desubicado.
Gracias por contestarme

Desconectado Kcesreb

  • PIC10
  • *
  • Mensajes: 7
RE: Codificar valor LM35
« Respuesta #4 en: 11 de Enero de 2005, 15:29:00 »
Hi Falconhunter

No quiero utilizar operacionales, pero de todas maneras que configuración tienes el Operacional y que ganancia?, el codigo pues realmente no lohe hecho, hasta ahora solo esta en diseño. No se más.
Gracias por responderme.

Desconectado fenix_jn

  • PIC18
  • ****
  • Mensajes: 418
RE: Codificar valor LM35
« Respuesta #5 en: 11 de Enero de 2005, 16:42:00 »
Ok, lo primero es decirte que el PIC, con un +Vref de 5V y -Vref de 0V, posee una resolucion de aprox 20 mV/bit (5V/256 Valores), para lograr tu objetivo de un grado centigrado deberas duplicar la lectura del LM35 usando (aunq no kieras) un amp operacional, de lo contrario tendras una resolucion de 2 grados C.

Acerca de la conversion, supongo q deseas convertir el valor binario que t da el ADRES y pasarlo a BCD (para q puedas pasarlo al display), existen una buena cantidad de esas rutinas aki en el foro en ASM, C y PBP, puedes usar el buscador que existe en este mismo foro para ubicar el tema. Lo unico q debes aclarar es como manejaras la salida a display, si mediante un 7447 (convertidor BCD a display 7 seg) o directamente con el PIC?.

Desconectado Kcesreb

  • PIC10
  • *
  • Mensajes: 7
RE: Codificar valor LM35
« Respuesta #6 en: 11 de Enero de 2005, 22:46:00 »
Hi fenix_jn

Bueno, me das una idea por lo menos, pero donde sale la resolucion de 20 mV/bit ?, no se puede relacionar con la del sensor 10 mV/°C?. Puedes aclararme esto un poco, si no te molesta.

Por otra parte la conversión es lo que necesito, convertir el valor binario del ADRESL al display, que en este caso es BCD, tienes toda la razón, no lo discuto, la visualización la haré por software (por multiplexación), no utilizaré 7447. Bueno por el momento no es más, trabajaré en eso.

Gracias por el dato, espero tu respuesta.


Desconectado kamehouse

  • PIC12
  • **
  • Mensajes: 55
RE: Codificar valor LM35
« Respuesta #7 en: 11 de Enero de 2005, 23:38:00 »
     

     ¡ HOLA Kcesreb !
   
  Espero responder a tu pregunta  :"pero donde sale la resolucion de 20mV/bit ?"

    lo que fenix_in quiso decir con resolucion de 20mV es que cada 20mV      
    aumentara un bit el valor del registro, donde el micro guarda el valor
    de la conversion ( no me acuerdo del registro donde se guarda este valor )
    en el 16f877 se guarda en los registros ADRESH:ADRESL  
   
    POR EJEMPLO: digamos que el registro donde se guarda el valor de la
    conversion en tu micro es el registro ADRESL que tiene un tamaño de
    8 bits esto es que puede tener valores desde 0 hasta 255,ahora supo-
    -niendo que le estas metiendo una señal analogica de 160mV al micro.
    despues de que el micro hace la conversion el resultado que tendra el
    registro ADRESL sera el siguiente "00001000" un 8 decimal ¿ por que ?
    160mV / 20mV = 8  la resolucion de tu micro es de aprox. 20mV por que
    +5V / 256 (tamaño del registro ADRESL) =19.5mV, no puedes relacionar
    directamente los 10mV del LM 35 por que por ejemplo si le metieras 10mV
    al pic "no habria conversion por que necesita de minimo 19.5mV para lograr la  
    conversion " asi que no habria conversion hasta que hubiera presente al menos
    19.5mV y despues necesitarias al menos otros 19.5mV para la segunda
    conversion .

    mira esta tabla :
   
    19.5mV------------1 bit       (nota que el incremento es cada 19.5mV)
       39mV------------2 bit
    58.5mV------------3 bit  

     espero haberte ayudado y no haberte hecho bolas

                KAMEHOUSE    




 
   
     

Desconectado ejmc

  • PIC18
  • ****
  • Mensajes: 311
RE: Codificar valor LM35
« Respuesta #8 en: 12 de Enero de 2005, 07:05:00 »
Hola a todosSonrisa
Un programa seria algo asi:

SENSA: promedio = 0
            for i=0 to 9
              grad = 0
              ADCON0.2 = 1
FINAL:    if ADCON0.2=1 then final
              grad.highbyte = ADRESH
              grad.lowbyte = ADRESL
              promedio = grad + promedio
           next i
           promedio = (50 * promedio )/ 1024
           for i=0 to 50
               lookup promedio DIG 1,[238,40,220,124,58,118,242,44,254,62],portb
               porta.7=1 : pause 3 : porta.7=0
               lookup promedio DIG 0,[238,40,220,124,58,118,242,44,254,62],portb
               porta.6=1 : pause 3 : porta.6=0
           next i
           GOTO SENSA
 
Bueno , esto es para un conversor a/d de 10bits (1024 cuentas). Si usas las Vref del PIC  a 0V y 5V, entonces para una entrada de 5V el valor de la convercion sera de 1024 (el maximo), si le metes 2.5V sera una cuenta de 512, osea regla de tres .
La resolucion esta dada por (Vmax - Vmin)/1024. En este caso:
   (5 - 0 ) / 1024 =  4.883 mV

Bueno ahora al programa que puse arriba:
En el primer for...next hago la convercion 10 veces para hacer el promedio
La operacion matematica que hago despues sale asi:
    10240_________________5V
   cuenta_________________ X= (5 * cuenta)/10240      V

0.01V    _________________ 1 grado
X  V      _________________   G = (X * 1)/0.01 grados = X * 100  grados

Reemplazando todo tenemos
G=temperatura= (50 * cuenta)/1024  --> valor de temperatura a mostrar

Por ultimo, en el ultimo for....next lo que hago es mostrar este numero en los display.
Espero que te sirva

Desconectado Falconhunter

  • PIC12
  • **
  • Mensajes: 60
RE: Codificar valor LM35
« Respuesta #9 en: 12 de Enero de 2005, 16:40:00 »
El problema de usar el LM35 directamente al ADC de 10 bits es que cada paso equivale a 5V/1024=0,48 ºC si Vref es 5 voltios, con lo que queda un fondo de escala de casi ¡¡500 ºC!!.
Yo pienso que el fondo de escala podria estar en 50ºC, para temperaturas ambiente.

A ver que os parece esto. A costa de sacrificar un puerto de entrada, se puede conectar una tension de referencia de por ejemplo 1 voltio con lo que da un fondo de escala de 100ºC y una resolucion de 1V/1024 = 0,00094 V casi casi 1 mV (si se quiere se puede poner 1,024 V de referencia) que son 0,1ºC, resulucion mas que valida.

Yo encuentro esta opcion para ganar en resolucion, poner una Vref, o conectar un operacional que amplifique la tension del LM35. ¿A alguien se le ocurre alguna cosa mas?

Desconectado fenix_jn

  • PIC18
  • ****
  • Mensajes: 418
RE: Codificar valor LM35
« Respuesta #10 en: 12 de Enero de 2005, 22:27:00 »
Ok, todo chevere, excepto por una cosa... cual PIC estas usando o vas a usar???, porq la resolucion y el fondo de escala y todo depende del conversor A/D, por ende, del PIC q vas a utilizar en tu proyecto...

Ah si, olvide mencionar que el valor de 20 mV/bit refiere a un conversor A/D de 8 bits usando las mencionadas referencias.

Desconectado ejmc

  • PIC18
  • ****
  • Mensajes: 311
RE: Codificar valor LM35
« Respuesta #11 en: 13 de Enero de 2005, 06:56:00 »
Pues si le pones una Vref+ de 1V y una Vref- de 0V mejor, la convercion sera mejor y veras que resultara mas estable. Un pic con a/d puede ser un 16f818, que es varato, tiene osc interno de hasta 8MHz, 15 pin deI/O y algo mas decia la cartaSonrisa Gigante

Desconectado Kcesreb

  • PIC10
  • *
  • Mensajes: 7
RE: Codificar valor LM35
« Respuesta #12 en: 13 de Enero de 2005, 21:22:00 »
Hola a todos.

Perdón por la demora, agradezco a Kamehouse, a Ejmc y a Falconhunter por las respuestas.

Bueno,  con la explicación de Ejmc con respecto al conversor A/D es correcto, estuve investigando sobre los conversores internos en el Manual de Referencia de Microchip, el conversor del PIC16F818 es de 10 Bits eso quiere decir que tiene 1023 valores reales, porque 1024 son 11 Bits desde el punto de vista digital (10000000000b), pero para cálculos se toma 1024. Ahora como la referencia es tomado con respecto a VDD y VSS, 5V y 0V respectivamente, la resolución en voltaje es:

(Vref+ - Vref-)/1024.

Y como lo definió Ejmc:

(5V – 0V)/1024 = 4.88mV

Esto quiere decir que cada paso es de 4.88mV. Bueno si el LM35 a temperatura ambiente tiene una salida de voltaje de 200mV, por decirlo, entonces que valor digital tendría el registro ADRESL?, yo lo relacionaría por una regla de tres simple así:

4.88mV ----------------> 1 Digital
200mV----------------->  X Digital

X = (200mV * 1 Digital)
                4.88mV

X = 40.98 ~= 40

Entonces 200mV es 40 digital (00101000b, 28h), teóricamente es factible, se evita el uso de un operacional y voltajes de referencia externos.

¿Que opinan ustedes?

Solo faltaría el proceso de visualización en el display 7 segmentos.

PD. Gracias Ejmc por el empujón, y solo como dato manejo assembler.

Desconectado ejmc

  • PIC18
  • ****
  • Mensajes: 311
RE: Codificar valor LM35
« Respuesta #13 en: 14 de Enero de 2005, 07:42:00 »
Las concluciones son correctas.........
Pero tambien fijate que si puedes poner la Vref+ a 2.5V mejor, lo haces con dos resistencias nomas y duplicas presicion

Desconectado Kcesreb

  • PIC10
  • *
  • Mensajes: 7
RE: Codificar valor LM35
« Respuesta #14 en: 18 de Enero de 2005, 22:51:00 »
Hola a los que están.

Bueno, por lo visto no hay ideas nuevas, aparte de Ejmc, retomando la info que presente anteriormente de la resolución de 4.88mV, descubrí la manera de presentar la temperatura real del LM35 sin Operacionales ni Vref externos, todo interno y sencillo.  Lo que se debe hacer es lo siguiente: Se almacena el valor del ADRESL a un registro X, por ejemplo para un voltaje de entrada de 200mV (20°C) este valor equivale a 40 digitalmente, OK, ahora teniendo este valor almacenado en el registro X lo divido en 2 que en assembler se rota a la derecha una vez, y listo el valor real del LM35, en este caso 20, matemáticamente:

Temp. = # Digital / 2

Pruébenlo y me comentan como les pareció la idea.

No es más, espero su participación.


 

anything