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