Hola, fui a elko, compre un HIH4000-3, mmm 147 con el IVA, no tenian el -1 el -3 es mas preciso, pero realmente con el otro alcanzaba y salia 100, pense que estaba 90 porque calcule con el IVA al 10.5% pero me cobraron el 21%, no deberia de ser 10.5%.
Por otro lado uso el ADC en 8 bits, estoy usando CCS, la conversion a volts depende de mi fuente o la dejo en 5V por default?
Leo el ADC lo guardo en q0
TensionHIH = (q0 * 5.0 / 255)
mi fuente esta entregando 5.33v que valor pongo???
por otro lado la variacion de humedad es cada 31mv, pero tomando el promedio de 100 valores, varia la lectura del adc en 1 no queda clavada, cada incremento en el ADC de 1 en 1 me hace variar 20mv con redondeo haca arriba.
Es mucha variacion? deberia mantenerse, tengo cap de 100nf entre Vcc y vdd en el PIC el USB y el LCD y en vcc y gnd en los medidores.
me doy por satisfecho o no?
Gracias Velazquezbio
Hola Velazquezbio. Decidí dividir el tema porque es interesante tratar este tema por separado para futuros usuarios que tengan el mismo problema y quieran aportar algo más.
CitarPor otro lado uso el ADC en 8 bits, estoy usando CCS, la conversion a volts depende de mi fuente o la dejo en 5V por default?
Me parece que tienes un error de concepto o yo no te entendí.
En el pic tienes dos maneras de tomar la tensión de referencia para el ADC, usando la alimentación de la fuente (la que le llega al pic) o desde dos pines para la tensión +Vref y -Vref.
Si selecciona la fuente, el ADC hará la conversión con la tensión de referencia que le llega al pic. En tu caso de 0 a 5,33V (no de 0 a 5V) La otra opción que tienes, es utilizar los pines o el pin +Vref para entregarle 5V a través y mantenerle esta tensión con un regulador de precisión. Me parece que por esos 0,33V de diferencia, el regulador no podrá trabajar, para resolver ese problema, si cuentas con una tensión de 7, 8, 9, 10, 11, o 12V puedes conectar esa tensión al regulador para que te entregue 5V sin importar la tensión que le llega al PIC.
Ahora bien, en cuanto a la fórmula, te convendrá usar el valor de la tensión de referencia, si utilizas la opción de la fuente, te sugiero que coloques 5,33 en la fórmula. Lamentablemente, al trabajar con decimales, le impondrá al CP del PIC una carga pesada tardando en realizar la cuenta. Trabajar con decimales, es trabajar con dos cifras independiente en un mismo número, ¿me explico? primero se resuelve los decimales y luego se hacen los acarreos al entero (si corresponde) para luego resolver el entero. Como te darás cuenta, el trabajo es el doble.
También lo que puedes hacer, es colocar un potenciómetro conectado a la fuente y al pin +Vref. Eliges que el ADC tome como refencia positiva el pin +Vref y luego, para colocarlo a punto tienes una opción muy precisa y muy fácil. Colocas al sensor en una masa de aire saturada y regulas el potenciómetro hasta que llegue a sensar 100% de humedad.
Bien, gracias, la verdad pense que iba por ese lado, el tema es que el dipositivo lo estoy haciendo portatil. tengo un conversor a/d midiendo la bateria en el ciclo de lectura de los sensores, eso solucionaria el tema de la salida radiometrica? en el calculo de la humedad?
Porque sino... que pasaria cuando me este quedando sin pilas? mediria mal?
Esto quizas hasta es una ofensa para la vista... se puede conectar un 7805 para regular los 5v? o por ser una pila/bateria no....mmmm.
Gracias Velazquezbio
Entiendo. ¿Cuál es la tensión de la batería?
uso dos de 3.6v son las de los mp4, en serie, mi idea era trabajar con el 18f14k50 pero todavia no lo trajo el importador de microchip. y no lo consigo, con ese le pondria una bateria de 3.6 de litio, igual tengo mis dudas respecto a si funcionara bien el HIH que opinas?
Hice mediciones, hace un ratito. :\ en la terraza 1 hora de 2030 a 2130... guarde en la EEPROM y me dio el promedio 12°C y humedad 79% estoy en capital barrio saavedra. aca la imagen del servicio meteorologico.
(http://img405.imageshack.us/img405/2792/medicion.th.jpg) (http://img405.imageshack.us/i/medicion.jpg/)
lo raro el sol jejeje estoy muy contento. :baba
Vere como sigue ahora veremos lo de la bateria.
Ademas puse un LDR servira a manera de luxometro? con alguna adaptacion?
O0
Felicitaciones por las mediciones. :\ :\
Entiendo que ahora estás haciendo trabajar al PIC, al sensor de temperatura y al HIH a 7,2V y con un regulador a 5V ¿verdad?
El HIH, según el datasheet, puede trabajar entre 4 a 5,8V por lo que trabajar a 3,6 voltios no te servirá.
Cita de: David Met en Junio 17, 2010, 09:53:21 PM
Felicitaciones por las mediciones. :\ :\
GRACIAS
Digamos que hago... trampa, tengo las dos baterias, pero meti un trimer en el medio, cuando lo saco de casa, me lo llevo a la terraza lo regulo con eso, el consumo es bastante constante cundo se estabilizo la medicion, pero adentro mientras lo trabajo, y programo, uso un cargador de culular usb que me da 5.33v.
Descartada la idea de la bateria de LITIO...
tengo una bateria china, como la que llevan los controles de las alarmas de auto, es de 12v, le puedo poner un reguador...? tendria que mirar la hoja de Datos del 7805 en caso de que sirva, para ver el consumo... bah no se son ideas....
Estoy medio perdido....
En la primer hoja Ricber comenta que utiliza una mplificador cuanto mejora las variaciones del ADC, dado que aplicando las formulas paso de 16.8°C a 18.9°C con el cambio de 1 solo numero del ADC.
puse el comparador en 10 bit y cambie a int16 q0
Conversion a tension (5.33/1024*q0)
vt = (q0* 5.33/1024);
T =(((vt*1000)- 500)/10);
midiendo temperatura con el TC1057A
como tengo que hacer para tener cambios mas pequeños?
Hola velazquezbio, antes que nada bienvenido.
el tc1047 tiene una sensibilidad de 10mv/ºc y tal como tienes tu conversor A/D, tu resolucion es de 5mv/bit, osea que deberias poder medir con una resolucion de 0.5ºc, ej.: 10º, 10.5º, 11º, etc.
Ahora podrias poner un amplificador con una ganacia de 5 con eso lograrias que una variacion de 1mv que equivale a 0.1ºc se multiplique por 5 osea 5mv que es la resolucion de tu A/D.
Hasta aca se entiende?
Me ganó de mano Ricber ok!
Perdon.
Cita de: David Met en Junio 18, 2010, 11:54:23 AM
Me ganó de mano Ricber ok!
Cita de: Ricber en Junio 18, 2010, 12:23:42 PM
Perdon.
jajajajaja
si habia calculado lo mismo, tendria que variar de 5mV por cada uno de los puntos del ADC. voy a medir con el tester, otra vez, a ver que anda pasando, entre la lectura en mV del ADC y la del tester, tengo una diferencia, voy a ver cuanto es.
Lo del amplificador no lo habia entendido hasta ahora,muy bueno.
Voy a revisar el codigo del programa.
Cuento los resultados en un rato.
Velazquezbio
Cita de: Ricber en Junio 18, 2010, 12:23:42 PM
Perdon.
¡¿he?! ¡¿Estás loco?!
Al contrario, te doy las gracias. ok! ok! ok!
No me gusta ser quien tenga que responder todo. Me gusta que halla un ambiente de ayuda y buen compañerismo, así crece mejor el foro.
Ojalá todos me ganen de mano por responder o que respondan antes que yo. Además, en cuestiones de electrónica, sabes más que yo y es bueno tenerte acá ayudándonos.
Bueno, seria muy largo explicar todo lo que me parecio que esta mal en el codigo.
hago una pregunta, simple para seguir avanzando....
estoy multiplicando 21mv * (lectura ADC)
lo puse en 8 bit, 5.33/255 = 21mv, la lectura de 0 a 255, conecte un led, para usarlo a modo de voltimetro, solo para poder comparar, las lectura, y sacarme duduas, el tester esta clavado en 1.96V, por un lado si uso una variable Float, para tener los decimales y trabajar en Volt, el ADC se la pasa variando.
Si lo pongo en una variable int16, para trabajar en mV, hace mal la multiplicacion...
estaria multiplicando int8 x int16, esto me suena conocido, es lo que te pasaba con la libreria de multiplicacion DAVIDmet?
EDIT, cambie 21mV por bit de ADC, almacene la variable en Volts en un FLOAT y con decimales.
Conclusion.... no se puede hacer la conversion? multiplicando ADC * 21mv?
EDIT2 agregue mas decimales del cociente (5.33/255), tengo 1968mV el tester marca 1964mV. ESTO ESTARIA PERFECTO :\
El ADC varia su valor en +-1 a veces lo hace en -3.
bastante estable no? siendo que mido la tension del LED y el Tester esta clavado en su valor. Estas diferencias en el ADC es ruido?
*no puedo usar ADC en 8 bit, para medir la temperatura, a menos no con mi fuente de 5.33, siendo que el valor salta de a 21mv, pero puedo poner un valor de referencia en Vref que e de la precision que necesito verdad?, estas referencias ifluyen en todos los pines A/D no?
Gracias, perdon si son demasidas preguntas.
Es normal que varíe tanto cuando trabajas con decimales. Esto es debido a que al trabajar con números enteros, estás redondeando los valores.
Para trabajar con decimales y tener una medición más precisa, es inevitable hacer promedios. Hay básicamente dos formas de trabajar con promedios. La primera es, almacenar varias mediciones y luego sumarlas para luego promediarlas (así lo hago yo) y la otra opción es, almacenar varias mediciones y eliminar los extremos diferentes de la medición para luego sumar las que quedaron y promediarlas. Me explico mejor.
Supongamos que medimos los valores siguientes:
3,5V
1,4V
1,8V
0,7V
2,0V
1,5V
Los valores que se eliminan son: 0,7V y 3,5V Luego sumamos los valores restantes y las promediamos. Para que veas como afecta la medición resolvamos ambos casos. En el primer caso, sin eliminar los extremos superiores e inferiores da 1,8166666V y eliminando los extremos da 1,675V
También para prevenir interferencias en la medición y eliminar cualquier ruido eléctrico inducido en los cables, se coloca un condensador de 10nF (sino me equivoco) conectado a masa y el otro extremo en la entrada analógica.
Con respecto al edit2.
La tensión de la fuente no tiene nada que ver con la resolución del ADC.
Mira te coloco una explicación que hice en el foro todopic sobre ADC:
El pic tiene un registro en el cual, te da la conversión obtenida, para eso hay que fijarce en el datasheet. También es necesario ajustar los voltages de referencias, que son +Vref y -Vref. Esto es, para +Vref, es la máxima tensión que puede tener un valor analógico y -Vfre, es la mínima tensión que tendrá el valor analógico.
Por ejemplo, tenemos una señal analógica que varía entre 5V y 0V. Cuando el AD del pic, detecta 5V en la entrada AD, en el registro escribe 11111111, y cuando detecta 0V, ene l registro escribe 0000000. Luego para las tensiones intermedias, colocará la codificación en binario correspondiente.
Obviamente, para estos cálculos, dependerá de la resolución del PIC, el cual está detallado en el datasheet.
Veamos un ejemplo de como hace la conversiónel PIC:
Datos a saber:
+Vref= 5V
-Vref= 0V
Resolución del Pic 256 (2^8)
La fórmula es la siguiente:
5V / 256 = 0.01953125 redondeando 0.019V
Esto quiere decir que, por cada 0.019V, el pic aumentaráen 1 al registro. O sea
0V 0000000
0.019 0000001
0.038 0000010
0.057 0000011
Para saber la resolución correspondiente a cada volt, corresponde la fórmula siguiente
Resolución = Voltage (+Vref - -Vref) / 2^n
Si se ingresa a +Vref y -Vref en mV, la resolución será en mV, si en cambio, se ingresa en V, la resolución será en V
Veamos un ejemplo: que voltaje le corresponde al código 11011010 (218)
Despejamos la fórmula anterior:
Resolución * 2^n = Voltaje
0.019 * 218 = 4.142 V
Cuando el pic detecte 4.142 V, en el registro pondrá 11011010
Lo de perdon, fue un chiste ;D.
Hola velazquezbio una solucion para evitar los calculos con decimales, tan complicados cuando son en asembler, es usar una tabla, que pones en la eeprom y que tu resultado del A/D te sirve como puntero de la direccion de la memoria.
Es un poco trabajoso armar la tabla pero te evitas otros problemas.
Cita de: Ricber en Junio 18, 2010, 08:55:16 PM
Lo de perdon, fue un chiste ;D.
Je, no lo había entendido :-[
Muy buena explicacion, yo me referia a que por defecto sin usar vref se toma VCC y GND como referencia, no es asi?
Puse los capacitores mejoro un poco, los sensores los tengo con cables, porque los hice externos, voy a poner cables mallados.
Ahora voy a promediar mediciones en 1 segundo, a ver que pasa. los promedios lo hacen muy muy estable.
Cita de: velazquezbio en Junio 19, 2010, 12:13:06 AM
Muy buena explicacion, yo me referia a que por defecto sin usar vref se toma VCC y GND como referencia, no es asi?
Así es. En realidad, CCS hace el trabajo por ti y al no indicarle que tome la referencia por los pines +Vref y -Vref, los toma de la alimentación del PIC.
Arme con cables mallados y medi con mejor precision, seria erroneo calibrar cada uno? es decir sabiendo los rangos de voltaje al cual trabajan calibrar la formula, por intervalos no se de a 500mV para tener mediciones mas precisas? sino me ahorro todo esto y pongo el amplificador. cuantos sensores puedo conectar a cada amplificador?.
GRACIAS
¿Te refieres a la fórmula de conversión de digital a analógico?
Si es así, es la misma para todos siempre y cuando utilizen las mismas tensiones de referencia.
Si vas a colocar amplificadores, es uno por cada sensor.
Hola a todos!
Hasta ahora utilicè el HIH4000-001 como humidistato, conectado a un amp.op. en configuraciòn como comparador de tensiones, y de alli al contròl.
Ahora, para mi estaciòn, decidì hacer las tablas para medir la humedàd y me encuentro con que no me queda nada clara la linealidàd del sensor.
Si me guio por la curva de respuesta que figura en la data de Honeywell, veo que tiene pequeños saltos pero dentro de todo, se puede considerar como lineal.
Si calculo 30mv. por unidad de %, segùn la tabla podrìa combinar en algùn punto pero no en todos.
Si calculo 31mv. como dice velazquezbio, a quien saludo por primera vez, la coincidencia es mucho menor.....
Lo màs aproximado que logrè fuè con 27mv. por unidàd de % pero tampoco sigue la supuesta recta que se menciona.
Con las tablas para el TC 1047 no tuve ningùn problema porque la informaciòn era exacta y las mediciones son correctas, pero con el HIH4000 tengo mis dudas :me callo:
Si alguno sabe realmente cual es la relaciòn mv./ %H , por favor, tirenme el dato justo para poder confeccionar las tablas de mediciòn, que como bien dice Ricber, es un poco pesado pero se gana mucho en velocidàd y errores de calculos, ademàs las correcciones por falta de linealidàd se generan mucho màs facilmente.
Desde yà les agradezco el dato y si logro hacer la tabla correctamente, y me autorizan, la publico para completar un poco màs este tema y le sirva a otros foreros. ok!
Saludos!
Yo se que hay un método en la planilla de cálculo Excel que te da una fórmula lineal en base a datos que le vas agregando.
Desgraciadamente no se como se utiliza.
Puedes investigar con este método para ver si tienes suerte.
Gracias David Met!
Voy a ver que sale de èsto ;D
saludos
Bueno ya encontré lo que necesitaba.
El valor oficial según Honeywell es de 30,680mv. por cada %RH :o
Con un offset de 0,958v. (a 0% de RH la salida es de 0,958v.)
Con ésto ya puedo armar mis tablas, despues les cuento. ;D
Saludos
Perfecto. Esperamos respuestas ok!
Hola!
Ya tengo lista, probada y calibrada la tabla para leer humedad con el HIH4000
Utilizo un PIC 16f877A
Para la calibraciòn conectè un multivueltas al A/D y fuì inyectando milivolts como lo harìa el sensor, midiendo con un tester de precisiòn y encontrando el escalòn del A/D correspondiente.
Como la respuesta es bastante lineal, cada 30mv. armè la tabla siguiente:
;************************************************* **************************************
; Tabla para el primer digito de la medicion de HUMEDAD (decenas) con HIH 4000
; y v. referencia 5.0 A/D trabajando a 8 bits
;************************************************* **************************************
ORG 0X1B1E
MENSAJES_1
movf OFFSET,W
addwf MENSAJEADDRESS+0,f
btfsc STATUS,C
incf MENSAJEADDRESS+1,f
movf MENSAJEADDRESS+1,W
movwf PCLATH
movf MENSAJEADDRESS+0,W
movwf PCL
;Tabla humedad (decenas)con HIH 4000 y v. ref.5
dt 000,000,000,000,000,000,000,000,000,000,
dt 000,000,000,000,000,000,000,000,000,000, ;20
dt 000,000,000,000,000,000,000,000,000,000,
dt 000,000,000,000,000,000,000,000,000,000, ;40
dt 000,000,000,000,000,000,000,000,000,000,
dt 000,000,000,000,000,000,000,000,000,000, ;60
dt 000,000,000,000,000,000,001,001,001,001,
dt 001,001,001,001,001,001,001,001,001,001, ;80
dt 001,002,002,002,002,002,002,002,002,002,
dt 002,002,002,002,002,002,003,003,003,003, ;100
dt 003,003,003,003,003,003,003,003,003,003,
dt 003,003,004,004,004,004,004,004,004,004, ;120
dt 004,004,004,004,004,004,004,005,005,005,
dt 005,005,005,005,005,005,005,005,005,005, ;140
dt 005,005,006,006,006,006,006,006,006,006,
dt 006,006,006,006,006,006,006,006,007,007, ;160
dt 007,007,007,007,007,007,007,007,007,007,
dt 007,007,007,008,008,008,008,008,008,008, ;180
dt 008,008,008,008,008,008,008,008,009,009,
dt 009,009,009,009,009,009,009,009,009,009, ;200
dt 009,009,009,009,"e","e","E","E","E","E",
dt "E","E","E","E","E","E","E","E","E","E", ;220
dt "E","E","E","E","E","E","E","E","E","E",
dt "E","E","E","E","E","E","E","E","E","E", ;240
dt "E","E","E","E","E","E","E","E","E","E",
dt "E","E","E","E","E",0
;*********************************************** ***************************************
; Tabla para el segundo dìgito de la medicion de la HUMEDAD (unidades) con HIH 4000
; y v. referencia 5.0 A/D trabajando a 8 bits
;*********************************************** ***************************************
ORG 0X1C28
MENSAJES_2
movf OFFSET,W
addwf MENSAJEADDRESS+0,f
btfsc STATUS,C
incf MENSAJEADDRESS+1,f
movf MENSAJEADDRESS+1,W
movwf PCLATH
movf MENSAJEADDRESS+0,W
movwf PCL
;Tabla humedad (unidades)con HIH 4000 y v. ref.5
dt 000,000,000,000,000,000,000,000,000,000,
dt 000,000,000,000,000,000,000,000,000,000, ;20
dt 000,000,000,000,000,000,000,000,000,000,
dt 000,000,000,000,000,000,000,000,000,000, ;40
dt 000,000,000,000,000,000,000,000,000,000,
dt 000,000,001,002,002,003,004,004,005,006, ;60
dt 006,007,008,008,009,009,000,001,001,002,
dt 003,004,004,005,005,006,007,007,008,009, ;80
dt 009,000,001,001,002,003,003,004,005,005,
dt 006,006,007,008,008,009,000,000,001,001, ;100
dt 002,003,004,004,005,006,006,007,008,008,
dt 009,009,000,001,002,002,003,003,004,005, ;120
dt 005,006,007,007,008,009,009,000,000,001,
dt 002,002,003,004,004,005,006,006,007,008, ;140
dt 008,009,000,000,001,002,002,003,004,004,
dt 005,005,006,007,007,008,009,009,000,001, ;160
dt 001,002,002,003,004,005,006,006,007,007,
dt 008,009,009,000,001,001,002,003,003,004, ;180
dt 004,005,006,007,007,008,008,009,000,001,
dt 001,002,003,003,004,005,005,006,007,007, ;200
dt 008,008,009,000,"E","E","E","E","E","E",
dt "E","E","E","E","E","E","E","E","E","E", ;220
dt "E","E","E","E","E","E","E","E","E","E",
dt "E","E","E","E","E","E","E","E","E","E", ;240
dt "E","E","E","E","E","E","E","E","E","E",
dt "E","E","E","E","E",0
Como se puede ver, hay posiciones que repiten el valor, de èsta forma se corrige la diferencia de saltos entre el A/D y el sensor.
Cada valor fuè probado tres veces con el multivueltas para ver que se repita la mediciòn y nunca fallò. Es interesante saber que no utiliza adaptacion de tensiòn, solo un amplificador colocado como seguidor para equiparar impedancias. ( hasta èste se puede evitar porque los resultados fueron los mismos)
Si alguien lo necesita, tengo todo el còdigo disponible
Por ùltimo doy las gracias al Foro de Todopic, que es de donde aprendì a manejar las tablas (y fìjense desde que posiciòn de memoria trae los datos sin colgarse) ok!
Saludos!
Genial YO ok! ok!
Gracias por compartir el código ok!