Comparar valor de conversion con valor asignado

Estoy diseñando un sistema de control de temeperatura usando un PIC16f84, un LM35 con sensor de temperatura y un conversor AD0804, para tomar la lectura desde el LM35,

Lo he hecho funcionar por medio de una tabla y tomando en cuenta que los LM35 varian 1 mV por º celsius, pero quiero utilizar varios sensores pero no puedo usar una tabla para cada uno de ellos (se me coparia la memoria del PIC)

entonces quiero realizarle una calibracion con temparaturas conosidas, mostrarle un punto de partida ( o cero) y un punto mas alto que seria el span y grabar la comparacion en una memoria serial,

para usarla despues, pero no se como asignar a la conversion un valor real de temparatura o como fraccionar esa conversion guardada en la memoria para luego darle otros divisiones.

Necesito ayuda les agradezco.
 
que tal, yo te recomendaria un pic16f876, que tiene 4 convertidores analogico digital encapsulado dentro, asi puedes leer la medida directa del lm35 con el pic...
 
si lo he intentado pero solo me da una conversionde 10 bit y necesito por lo menos 12 y seria mejor de 16, por eso tambin estoy experimentando con un ad7714
 
OK, explico, en mi programa principal existen dos lineas de comando una en modo operacion y otro en modo configuracion, en donde ademas de programar un punto de temperatura para un actuador tengo una parte de calibracion, en donde ajusto los valores de un cero o punto de partida (una temperatura baja) y un span (temperatura alta) para luego realizar una operaciones matematicas para determinar cuanta conversiones representan una decima de grado celsius.

estoy usando un LM35 como dije pero quiero varios sensores, estos van conectados a un INA131 que lo amplifica 100 veces y me permite realizar una mejor conversion, como tambien mensione estoy utilizando varios conversores, entre los mas economicos hasta el ad7714 (que es mucho conversor para lo que necesito).

ya he realizado gran parte de programa pero no se como hacer para comparar un valor obtenido del conversor y el que esta grabado en la memoria de calibracion.


lo descirbo asi

calibrar
temperatura 1 = XX
temperatura 2 = YY
valor guardado= temperatura 2 - temperatura 1 / 10

en modo funcionamiento

cero = NN
valor obtenido del conversor = MM
diferecia = MM - NN
valor indicado = (diferencia / valor guardado ) º C

algo asi
 
newlin, solo a modo de sugerencia.

Usar A/D de 12 bits o más, no es cosa fácil.

No porque no sea simple usarlos, de hecho se usan igual que cualquier otro, el tema es que el ruido del circuito afecta mucho a los últmos bits de la medición y pierdes precisión y terminas logrando la misma precisión que con conversores de 10 bits.

Lograr buenas conversiones a 16 bits, donde cada bit realmnete sea fiable no es cosa sencilla, de hecho es hasta muy costoso.

Te doy un ejemplo:

Supongamos que tu rango de conversión es de 5 Voltios.

En 10 bits, tenemos 2^10 valores, es decir 1024 valores. Esto nos da una precisión de 5mV por bit

En 12 bits, tenemos 2^12 valores, es decir 4096 valores. Esto nos da una precisión de 1,22mV por bit

En 16 bits, tenemos 2^16 valores, es decir 65536 valores. Esto nos da una precisión de 76,3 uV por bit


Como te darás cuenta, 1 milivoltio o 76 microvoltios es un valor muuuy pequeño que con cualquier pequeña interferencia o una fuente mal filtrada lo tienes presente. También tienes que tener en cuenta el blindaje del cable con el que sensas, y así un montón de cosas.

Si usas un osciloscopio bueno, verás que 1mV de 'ripple' en una medición con circuitos digitales es muy común!. Incluso si la alimentación varía ese valor, tooodo se moverá 1mV.

Es por esto, que te sugiero replantees tu problema ya que en el caso de los 12 bits, tus ultimos 2 o 3 bits serán 'ruido' , y en 16 bits, tus últimos 5 o 6 bits...


Saludos
 
Atrás
Arriba