'****************************************************************
'* Name : µeMeteorologica.bas *
'* Author : Max Eduardo Reyes Vera Juárez *
'* Notice : Copyright (c) 2006 Protegido por leyes de autor *
'* : All Rights Reserved *
'* Date : 02/12/2006 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************
DEVICE = 18f452
XTAL = 4
declare adin_res 10 ' resolucin de 10 bits
DECLARE ADIN_STIME 50 ' tiempo de muestreo 50ms
DECLARE SDA_PIN PORTB.1 'Declarar pines de I2C
DECLARE SCL_PIN PORTB.2
DECLARE SLOW_BUS=ON 'Con un BUS demenos de 8 MHZ
ADCON1 = 143 ' Justificado a la derecha y con VREFs
TRISA.0= 1 ' RA0 de entrada
symbol Vs = 5.35 ' Valor de La Fuente del Sensor
symbol P_0 = 1013.3 ' Valor de la Presion a nivel del mar en HPa
SYMBOL CONTW %10010000 ' Direccion de Escritura TCN75
SYMBOL CONTR %10010001 ' Direccion de lectura TCN75
' Pines A2,A1 Y A0 a Tierra
dim Vadc as word
dim Temp as word
dim dato as byte
dim Vout As float
dim loga As float ' Variables de manejo
dim defp As float
dim M1 As float
dim M2 As float
dim H as float
dim P As float
dim HP as float
dim C As float
dim B As float
dim MSB as temp.byte1
dim LSB as temp.byte0
dim TX as Portb.0 ' Pin de Transmision
dim RX as portb.7
configTCN75:
busout contw,1,[$00] ' Apuntar al registro Temp
delayms 20
lee:
serin rx, 84, [dato]
if dato="L" THEN
GOSUB INICIO
ENDIF
GOTO LEE
Inicio:
gosub get_vout
gosub pausa
gosub get_presion ' Enviar Presion cada 2 minutos
gosub pausa
gosub get_altura
gosub pausa
gosub get_Temp
gosub Muestra_todo
gosub pausa
RETURN
get_VouT:
vadc = adin 0 ' Obtencion del ADC
'VADC = Vadc >> 6 ' Rotar a la derecha para conseguir los 1024
vout = (vadc * 5) / 1024 ' Voltaje que entra al ADC
return
get_Presion: ' Obtener la Presion Atmosferica en KPa
c = .095 * vs
b = .009 * vs ' Vout=Vs(.009*P-.095)
P = (vout + c)/(b) ' P = (Vout + (.095*Vs)) / (.009*Vs)
return
'*************************************************************************************************
'* para sacar la altitud se usa la formula *
* *
'* *
'* 8430.153*ln(P_0/P) donde P es la presion actual y *
'* H = ------------------------ P_0 es la presion del mar 760mmHg o 1013.3 HPa *
'* 1+(.095*ln(P_0/P) *
'* *
'*************************************************************************************************
get_Altura:
hp = p * 10
defp = P_0 / hp
loga = log defp
M1 = 8430.153 * loga
m2 = (loga * .095)+1
H = M1 / m2
return
get_Temp: ' obtener la temperatura y si existe mostrar medio grado
busin contr,0,[temp]
delayms 20
if (LSB & $80) = $80 then
LSB = 5
ELSE
LSB = 0
ENDIF
Muestra_Todo: ' Envio de la Presion en Kpa-Hpa, la Altitud y la Temperatura via serie a T9600
serout tx, 84, ["Presion(KPa): ", DEC p," HPa: ",dec hp,13, "Altitud: ", dec h,"m",13,"Temperatura: ", dec msb,".",dec lsb,"°C",10,13]
return
pausa:
delayms 250
return