Noticias:

Grupo en telegram, del foro de meteorología fácil: https://t.me/meteorologiafacil

Para mas detalles, puedes visitar el siguiente tema http://www.meteorologiafacil.com.ar/foros/index.php?topic=1608.0

Espero que les sea de mucha utilidad.

Menú Principal

Creando mi propia estación automática.

Iniciado por David Met, Abril 05, 2009, 08:40:12 PM

Tema anterior - Siguiente tema

0 Miembros y 3 Visitantes están viendo este tema.

David Met

Cita de: Ricber en Enero 08, 2010, 06:51:20 PM
Algo asi es la cosa, lo que tienes que ver es que esos 0.3 mv se amplifiquen hasta llegar a 9,7mv, creo que es como 30 veces si no lo calcule mal.
Como la salida del sensor es diferencial se usa en estos casos los amplificadores para instrumentacion
en este link http://es.wikipedia.org/wiki/Amplificador_de_instrumentaci%C3%B3n puedes ver un ejemplo con calculo incluido. 8)
Un abrazo

Cita de: David Met en Enero 08, 2010, 08:38:09 PM
Muchísimas gracias.
Estoy chequeando el link  :\

Está excelente el circuito y de echo ya hacen CI con esa configuración. El más conocido es el INA114. El factor de acumulación tiene que ser de 32 ya que 32 * 0,3 = 9,6mV a solo 0,1mV de diferencia  :\ :\
Una pregunta Ricber, ¿has podido conseguir este CI o has utilizado otro igual?

Recien entré a la página web de GM electrónica pero no lo tienen. Estoy tratando de entrar a la página de electrónica liniers pero no se carga la página web.
Sino me equivoco, no tengo que modificar nada del soft, ni siquiera el factor de multiplicación del ADC para poder convertirlo en voltios.
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Ricber

Hola David, yo estoy probando el AD620 que es muy similar, pero creo que es mas comun,
pero fijate que en este lugar esta http://www.dinastiasoft.com.ar/precios.htm figura en su lista de productos y cuesta algo de 10 dolares, el tema es saber si hay o solo esta en las listas.

Un abrazo.


David Met

Muchas gracias Ricber.
Por cierto, en dinastiasoft tienen circuitos interesantes. ^-^
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Ricber

Si, muy interesantes los modulos inalambricos.

David Met

#125
He tenido que cambiar la fórmula de corrección por temperatura que tan gentilmente me ha ayudado Ricber. La principal razón es porque se me complicaba mucho a la hora de implementarlo en el lenguaje ASM.
Para ello tuve que ponerme con papel y lapiz y empezar a buscar una fórmula un poco más fácil, la cual es:

(T x CT x Vout / 100) + Vout - K = Vr

Donde:

T = temperatura del aire en °C
CT = Coeficiente de temperatura y en mi caso es de 0,22 mV/°C
Vout = Tensión de salida del sensor en mV
Vr = Tensión corregida a 25°C listo para aplicar la fórmula de presión.
K = Constante. Es igual a 3,85

La principal ventaja es que es má fácil implementarla en ASM pero como gran desventaja es que no se puede usar en presiones por debajo de 300 Hpa, pero como es para medir la presión atmosférica, no me entorpece para nada.

Los mantengo informado.
Saludos.
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Ricber

Hola David, segun veo me parece que la vr aumenta con la temp. cuando la correccion debe ser negativa osea debe bajar al aumentar la temp.
Si no talvez entendi mal la formula, me la puedes explicar.
Saludos.

David Met

Por lo que yo entiendo de este gráfico, la salida máxima del sensor es de 70mV. Pero el rango de presión máximo que podrá medir el sensor, dependerá de la temperatura, por ejemplo, a -40°C, el sensor es capaz de medir hasta los 24 PSI o 165Kpa aproximadamente.



Para dar otro ejemplo, si la presión de la atmósfera es de 80 kpa o en su defecto 800 hpa, a 125°C, el sensor entregará 30mV, pero si es de 25°C la tensión de salida será de 35mV, o a -40°C la tensión de salida será de 40mV.
Mi fórmula que expuse, no es nada precisa y necesita ser mejorada, pero para empezar a medir algo es suficiente. Algo para destacar del gráfico es que en la parte izquierda verás que a mayor temperatura, la tensión de salida aumenta, pero pasado los 4 PSI la tensión de salida disminuye con el aumento de temperatura. La verdad que el comportamiento del sensor es muy raro.
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

DarkMoon

Imagino que como no te vas a mover demasiado lejos de los 100KPa el comportamiento del sensor en su extremo mas bajo no te importa demasidao (creo yo... no?)

Saludos!

David Met

Exacto. Al sensor lo voy a utilizar solo para medir la presión atmosférica.
El rango esperado es entre los 940 hpa a 1100 hpa.
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

David Met

Ya he implementado la fórmula en la programación.
Es un dolor de cabeza trabajar con coma en assembler. Para eliminarlas, he tenido que multiplicar por 100 algunos resultados para trabajar correctamente.

Las pruebas, por ahora funcionaron pero la verdadera prueba estará dada con el sensor.
Ahora me toca hacer la programación para el censado del viento y termino la parte del datalogger.
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

YO

Cita de: David Met en Abril 26, 2009, 10:11:56 AM
Por fin terminé de crear la etapa para censar la humedad. También cambié por completo o casi por completo el programa principal. Voy a transmitir a la etapa receptora todos los datos por medio de RF, para ello voy a utilizar los módulos TWS y RWS. Esto módulos tienen un alcance de 100mts a campo abierto por lo que para mi, me alcanza y sobra.

Voy a tratar de esta tarde, subir el diagrama de flujo de la etapa transmisora. Lo que voy a subir ahora, es el programa, la parte que censo la temperatura y la humedad.

Vemos la parte de la configuración inicial y el censado de la temperatura.


INICIO BCF STATUS,RP0 ;BANCO 0
BCF STATUS,RP1 ;BANCO 0
CLRF PORTA
CLRF PORTB
CLRF PORTC
CLRF PORTD
CLRF PORTC
CLRF PORTE
MOVLW B'10010000' ;HABILITO RB0/INT Y INTERRUPCIONES GENERALES.
MOVWF INTCON
;************************************************************************************************
;BORRO LAS POSICIONES DE MEMORIAS EN DONDE SE GUARDAN LOS DATOS SENSADOS E INICIALIZO EL LUGAR DE DÓNDE COMENZAMOS A GRABAR.
;************************************************************************************************
TEMPERATURA ;RUTINA PARA SENSAR, PROMEDIAR LAS MUESTRAS Y GUARDALAS EN LA RAM DE LA TEMPERATURA.
CALL BORRO_MEMOB2 ;LLAMO A LA RUTINA PARA BORRAR LAS POCICIONES DE MEMORIA DEL BANCO 2
CALL BORRO_MEMOB3 ;LLAMO A LA RUTINA PARA BORRAR LAS POCICIONES DE MEMORIA DEL BANCO 3
CALL AJUS_MEMO
;
;------------------------------------------------------------------------------------------------
;EMPEZAMOS LA MEDICIÓN DE TODOS LOS PARÁMETROS. PRIMERO LA TEMPERATURA, SEGUNDO LA HUMEDAD, TERCERO EL VIENTO
;CUARTO PRESIÓN. LA PRECIPITACIÓN, SE TOMA POR MEDIO DE LA INTERRUPCIÓN DE RB0.  POR CADA MEDICIÓN, SE TOMA 42 MUESTRAS, SE HACE EL PROMEDIO
;Y SE GUARDA EN UNA POSICIÓN DE LA RAM PARA SU POSTERIOR TRANSMISIÓN. TERMINADO ESTE PROCESO, SE PROCEDE A SENSAR EL SIGUIENTE SENSOR.
;UNA VEZ SENSADO ESTOS PARÁMETROS, PROCEDEMOS A ENVIAR LOS DATOS A LA ESTACIÓN RECEPTORA.
;------------------------------------------------------------------------------------------------
;************************************************************************************************
;MIDO LA TEMPERATURA. TOMO 42 MUESTRAS Y LA GUARDO EN SUS RESPECTIVO LUGAR.
;************************************************************************************************
;
DATO_MUESTRAS
MOVLW .42
MOVWF muestras
;
ADQ_TEMP BSF STATUS,RP0
BCF STATUS,RP1 ;BANCO 1
MOVLW B'00001001'
MOVWF TRISA ;RA0 y RA3 COMO ENTRADA, DEMÁS SALIDAS
MOVLW B'00000001' ;+VREF RA3, ALINEACIÓN A LA IZQUIERDA Y PORTA TODAS ANALÓGICAS.
MOVWF ADCON1 ;Y LO PASO AL ADCON1
BCF STATUS,RP0 ;BANCO 0
MOVLW B'10000001' ;ADC ENC. CANAL AN0. FREC Fosc/32
MOVWF ADCON0 ;Y LO PASO AL ADCON0
BCF PIR1,ADIF ;INDICO QUE LA CONVERSIÓN NO ESTÁ ECHA
NOP ;PARA ESTABILIZAR
CALL ADQUISICIÓN ;COMIENZO LA CONVERSIÓN
;-----------------------------------------------------------
;PASAMOS LA CONVERSIÓN A LA MEMORIA RAM. TRABAJAMOS CON 8 BITS
;-----------------------------------------------------------
MOVFW ADRESH
MOVWF DATO4
MOVWF TEMP2 ;SALVO EN TEMP1 POR SI LA RESTA ES NEGATIVO
;
ADQ_REF BSF STATUS,RP0
BCF STATUS,RP1 ;BANCO 1
MOVLW B'00001010'
MOVWF TRISA
MOVLW B'00000001'
MOVWF ADCON1 ;+VREF RA3, ALINEACIÓN A LA IZQUIERDA Y PORTA TODAS ANALÓGICAS
BCF STATUS,RP0
MOVLW B'10001001'
MOVWF ADCON0 ;ADC ENC. CANAL AN1. FREC Fosc/32
BCF PIR1,ADIF ;INDICO QUE LA CONVERSIÓN NO ESTÁ ECHA
NOP ;PARA ESTABILIZAR
CALL ADQUISICIÓN
;-----------------------------------------------------------
;PASAMOS LA CONVERSIÓN A LA MEMORIA RAM, TRABAJAMOS CON 8 BITS
;-----------------------------------------------------------
MOVFW ADRESH
MOVWF DATO2
MOVWF TEMP4
;-----------------------------------------------------------
;RESTAMOS LOS DOS VALORES PARA QUE ME DÉ EL VALOR REAL SI EL VALOR ES NEGATIVO, LA TEMPERATURA TEMBIÉN LO ES.
;RESULTADO EN DATO4
;-----------------------------------------------------------
SUBWF DATO4,F ;RESTAMOS DATO4 - DATO2 (AL VALOR DE DATO2 AÚN LO TENEMOS CARGADOS EN W, EL RESULTADO EN DATO4
BTFSS STATUS,C ;¿ES NEGATIVO?
GOTO TEMP_NEGATIVA ;SI, LA TEMPERATURA ES NEGATIVO
BSF estado,1 ;NO. AJUSTAMOS LOS ESTADOS CORRESPONDIENTES. HAY DATOS POSITIVOS A PROMEDIAR
BSF estado,2 ;EL DATO DE AHORA ES POSITIVO.
GOTO DESCOMPONER_NÚMERO
;
TEMP_NEGATIVA
MOVFW TEMP2 ;AL SER NEGATIVO, VUELVO HACER LA RESTA PERO INVIERTIENDO
SUBWF TEMP4,W ;EL MINUENDO POR EL SUBTRAENDO, ASÍ NOS DÁ EL VALOR CORRECTO
MOVWF DATO4 ;ES POR ELLO QUE GUARDAMOS LOS DATOS EN TEMP
;PARA RESTAR INVIRTIENDO LOS VALORES Y YA NO ES NECESARIO CHEQUEAR EL
;BIT C, YA QUE SABEMOS QUE ES NEGATIVO.
;
BSF estado,0 ;HAY DATOS NEGATIVOS A PROMEDIAR
BCF estado,2 ;EL DATO DE AHORA ES NEGATIVO
;DESCOMPONER_NÚMERO

;
;-----------------------------------------------------------------
;UNA VEZ RESTADOS LAS DOS ADIQUICICIONES, MULTIPLICAMOS EL RESULTADO POR 976 ASÍ LO PASAMOS A VOLT.
;SE OBTIENE UN RESULTADO DE 24 BIT. LUEGO, LO DIVIDIMOS POR 100 PARA QUEDARNOS CON LOS VALORES DESEADOS,
;HASTA 4 DÍGITOS QUE NOS CONSUMIRÁ DOS REGISTRO DE 8 BITS.
;
;UNA VEZ ECHO ESTO,TOMAMOS 42 MUESTRAS. Y HACEMOS EL PROMEDIO. PARA ELLO, PRIMERO SUMAMOS
;TODAS LAS TEMPERATURAS, Y LUEGO LO DIVIDIMOS POR 42. ESTO NOS DA EL PROMEDIO.

;CUANDO OBTENEMOS EL PROMEDIO, LO DESCOMPONEMOS EN CENTENA, DECENA, UNIDAD Y DÉCIMO.
;
;NOTA: QUE HACER CUANDO LA TEMPERATURA ES NEGATIVA Y POSITIVA.
;SI LA TEMPERATURA ES POSITIVA, SE ALMACENAN DESDE H'110' HASTA H'168' BANCO 2
;SI LA TEMPERATURA ES NEGATIVA, SE ALMACENAN DESDE H'190' HASTA H'1E8' BANCO 3
;
;LA FORMA DE HACER EL PROMEDIO VARÍA SI TENEMOS POSITIVOS O NEGATIVOS O LOS DOS.
;1er CASO: SOLO POSITIVOS. SUMAMOS LAS 42 MUESTRAS (DOS NÚMEROS DE 8 BITS) Y LUEGO LO DIVIDIMOS POR 42
;          EL RESULTADO ES EL DATO A MOSTRAR LUEGO VOLVEMOS A EMPEZAR TOMANDO DE NUEVO LAS 42 MUESTRAS
;2dO CASO: SOLO NEGATIVOS. LO TRATAMOS COMO SI FUERAN POSITIVOS Y EN EL MOMENTO DE MOSTRAR EL DATO,
;          MOSTRAMOS EL SIGNO MENOS EN EL LCD.
;3er CASO: POSITIVOS Y NEGATIVOS. PRIMERO SUMAMOS LOS POSITIVOS Y HACEMOS EL PROMEDIO. LO GUARDAMOS EN LA MEMORIA
;          LUEGO SUMAMOS LOS NEGATIVOS Y HACEMOS EL PROMEDIO. LO GUARDAMOS EN LA MEMORIA. PARA OBTENER EL DATO A MOSTRAR
;          RESTAMOS EL PROMEDIO POSITIVO CON EL PROMEDIO NEGATIVO. DE ESTA MANERA TENEMOS 3 OPCIONES
;          1- EL PROMEDIO POSITIVO ES MAYOR QUE EL NEGATIVO, EL DATO OBTENIDO ES POSITIVO. NOS DAMOS CUENTA CHEQUEANDO EL BIT C
;          2- EL PROMEDIO POSITIVO EN MENOR QUE EL NEGATIVO, EL DATO OBTENIDO ES NEGATIVO. NOS DAMOS CUENTA CHEQUEANDO EL BIT C
;          3- EL PROMEDIO POSITIVO ES IGUAL QUE EL NEGATIVO, EL DATO OBTENIDO ES CERO.
;

;
;MULTIPLICAMOS POR 977.
;
DESCOMPONER_NÚMERO
;
MOVFW DATO4 ;EL RESULTADO ANTERIOR QUE ESTÁ EN DATO4, LO PASAMOS A MULTIPLICADOR
MOVWF multiplicadorBA
CLRF multiplicadorAL
MOVLW B'00000011'
MOVWF DATO3
MOVLW B'11010001'
MOVWF DATO4 ;MENOS SIGNIFICATIVO
CLRF DATO2
CLRF DATO1
CALL MULTIPLICAR ;MULTIPLICAMOS Y OBTUVIMOS UN RESULTADO DE 24 BIT EN DATO2, DATO3, DATO4 (MENOS SIGNIFICATIVO)
;
;...................................
;DIVIDIMOS EN 100 PARA OBTENER EL VALOR A ALMACENAR SOLO EN 4 DÍGITOS, EL RESULTADO OBTENIDO ESTA EN DATO
;...................................
;
MOVLW .100 ;DIVISOR
MOVWF FUNC4
CLRF FUNC3
CLRF DATO1 ;BORRO DATO1.
CALL DIVISION ;EL RESULTADO DE LA MULTIPLICACIÓN POR 977 LO DIVIDO POR 100, EL RESULTADO EN DATO.
;
;ANALIZAMOS SI LA TEMPERATURA ES NEGATIVA O PISITIVA
;
RES_NEG BTFSS estado,2 ;¿ES POSITIVO?
GOTO DATO_NEG ;ES NAGATIVO
;
;GUARDAMOS LOS DATOS EN EL BANCO CORRESPONDIENTE
;
;PARA POSITIVOS
;
BCF STATUS,RP0 ;ES POSITIVO
BSF STATUS,RP1 ;BANCO 2
MOVFW dir1 ;DIRECCIÓN A APUNTAR
MOVWF FSR ;APUNTAMOS
BCF STATUS,RP1 ;BANCO 0
MOVFW RESDIV3 ;RECUPERO EL RESULTADO MAS SIGNIFICATIVO
BSF STATUS,RP1 ;BANCO 2
MOVWF INDF ;GUARDAMOS EL DATO EN LA POCICIÓN APUNTADA EN FSR
INCF FSR,F ;INCREMENTAMOS EL FSR PARA GUARDAR EL RESULTADOS MENOS SIGNIFICATIVO
BCF STATUS,RP1 ;BANCO 0
MOVFW RESDIV4 ;RECUPERO EL RESULTADO MENOS SIGNIFICATIVO
BSF STATUS,RP1 ;BANCO 2
MOVWF INDF ;PASAMOS EL VALOR A LA POCICIÓN APUNTADA EN FSR
INCF prom_pos,F ;INCREMENTO EN 1 A PROM_POS
INCF FSR,F
MOVFW FSR ;PASAMOS EL DATO A W
MOVWF dir1 ;Y LO SALVAMOS PARA SU POSTERIOR USO
BCF STATUS,RP1 ;BANCO 0
GOTO TOTAL_MUESTRAS
;
;PARA NEGATIVOS
;
DATO_NEG BSF STATUS,RP0 ;
BSF STATUS,RP1 ;BANCO 3
MOVFW dir2
MOVWF FSR
BCF STATUS,RP0
BCF STATUS,RP1
MOVFW RESDIV3
BSF STATUS,RP0
BSF STATUS,RP1
MOVWF INDF
INCF FSR,F
BCF STATUS,RP0
BCF STATUS,RP1
MOVFW RESDIV4
BSF STATUS,RP0
BSF STATUS,RP1
MOVWF INDF
INCF prom_neg,F
INCF FSR,F
MOVFW FSR
MOVWF dir2
BCF STATUS,RP0
BCF STATUS,RP1
;
TOTAL_MUESTRAS
DECFSZ muestras,F ;¿TOMÉ LAS 42 MUESTRAS?
GOTO ADQ_TEMP ;NO, SIGO MIDIENDO LA TEMPERATUA.
CALL AJUS_MEMO ;SI, DEJO INICIALIZADA LAS DIRECCIONES A APUNTAR PARA PODER PROMEDIAR LAS MUESTRAS.
;
;REALIZAMOS EL PROMEDIO
;
FIN_PROMEDIO
BTFSS estado,1 ;¿HAY VALORES POSITIVOS?
GOTO DATOS_NEGATIVOS ;NO HAY. SOLOS NEGATIVOS.
;
;DATOS POSITIVOS, LOS SUMAMOS Y EL RESULTADO ESTÁ EN DATO3, DATO4
;
BCF STATUS,RP0 ;SI HAY
BSF STATUS,RP1 ;BANCO 2
MOVFW prom_pos ;SALVAMOS LA CANTIDAD DE DATOS POSITIVOS
BCF STATUS,RP1 ;BANCO 0
MOVWF prom_pos_alt ;PARA SABER CUANTAS VECES HAY QUE SUMARLAS, PARA LUEGO DIVIDIRLAS.
BSF STATUS,RP1 ;BANCO 2
MOVFW dir1
MOVWF FSR ;DIRECCIÓN A LEER
MOVFW INDF ;EL VALOR EN FSR SE GUARDA EN W
BCF STATUS,RP1 ;BANCO 0
MOVWF DATO3
BSF STATUS,RP1 ;BANCO 2
INCF FSR,F ;DIRECCIÓN A APUNTAR SEGUNDO DATO
MOVFW INDF
BCF STATUS,RP1 ;BANCO 0
MOVWF DATO4
BSF STATUS,RP1 ;BANCO 2
INCF FSR,F
MOVFW FSR
MOVWF dir1
;
SUMAR_PROMEDIO
BSF STATUS,RP1 ;BANCO 2
MOVFW dir1
MOVWF FSR
MOVFW INDF
BCF STATUS,RP1 ;BANCO 0
MOVWF DATO1
BSF STATUS,RP1 ;BANCO 2
INCF FSR,F
MOVFW INDF
BCF STATUS,RP1 ;BANCO 0
MOVWF DATO2
BSF STATUS,RP1 ;BANCO 2
INCF FSR,F
MOVFW FSR
MOVWF dir1
BCF STATUS,RP1 ;BANCO 0
CALL D_addF
DECFSZ prom_pos_alt,F
GOTO SUMAR_PROMEDIO
;
;OBTUVIMOS LA SUMA EN DATO3, DATO4, AHORA HACEMOS EL PROMEDIO DIVIDIENDO POR LA CANTIDAD DE MUESTRAS OBTENIDAS EL RESULTADO EN DATO
;

CLRF FUNC3
BSF STATUS,RP1 ;BANCO 2
MOVFW prom_pos
BCF STATUS,RP1 ;BANCO 0
MOVWF FUNC4
CALL DIVISION
;
;CHEQUEAMOS SI HAY NEGATIVOS.
;
PROM_NEG BTFSC estado,0 ;¿HAY DATOS NEGATIVOS?
GOTO DATOS_NEGATIVOS ;SI HAY

ANT_DESCOMPONER ;NO HAY
BSF estado,3 ;NO. AJUSTAMOS LA VARIABLE ESTADO
MOVFW DATO4
MOVWF temperaturaBA
MOVFW DATO3
MOVWF temperaturaAL
GOTO HUMEDAD
;
DATOS_NEGATIVOS
BSF STATUS,RP0
BSF STATUS,RP1 ;BANCO 3
MOVFW prom_neg
BCF STATUS,RP0 ;BANCO 0
BCF STATUS,RP1
MOVWF prom_neg_alt
BSF STATUS,RP0
BSF STATUS,RP1 ;BANCO 3
MOVFW dir2
MOVWF FSR
MOVFW INDF
BCF STATUS,RP0
BCF STATUS,RP1
MOVWF DATO3
BSF STATUS,RP0
BSF STATUS,RP1
INCF FSR,F
MOVFW INDF
BCF STATUS,RP0
BCF STATUS,RP1
MOVWF DATO4
BSF STATUS,RP0
BSF STATUS,RP1
INCF FSR,F
MOVFW FSR
MOVWF dir2
;
SUMAR_PROMEDIO_NEG
BSF STATUS,RP1 ;BANCO 3
BSF STATUS,RP0
MOVFW dir2
MOVWF FSR
MOVFW INDF
BCF STATUS,RP1 ;BANCO 0
BCF STATUS,RP0
MOVWF DATO1
BSF STATUS,RP1 ;BANCO 3
BSF STATUS,RP0
INCF FSR,F
MOVFW INDF
BCF STATUS,RP1 ;BANCO 0
BCF STATUS,RP0
MOVWF DATO2
BSF STATUS,RP1 ;BANCO 3
BSF STATUS,RP0
INCF FSR,F
MOVFW FSR
MOVWF dir2
BCF STATUS,RP1 ;BANCO 0
BCF STATUS,RP0
CALL D_addF
DECFSZ prom_neg_alt,F
GOTO SUMAR_PROMEDIO_NEG
;
;OBTUVIMOS LA SUMA EN DATO3, DATO4, AHORA HACEMOS EL PROMEDIO DIVIDIENDO POR LA CANTIDAD DE MUESTRAS OBTENIDAS EL RESULTADO EN DATO
;

CLRF FUNC3
BSF STATUS,RP1
BSF STATUS,RP0 ;BANCO 3
MOVFW prom_neg
BCF STATUS,RP0
BCF STATUS,RP1 ;BANCO 0
MOVWF FUNC4
CALL DIVISION
;
;EL ÚLTIMO PASO ES CHEQUEAR QUE SI HAY POSITIVOS Y NEGATIVOS A RESTAR. EN ESTA PARTE NO SABEMOS SI HAY DE LOS DOS O UNO SOLO.
;
PROM_NEG_A BTFSC estado,1 ;¿HAY POSITIVOS?
GOTO RESTAR_AMBOS ;SI, HAY QUE RESTAR POSITIVOS - NEGATIVOS.
MOVFW DATO4 ;NO, GUARDAMOS LOS DATOS EN LA RAM PARA SER ENVIADO A LA ESTACIÓN RECEPTORA
MOVWF temperaturaBA
MOVFW DATO3
MOVWF temperaturaAL
BCF estado,3 ;LA TEMPERATURA ES NEGATIVA. NO OLVIDAR DE ENVIAR ESTE DATO A LA ESTACIÓN RECEPTORA.
GOTO HUMEDAD ;SENSAMOS LA HUMEDAD.
;
;------------------------------------------------------------------
;RESTAMOS LOS POSITIVOS CON NEGATIVOS. EL RESULTADO QUEDA EN DATO3, DATO4 Y HAY QUE PASARLO
;SEGÚN EL VALOR, SI ES POSITIVO O NEGATIVO (positivo O negativo). Y LUEGO MOSTRARLO AL LCD.
;------------------------------------------------------------------
;
RESTAR_AMBOS
MOVFW positivoBA
MOVWF DATO4
MOVFW positivoAL
MOVWF DATO3
MOVFW negativoBA
MOVWF DATO2
MOVFW negativoAL
MOVWF DATO1
CALL RESTA
BTFSS STATUS,C ;¿ES NEGATIVO?
GOTO PROMEDIO_NEGATIVO
BSF estado,3 ;LA TEMPERATURA ES POSITIVA. NO OLVIDAR DE ENVIAR ESTE DATO A LA ESTACIÓN RECEPTORA.
MOVFW DATO4
MOVWF temperaturaBA
MOVFW DATO3
MOVWF temperaturaAL
GOTO HUMEDAD
;
PROMEDIO_NEGATIVO ;INVIERTO LOS DATOS PORQUE EL RESULTADO ES NEGATIVO
MOVFW positivoBA ;POR ENDE, VOLVEMOS HACER LA RESTA PARA QUE NOS DEA
MOVWF DATO2 ;EL RESULTADO CORRECTO.
MOVFW positivoAL
MOVWF DATO1
MOVFW negativoBA
MOVWF DATO4
MOVFW negativoAL
MOVWF DATO3
CALL RESTA
BCF estado,3 ;LA TEMPERATURA ES NEGATIVA. NO OLVIDAR DE ENVIAR ESTE DATO A LA ESTACIÓN RECEPTORA.
MOVFW DATO4
MOVWF temperaturaBA
MOVFW DATO3
MOVWF temperaturaAL
;VAMOS A SENSAR HUMEDAD




Hola David
Probaste èste programa midiendo temperaturas negativas?
Pudiste solucionar el tema de la fuente, o cambiaste de circuito?
Sin saber que era imposible El fue y lo hizo

David Met

No, aún no lo probé con temperaturas negativas porque no he tenido tiempo de montarlo, amén de que no compre todavía el CI que me hace una fuente común a fuente simétrica. :-\

Lo he simulado con el MPLAB y anduvo de 10.
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

YO

Perfecto, yo nunca intente hacerlo pero me estan dando unas ganas barbaras.
No conozco ese integrado, ¿donde encuentro alguna nota de aplicacion?
Yo tengo algunos circuitos para lograr el mismo objetivo pero para obtener 5V. con doble polaridad, la fuente simple, deberìa tener por lo menos 20v.(poco practico)

Al LM35 lo uso con 9V. y fuente de doble polaridad con transformador ¿con que voltaje alimentas al sensor? 
Sin saber que era imposible El fue y lo hizo

David Met

Al sensor LM35 lo alimento con 5 volts. En cuanto el datasheet del ICL7660 aquí puedes verla http://www.alldatasheet.com/datasheet-pdf/pdf/67436/INTERSIL/ICL7660.html
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.