Sensor de temperatura DALLAS DS1621
O DS1621 é um sensor de temperatura que pode
medir de -55°C até +125°C, incrementando de 0.5°C.
Possui três pinos de endereço. Os 4 bits mais
significativos tem o endereço 1001 e mais três bits de
endereço formado por A0, A1, A2 e um ultimo bit
indicando a operação de leitura(1) ou escrita (0) .
A temperatura é armazenada em 9 bits, os 8
primeiros bit possuem o valor da temperatura, o ultimo bit
armazena a parte fracionária da temperatura; 1 para 0,5 e
0 para quando não há parte fracionaria .
O Pino Tout é um gatilho para sinalizar que ouve
aumento de temperatura além do valor definido em
variável, utilizado como interrupção.
A comunicação com o sensor é feita através da
interface I2C
Comandos suportados pelo DS1621
• Ler temperatura [AAh] Resulta a temperatura em 2
bytes.
• Acessar TH [A1h]
acessar
o registrador da
temperatura (Parte alta do registrador).
• Acessar TL [A2h]
acessar
o registrador da
temperatura (Parte baixa do registrador).
• Acessar configuração [ACh] Acessar configuração do
sensor.
• Ler Counter [A8h].
• Ler Slope [A9h].
• Iniciar Conversão [EEh].
• Parar Conversão [22h].
BLOCO INTERNO DO DS1621
FORMATO DA TEMPERATURA LIDA
(COMPLEMENTO DE 2)
PROTOCOLO I2C
PROGRAMA EXEMPLO PARA LER O DS1621
'Enregistrer avec une extension BAS pour compiler
Include "16F877.inc"
'Programme pour PICPIC16F877
Include "I2CSOFT.BAS"
'utilise le bus 2C
Include "UART.BAS"
'pour affichage sur PC
Byte MSB
Byte LSB
byte neg
Declare Sub GetTemperatura()
Declare Sub ConverteLSB()
Declare Sub ConverteMSB()
debut:
I2CInit (I2C_20Mhz)
Serinit _9600_BAUD_20MHZ
Pause 200
SerOut "Dallas 1621"
SerOutCar(0x0D)
SerOutCar(0x0A)
trava:
GetTemperatura()
ConverteMSB
ConverteLSB
select neg
case 1 : SerOut "-", MSB , ".", LSB
case 0 : SerOut MSB , ".", LSB
end select
Pause 200
Goto trava
sub ConverteMSB()
neg = 0
if MSB > 127 then
MSB = MSB XOR 255
neg = 1
end if
end sub
sub ConverteLSB()
if LSB = 128 then
LSB = 5
else
LSB = 0
if neg = 1 then MSB = MSB + 1
end if
end sub
Sub GetTemperatura()
I2CSendStart()
I2CSendByte(0x90) ' Reads ID0, change to &H92 for ID1, &H94 for ID2 and so
on...
I2CReadAck()
I2CSendByte(0xAC)
I2CReadAck()
I2CSendByte(0x20)
I2CReadAck()
I2CSendStop()
I2CSendStart()
I2CSendByte(0x90)
I2CReadAck()
I2CSendByte(0xEE)
I2CReadAck()
I2CSendStop()
I2CSendStart()
I2CSendByte(0x90)
I2CReadAck()
I2CSendByte(0xAA)
I2CReadAck()
I2CSendStop()
I2CSendStart()
I2CSendByte(0x91)
I2CReadAck()
MSB = I2CReadByte()'I2crbyte MSB , Ack
I2CSendAck()
LSB = I2CReadByte()'I2crbyte LSB , Nack
I2CSendNotAck()
I2CSendStop()
Return
End Sub
End
IMAGEM DA SIMULAÇÃO
Download

Sensor de temperatura DALLAS DS1621