Autor Tema: Conversion a\d lm35  (Leído 5801 veces)

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

Desconectado Mol

  • PIC10
  • *
  • Mensajes: 6
Conversion a\d lm35
« en: 03 de Octubre de 2009, 15:45:31 »
Hola, estoy haciendo un proyecto (el primero) con un 16F876 y creo que me va bastante bien hasta que he llegado a la conversion de un sensor de temperatura.
Conozco (o eso creo) como funcionan los registros para configurar la conversion y los puertos adcon1 y 0.

En principio habia pensado en conectar el lm35 directamente a la patilla a3 del pic, pero he leido en el foro que recomiendan utilizar un AOP, ¿por qué?

Una vez que lo tengo conectado al pic y usando las tensiones de referencia Vdd y masa (no puedo usar otras porque estoy justisimo de pines, no me sobra ni uno solo jeje) se que a cada incremento de bit en adres le corresponde 4.8 mV, pero ¿cómo relaciono estos voltios con grados? ¿haciendo una macro-tabla?

Necesito tener la temperatura para operar con ella (restarle un valor que introduce el usuario) y tambien he de imprimirla en un lcd, pasando a decenas, centenas y un decimal. He encontrado este codigo buscando por el foro pero no acabo de entenderlo del todo... ¿pueden explicarlo un poco?


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.



Y la ultima duda que tengo es la de imprimir y trabajar un valor de temperatura negativo... Conozco algo como funciona el complemento a dos pero no se como es un un pic...

Muchisimas gracias de antemano!!!

Un saludo!

Desconectado isfan

  • PIC16
  • ***
  • Mensajes: 145
Re: Conversion a\d lm35
« Respuesta #1 en: 03 de Octubre de 2009, 18:48:46 »
Hola amigo te intentare responder a varias cuestiones:

1. puedes conectar el Sensor LM35 de las 2 maneras o directamente a la patilla a3 o con un A.O

Yo te recomiendo que lo haga sin el A.O, porque?

El A.O sirve para que el pic pueda procesar la información que le llega amplificada del LM35 con mas precisión con lo consiguiente la temperatura ( en decimales), sera más precisa.

Cosa que veo absurda para este modelo de Sensor ya que su presicion es de  +- 0,9 º

( es decir para que queremos procesar las decimas que tiene si la precisión del sensor no lo admite y va dar un resultado erroneo)
Sin el A.O podra medir con precisión de 0,5 º en 0,5 º (dentro tmb del rango de +-0,9º del funcionamiento del LM35)
 
2. Relacionar V con Cº: Haber la resolución que tiene cada bit procedente de la conversión tiene un valor que es en función de la referencia Vref.

Haci por ejemplo si Vref + = 5 V y vRef- = Tierra  entoces         5 - 0 = 5  = 5000 mv /1024 = 4,8 mv/bit

Por lo tanto los Conversores A/D de los PIC son de 10 bit, la entrada analogica para 0 v Corresponderia a 00 0000 0000 y para 5 V seria 11 1111 1111
   
si el sensor tiene por ejemplo 20 grados de temperatura pues daria una salida de -> 10 mv/ºC x 20 > 200 mv
Entoces  el pic depositaria en su conversor A/D de 10 bits esta información:

200 mv / 4,8 mv >  41,6mv lo que seria          00 0010 1001

Con esto hariamos la conversión con los registro  en el PIC y sacariamos el Valor por un LCD por ejemplo.

Sobre el codigo  ahora lo miro... que voy fatal de tiempo

Su ultima pregunta  el rango de trabajo de este Sensor esta Comprendido entre 0º y 100 º es decir no te permite Medir temperaturas negativas , para eso el LM335 trabaja con un rango de -40º a 100 º

Un saludo

Desconectado pelacable

  • PIC10
  • *
  • Mensajes: 38
Re: Conversion a\d lm35
« Respuesta #2 en: 09 de Octubre de 2009, 12:58:49 »
Hola MOL
 En éstos momentos estoy utilizando un LM35 HA que es de encapsulado metálico, el rango del HA es de -50ºC a +150ºc.

Lo tengo colocado en un dispositivo que mide temperaturas de-30ºC en forma permanente hace ya cuatro años sin parar.

El problema es que lo tengo con un voltímetro digital tipo ICL... midiendo directamente, y ahora que estoy con los PIC
tampoco encuentro una referencia que ayude con las tensiones negativas, supongo que en el foro ya estará explicado pero es muy grande, tiene muchos temas y a veces el buscador no me lleva a donde quiero.

Dicen que si uno no aporta soluciones, forma parte del problema, así que como los A/D de los PIC no tienen entrada diferencial, podrías utilizar un convertidor externo con entrada diferencial y acondicionar los valores para que cuando pase por cero invierta el exponente

Nota:(por lo menos los PIC que yo uso 12f675 y 16f877 no tienen entrada diferencial) :mrgreen:
si existen sería una solución fácil hay que ver la lista del fabricante.

El tema me interesa, si consigo algo para aprender te aviso  :P
 

Desconectado Mol

  • PIC10
  • *
  • Mensajes: 6
Re: Conversion a\d lm35
« Respuesta #3 en: 14 de Octubre de 2009, 08:28:19 »
Muchas gracias a los dos!!

Al final he puesto un lm35 dz que segun dice la hoja de caracteísticas va desde 0 a 100 grados, así que si lo conecto directamente y utilizo la tension de alimentacion 5V como referencia me da 0.1º por bit: 100/1024=0.98. con eso hago la conversion. (Si a alguien le interesa como lo hago puedo pasarle el codigo y explicarselo sin problema)

Ahora tengo otro problema y no logro resolverlo, he creado tablas de impresion haciendo

Tabla_mensajes  retlw  PCL
Mensaje_1  equ  $
                 dt  "Temp:",0x00

No me deja compilar el MPLAB, me da el siguiente error:

Error[151]   C:\PRUEBA\PRUEBAA.ASM 587 : Operand contains unresolvable labels or is too complex

He probado a cambiar dt por sucesivos
retlw  'T'
retlw  'e'
...

y me da el mismo error asi que tiene que ser por equ  $, como puedo resolverlo???

Muchisimas gracias por vuestro interes!!

Un saludo!



Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Conversion a\d lm35
« Respuesta #4 en: 14 de Octubre de 2009, 09:16:26 »
Revisa por aquí creación de tablas.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado Mol

  • PIC10
  • *
  • Mensajes: 6
Re: Conversion a\d lm35
« Respuesta #5 en: 23 de Octubre de 2009, 06:49:25 »
Hola, muchas gracias por el enlace a las LCD pero lo he mirado y no encuentro nada que me pueda responder...
De todas formas no se que pasa con el resto del programa porque creo qu esta todo bien pero si grabo las partes sueltas en un pic no hace absolutamente nada y no se que hacer

Les voy ha dejar el programa completo aqui por si alguien puede echarle un ojo, se lo agradecería muchisimo.
Es un poco complicado quiza ver su funcionamiento, tiene varios subprogramas asi que si alguien se anima a echerme una mano puedo enviarle todos los flujogramas. Mi direccion de correo es moldes167@hotmail.com

Se lo agrdezco mucho, un saludo!!

PD: no se si adjunto bien el archivo, si no es así por favor diganmelo

Desconectado Mol

  • PIC10
  • *
  • Mensajes: 6
Re: Conversion a\d lm35
« Respuesta #6 en: 24 de Octubre de 2009, 11:19:59 »
Hola de nuevo,

alguien sabe como pasar a la 2º linea del LCD?

yo hago

movlw  0x0c
call       LCD_REG

pero no hace caso...

lo estoy haciendo con proteus porque como ya os he dicho en un pic real me es imposible...

Muchas gracias!!

PD: sigue en pie la pregunta de equ $ para las tablas de mensajes, por si alguen lo sabe jeje

Un saludo!

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Conversion a\d lm35
« Respuesta #7 en: 24 de Octubre de 2009, 11:34:57 »
Es 0xC0 para pasar a linea 2.

Con respecto a tablas buscar por aquí.

Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado Mol

  • PIC10
  • *
  • Mensajes: 6
Re: Conversion a\d lm35
« Respuesta #8 en: 24 de Octubre de 2009, 11:49:17 »
Pues tampoco me funciona asi....

y el lcd pone que es 2x16, interpeto esto como que es de dos lineas verdad? ademas en el dibujo se ve como si hubiese otra vacia jejej


ahora voy a mirar el enlace

Gracias un saludo!!

Desconectado Mol

  • PIC10
  • *
  • Mensajes: 6
Re: Conversion a\d lm35
« Respuesta #9 en: 24 de Octubre de 2009, 14:40:55 »
Pues sigo sin encontrar ahí lo que quiero, porque lo haces de otra forma con LCD_putc. quiza este pero sea tan zoquete que no lo veo jeje.
Ya se hacerlo asi, lo que quiero es hacerlo con tablas para tener todos los mensajes juntos y referenciarlos de la forma:

Tabla   movwf    PCL
Mensaje1   equ  $
                 dt"   Hola",0x00

Despues cuando quiera imprimirlo simplemente hago:

movlw   Mensaje1
call       Imprime

Imprime es una rutina aparte que calcula el desplazamiente por Mensaje1, y ya ahi, imprime como haces tu hasta que llega a 0x00.

Lo que pasa es que MPLAB me da un error al compilarlo, dice: ERROR[151]: Operand contains unresolvable labels or is too complex.

He probado quitando "$" y lo compila pero supongo que no esta bien.

Gracias!!