Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:
Hola a todos, llevo mucho tiempo sin escribir, aunque suelo seguir el foro, pero ya estoy muy oxidado y necesito algo de ayuda.
Veréis, quiero medir temperatura y poder guardarla en el pic o en una memoria externa si fuera necesario, pero no se que cantidad de memoria es la que necesito, o si la del pic me sirve.
Quiero usar un 16f88 con el oscilador interno, que he visto que tiene 256 bytes de memoria eeprom y un lm35.
Solo quiero hacer una medición de temperatura cada media hora durante un par de días, y que ese valor se guarde, no me hace falta ni fecha ni nada mas, solo eso, y que al desconectar la pila no pierda los datos, para después sacarlos.
¿como calculo cuanto ocuparan mis datos?¿como se sacan del pic después?
espero vuestra ayuda, gracias.
residente, me da que no lo tienes casi listo... Te falta bastante trabajo, algo de matemáticas y quizás algo de diseño analógico...
Vamos por partes, si configuras el ADC del PIC ( http://ww1.microchip.com/downloads/en/devicedoc/30487c.pdf " onclick="window.open(this.href);return false;) a 8 bits (con lo que las medidas ocupan la mitad que a 10 bit) tienes una resolución de 5V (referencia) / 256 (medidas)= 0.0195V. Como el LM35 ( http://www.ti.com/lit/ds/symlink/lm35.pdf " onclick="window.open(this.href);return false;) proporciona una salida de 0.01V (10mV) por grado centígrado es normal que tus medidas sean de de 2 en dos grados, no tienes mas resolución en el convertidor.
Solución a): Pasar el convertidor a 10 bit y tendrás una resolución de 5V (referencia) / 1024 (medidas)= 0.00488mV que es alrededor de medio grado, 2 bits más es 4 veces mas resolución, cuatro veces mas precisión. Sin embargo desperdicias la mayor parte de la escala ya que te mueves sólo de 0V a 0,4V cuando el convertidor puede medir de 0V a 5V
Solución b): Fijar el fondo de escala del convertidor en 0,4V (para 40 grados centígrados) o algún valor similar. Para eso puedes usar el "COMPARATOR VOLTAGE REFERENCE MODULE" (capítulo 14.0 del manual del PIC, página 129). De esta forma la precisión del convertidor sería (si fijamos la tensión de referencia del convertidor a 0,40624V): 0,40624V(referencia) / 256 (medidas)= 0.00158V es decir, casi una décima de grado. Así puedes mantener el convertidor en modo 8 bit y que las medidas opupen poco.
Segundo problema, el LM35 en configuración básica genera 10mV por grado centígrado desde 2 a 150 grados (figura 1 del manual del LM35, página 2). No puedes medir -10 grados así.
Solución a): Usar una fuente de tensión negativa de más de -0.01V y usar el esquema de la figura 2 del manual (en la página 2). Así puedes medir de -55 a +150 grados. Puede ser un problema montar un generador de tensión negativa, por complejidad y ruido. Además te obligaría a montar el convertidor del PIC con referencia -Vref a esa tensión negativa.
Solución b) Usar el esquema de la figura 7 (página 8 del manual del LM35). En este caso se genera una "masa flotante" 1,4 V por encima de masa (de forma que "parezca" que la masa es -1,4V). Entonces necesitas hacer la medida en modo diferencial (medir la salida + Vout y -Vout y restarlas. para eso tienes otras dos opciones:
Solución a): Referenciar vref- del ADC del PIC a -Vout, vref+ al fondo de escala escogido (5V, 0,4V o cualquier otro) y ya ya esta (solución preferida).
Solución b):Referenciar vref- del ADC del PIC a 0V, +V vref+ al fondo de escala escogido (5V, 0,4V o cualquier otro) y leer en una entrada +Vout y en otra -Vout para restarlas por programa (menos aconsejable).
Problema: la salida del "COMPARATOR VOLTAGE REFERENCE MODULE" es por Vref- (tienes que unir vref- con vref+ para la salida entre en el convertidor). Entonces no puedes usar a la vez la configuración de medida entre vref- y -vref+ y el "COMPARATOR VOLTAGE REFERENCE MODULE". Sí puedes prescindir de el y usar una referencia de tensión externa conectada en vref+
Estudiado un poco mas el problema, si tienes muchas dificultades te ayudamos otro poquito...
Hola:
No entiendo la manía que tiene la gente en usar el LM35. He estado trabajando durante años en sistemas de medición de temperatura (he diseñado hasta un registrador de temperatura!!), y todavía no entiendo las manías que hay en este tema (generalmente, Pt100 o LM35). Personalmente, donde esté una NTC, hace falta una buena razón técnica (rango de temperaturas, generalmentes) para poner otro tipo de sensor (recomiendo Pt1000 o termopar).
Al respecto, te recomiendo que busques un artículo que puse sobre introducción al DSP hecho sobre un sensor NTC (eso sí, con un AVR, en C, pero también en castellano) en la wikipedia de este foro. Es de lo más sencillo, y encima, si lo calibras, con una precisión mejor que cualquier LM35, a un precio incluso mejor.
Para almacenar datos, no me lo pensaría y usaría una EEPROM o una Flash externa por I2C o SPI (te recomiendo lo último), que están baratas y tienes espacio de sobras.
Lo primero gracias por la ayuda, poco a poco me voy aclarando(creo).
Heli, he consultado los pdfs como me has indicado, y de las posibilidades que me has dado voy a hacer esto:
Solución b): Fijar el fondo de escala del convertidor en 0,4V (para 40 grados centígrados) o algún valor similar. Para eso puedes usar el "COMPARATOR VOLTAGE REFERENCE MODULE" (capítulo 14.0 del manual del PIC, página 129). De esta forma la precisión del convertidor sería (si fijamos la tensión de referencia del convertidor a 0,40624V): 0,40624V(referencia) / 256 (medidas)= 0.00158V es decir, casi una décima de grado. Así puedes mantener el convertidor en modo 8 bit y que las medidas opupen poco.
Ya que prefiero tener menos precisión y poder guardar mas datos, tampoco me hace falta que sean -10º, la verdad que con que me mida a partir de 2º ya me vale, o al menos espero que si, así puedo seguir el esquema mas sencillo del lm35.
Entonces si uso el COMPARATOR VOLTAGE REFERENCE MODULE (RA2/AN2/CVREF/VREF- pin1) y le pongo 2.5v que lo podría hacer muy fácil con un divisor de tensión de dos resistencias iguales, tendría 2.5v(referencia)/256(medidas) = 0.0097 ~ 0.01, 1 grado de precisión. ¿correcto?
beamspot, bueno lo de usar el lm35 supongo que es por que hay mas información, yo hace poco use este mismo sensor en clase con un arduino, y por eso de volver a usarlo.
He estado revisando la wiki y no he encontrado el articulo, si puedes vincularlo para echarle un vistazo nunca está de mas.
Si con la memoria del micro tengo suficiente no quiero meter mas cosas, ya que tampoco he trabajado con el i2c y spi y por hacerlo lo mas sencillo posible.
Efectivamente, si pones la referencia a 2,5V tienes la mitad de escala, pero con las mismas 256 divisiones por lo que tienes el doble de resolución y llegas a un grado. Podrías usar 1,25V de referencia y medir de 0,5 en 0,5 grados, que es la precisión normal del LM35.
Para generar esta referencia no necesitas un divisor de tensión externo, el "COMPARATOR VOLTAGE REFERENCE MODULE" es exactamente eso: un divisor de tensión programable. Enh la figura 14.1 de la página 130 puedes ver su esquema eléctrico. (Me refiero al manual del PIC ref. DS30487C, en otras revisiones podrían variar lo números de página).
Para usar ese módulo tienes que programarlo así:
#device adc=8 // Convertidor en 8 bits
// En main:
setup_adc(ADC_CLOCK_INTERNAL);
setup_vref(0xE6); // Bit7=1 (CVREN, divisor activado); Bit6=1 (CVROE, salida por VREF-); Bit5=1 (CVRR, escala baja); CVR<3:0>=6
// Con CVRR=0 y CVR<3:0>=6 tienes CVREF = (6/24) • (5V) = 1,25V
// Recuerda unir la salida VREF- con la enrada VREF+
setup_adc_ports (sAN0|VSS_VREF) // Solo usas la entrada 0 y mides desde VSS hasta VREF+ (que has puesto a 1,25V mediante la salida VREF-)
Entonces la fórmula para convertir en grados las medidas es grados = (medida * 1250)/255 la salida es en punto fijo con un decimal, es decir, te dará 10 para 1.0 grados, 105 para 10.5 grados etc.
Como "medida * 1250" se e va fuera de un int16 enseguida y tendrías que usar un int32 puedes dividr numerador y denominador entre 5: grados = (medida * 250)/51 que da el mismo resultado pero ningún cálculo intermedio tiene mas de 16 bits...
Por supuesto si la conversión la haces fuera del micro, en un PC por ejemplo, no tienes esos problemas y puedes usar float alegramente: grados = (medida * 1.25)/255 la salida sería directamente grados en punto flotantel.
Editado: corrijo setup_adc_ports(... para esta versión concreta de PIC
http://wiki.webdearde.com/index.php?title=Introduccion_al_DSP:_Medida_y_filtrado_de_temperaturas_con_NTC " onclick="window.open(this.href);return false;
Me ha costado algo de encontrar, aunque con Introducción me ha salido. Con DSP o NTC, el buscador me decía que nastis de plastis.
Si te interesa hacer algo con esto, házmelo saber. Está chupao.