'****************************************************************
'* Name : sht15.BAS *
'* Author : [Mauricio Leyton Carrasco] *
'* Notice : Copyright (c) 2005 [set under view...options] *
'* : All Rights Reserved *
'* Date : 01/19/2007 *
'* Version : 1.0 *
'* Notes : Leer la data de temperatura y humedad para ser *
'* enviada por la RS232, asi como tambien a un dis-*
'* play LCD de 2 x 16, mostrando en el display las *
'* temperaturas-humedad maxima y minima *
'* Mantener la linea Define LOADER_USED 1 *
'****************************************************************
Define LOADER_USED 1
include "modedefs.bas"
' Define LCD pines
Define LCD_DREG PORTD 'puerto D para LCD
Define LCD_DBIT 4 'bit de partida
Define LCD_BITS 4 'cantidad de bit
Define LCD_RSREG PORTE 'puerto E para RSREG
Define LCD_RSBIT 0 'pin 0 para RSREG
Define LCD_EREG PORTE 'puerto E para Enable
Define LCD_EBIT 1 'pin 1 para Enable
' Define parametros de rs 232
DEFINE DEBUG_REG PORTC ' Puerto C
DEFINE DEBUG_BIT 6 ' *** pin Bit-6 ***
DEFINE DEBUG_BAUD 1200 ' *** Baud Rate ***
DEFINE DEBUG_MODE 0 ' Set Puerto Serial Mode 0=True, 1=Inverted
DEFINE DEBUG_PACING 300 ' retardp en microsegundos entre cada caracter
DEFINE DEBUGIN_REG PORTC
DEFINE DEBUGIN_BIT 7
DEFINE DEBUGIN_MODE 0
ADCON1 = 7 ' Setea Puerto A y Puerto E para digital
Low PORTE.2
'** Asigamiento de Pines
dta VAR PORTD.2 ' Linea de Datos
clk VAR PORTD.3 ' Reloj Serial
'ser_tx VAR PORTC.6
'** Constantes
cmdtr CON %00000011 ' Command "read temperature"
cmdhr CON %00000101 ' Command "read humitity"
'** Variables
result VAR WORD ' RAW Data from Sensor
chksum VAR BYTE ' Checksum
cmd VAR WORD ' Sensor Command
RHlin VAR WORD ' Rel. Humidity (RH) Linear (% *10)
RHtc VAR WORD ' Rel. Humidity (RH) temp. compensated (% *10)
Temp VAR WORD ' Temperature (°C *100)
i VAR BYTE
maxi VAR WORD
mini VAR WORD
maxhr VAR WORD
minhr VAR WORD
flag VAR BIT
flag = 0
maxi = 0
mini = 0
maxhr = 0
minhr = 0
PAUSE 1000
main:
'SEROUT2 GPIO.5,16468,["COMIENZO...",10,13]
GoSub init
cmd = cmdtr
GoSub readsensor
Temp=result-3995
GoSub init
cmd = cmdhr
GoSub readsensor
RHlin=(26542-(54722**result+result))**result-40 ' RH linear
RHtc=655+(result*5)+(result**15917)
RHtc=(RHtc**(Temp/10+2480))-(RHtc**2730)+RHlin ' RH temp. compensated
'++++++++++++++++++++++++++++++++++++++++++
if flag = 0 then mini = Temp
if flag = 0 then minhr = RHtc
if Temp > maxi then maxi = Temp
if Temp < mini then mini = Temp
if RHtc > maxhr then maxhr = RHtc
if RHtc < minhr then minhr = RHtc
flag = 1
DEBUG "TEMP",DEC2 temp/100,".",DEC1 temp/10," - %HR:",DEC2 RHTC/10,".",DEC1 RHTC,10,13
LCDOUT $fe,128, "TEMP = ",DEC2 temp/100,".",DEC1 temp/10," C"
LCDOUT $fe,192,"HR = ",DEC2 RHTC/10,".",DEC1 RHTC," %"
PAUSE 5000
LCDOUT $fe,1
LCDOUT $fe,128, "Max T = ",DEC2 maxi/100,".",DEC1 maxi/10," C"
LCDOUT $fe,192, "Min T = ",DEC2 mini/100,".",DEC1 mini/10," C"
PAUSE 5000
LCDOUT $fe,1
LCDOUT $fe,128, "Max HR = ",DEC2 maxhr/10,".",DEC1 maxhr," %"
LCDOUT $fe,192, "Min HR = ",DEC2 minhr/10,".",DEC1 minhr," %"
PAUSE 5000
LCDOUT $fe,1
GoTo main
'** Iniciar Sensor
init:
High dta
Low clk
For i=1 to 10
High clk
Pause 1
Low clk
Pause 1
Next i
Call tstart
Return
'** Comienzo de Transferencia
tstart:
High clk
Pause 1
Low dta
Pause 1
Low clk
Pause 1
High clk
Pause 1
High dta
Pause 1
Low clk
Return
'** Leyendo Datos del SHT
readsensor:
GoSub tstart
GoSub WaitSensor
ShiftOut dta,clk,1,[cmd\8] ' send command
Input dta ' wait acknowledge
Low clk
While dta=1
Wend
PulsOut clk,10 ' send ack
While dta=0
Wend
While dta=1 ' wait for conversion to complete
Wend
Low clk
ShiftIn dta,clk,0,[result.highbyte\8] ' get first byte
Low dta
PulsOut clk,10 ' send ack
ShiftIn dta,clk,0,[result.lowbyte\8] ' get second byte
Low dta
PulsOut clk,10 ' send ack
ShiftIn dta,clk,0,[chksum\8] ' get third byte (checksum)
High dta
PulsOut clk,10 ' send ack
Input dta ' End of Transmission
Input clk
Return
WaitSensor:
result=4096
Loop:
result=result-1
IF dta && result.bit11 Then Loop
Return
end