Descrição geral do sensor DS18B20
O DS18B20 é um sensor de temperatura da Dallas/Maxim com saída digital programável de 9 a 12 bits. Contém também uma função de alarme, também programável, cujos dados são armazenados em uma área não volátil de memória EEPROM.
A comunicação entre o microcontrolador e o sensor se dá sobre um barramento de um fio, do qual pode-se derivar sua alimentação (parasitic power).
A temperatura de operação é de -55 a +125°C, com uma precisão de ±0.5°C entre -10 e +85°C.
Cada unidade de DS18B20 contém um código serial único de 64 bits que permite o funcionamento de diversos sensores no mesmo barramento.
É disponível nos encapsulamentos TO-92 de três pinos, e em SO e uSO com 8 pinos para montagem SMD.
O componente pode ser alimentado por tensão entre 3 e 5,5V com uma corrente de standby de menos de 3uA. A conversão de temperatura em 12 bits é realizada em 750 ms, enquanto a medição em 9 bits acontece em menos de 94 ms.
Estrutura interna do DS18B20
A figura a seguir apresenta o bloco diagrama do DS18B20.
Um sensor interno de temperatura gera uma tensão proporcional a temperatura, que é digitalizada e memorizada em dois bytes da memória scratchpad. Adicionalmente, a área de memória scratchpad permite o acesso aos registros de 1 byte de alarme alto a baixo de temperatura programáveis (TH e TL) e ao registro de configuração.
O registro de configuração permite ao usuário definir a resolução da conversão digital em 9, 10, 11 ou 12 bits. Esses 3 registros são copiados em memória não volátil EEPROM que conserva os dados armazenados na falta de energia. O dispositivo contém também um gerador de CRC que permite ao mestre verificar a integridade dos dados transmitidos. A ROM de 64 bits contém o código serial único do dispositivo.
O DS18B20 utiliza um barramento 1-Wire da Maxim que implementa a comunicação utilizando um único sinal (mais o GND). O barramento é open-drain e demanda um resistor de pull-up, pois todos os dispositivos ligados ao barramento são three-state ou open-drain. O microprocessador mestre identifica cada dispositivo por seu código único. Dado que o código possui 64 bits, o número possível de códigos é muito elevado.
A alimentação direta do barramento (parasitic power) é obtida derivando por um diodo a tensão de nível alto (estado de inatividade), e carregando um capacitor interno Cpp que fornece energia durante os momentos em que o barramento está em nível baixo. Essa função é ativada quando se liga o pino Vdd ao GND.
Medição de temperatura com o DS18B20
A funcionalidade básica do DS18B20 é a medição de temperatura com saída diretamente em digital. A resolução do sensor de temperatura é configurada pelo usuário em 9, 10, 11 e 12 bits, correspondendo a incrementos 0,5 °C, 0.25 °C, 0.125 °C, e 0,0625 °C por bit respectivamente.
A resolução pré-definida de fábrica é 12 bits e o DS18B20 é posto em um estado de baixo consumo.
Para realizar uma medição de temperatura, o mestre deve enviar um comando Convert T [44h]. Após a conversão, o dado resultante é armazenado em dois bytes do registro scratchpad e o DS18B20 retorna ao estado inativo. O mestre deverá solicitar uma cópia do scratchpad para ler a temperatura.
Se o DS18B20 é alimentado com uma tensão externa ao barramento, o mestre pode enviar um “read time slot” (função descrita mais adiante) após o comando Convert T, e o DS18B20 responderá transmitindo 0 enquanto a conversão da temperatura está um curso e 1 quando a conversão é concluída.
Se o DS18D20 é alimentado pelo barramento, esta técnica de comunicação não pode ser utilizada pois o barramento deve ser enviado para nível alto por um pull-up forte durante toda a conversão de temperatura de forma a garantir a alimentação com corrente suficiente. Os requisitos do barramento para utilizar a alimentação parasita são detalhados mais adiante.
A temperatura é calibrada em graus Celsius. Para aplicações em graus Fahrenheit é necessário utilizar uma tabela ou rotina de conversão. A informação de temperatura é armazenada como um número decimal em complemento de dois (sign-extended two’s complement) no registro de temperatura.
Os bits de sinal (S), indicam se a temperatura é positiva ou negativa: para o números positivos, S = 0 e para os números negativos, S = 1.
Se o DS18B20 é configurado para a resolução de 12 bits, todo o registro de temperatura conterá dados válidos. Para a resolução de 11 bits, o bit 0 é indefinido. Na resolução de 10 bits, os bits 0 e 1 serão indefinidos, e na resolução de 9 bits, os bits 0, 1 e 2 serão indefinidos. A tabela seguinte fornece exemplos de dados na saída digital e suas correspondentes temperaturas de leitura para as resoluções de conversão em 12 bits.
Quando o dispositivo é alimentado, contém o valor inicial correspondente a +85°C.
Este módulo possui quatro canais de leitura de sensores DS18B20 ou SHT11 de temperatura e umidade. As precisões de conversão são de 9 a 12 bits.
Sinalização de alarme no DS18B20
Ao final da conversão AD, o valor de temperatura é comparado com dois valores de ativação de alarme definidos pelo usuário e armazenados nos bytes TH e TL.
O bit de sinal (S) indica se o valor é positivo ou negativo. Para os números positivos, S = 0 e para os números negativos, S = 1. Os registros TH e TL estão em memória não volátil (EEPROM) de forma a conservar os dados quando o dispositivo está desenergizado. Se pode acessar TH e TL através dos bytes 2 e 3 da memória scratchpad.
Apenas os 8 bits de 11 a 4 do registro de temperatura são utilizados na comparação com TH e TL (que são registros de 8 bits). Se a temperatura medida é inferior ou igual a TL, ou superior ou igual a TH, um flag de alarme é acionado internamente no DS18B20. Este flag é atualizado após cada medição da temperatura; portanto, se a condição de alarme cessa, o flag será desligado após a próxima conversão de temperatura.
O dispositivo mestre pode controlar o estado de sinalização de alarme de todos os DS18B20 presentes no barramento enviando um comando de busca de alarme [ECh]. Dispositivos eventualmente com a flag de alarme acionada responderão ao comando. Se uma condição de alarme e os ajustes de TH ou TL são alteradas, uma nova conversão de temperatura deve ser feita para validar a condição de alarme.
Alimentação do DS18B20
O DS18B20 pode ser alimentado por uma fonte externa pelo pino VDD.
Outra modalidade é a alimentação “parasita”, que permite funcionar sem um alimentação externa local.

Essa modalidade é útil em aplicações que exigem a monitoração de uma temperatura remota ou de limitação de espaço. Quando o DS18B20 é usado na modalidade de alimentação “parasita”, o pino VDD deve ser ligado à massa.
Contudo, para poder usufruir o desempenho máximo do dispositivo, é necessário utilizar um MOSFET como um pull-up forte, o qual deve ser colocado no estado de condução durante a fase de conversão, de forma a fornecer corrente suficiente de alimentação. Isso exige um sinal adicional de comando no dispositivo mestre. O pull-up deve ser desligado durante a fase na qual um dispositivo escravo ou o mestre acessam o barramento (sem o que, aconteceria um caminho direto entre o VCC e o GND através do line driver do dispositivo que acessa o barramento).
Identificador a 64 bits
Cada DS18B20 contém um código identificador único de 64 bits memorizado na ROM.
Os 8 bits menos significativos do código ROM contém o código da família do DS18B20 que é 28h. Os 48 bits subsequentes contém o número de série único. Esse número é inserido no momento da fabricação do chip e é diferente de um componente para outro, portanto, cada escravo no barramento 1-Wire possui um identificador próprio e diferente de qualquer outro. Esta solução permite compor o barramento com vários dispositivos, que o mestre irá acessar por seus identificadores.
Os 8 bits mais significativos contém um código de checagem cíclica redundante (CRC) calculado com base nos 56 bits do código ROM.
Memória do DS18B20
A memória do DS18B20 é organizada como na figura que segue:
A memória é constituída de uma área SRAM adicionada de uma área EEPROM para os registros altos e baixos de ativação dos alarmes (TH e TL) e registro de configuração.
Observe-se que se a função de alarme não for utilizada, os registros TH e TL podem servir de memória de uso geral não volátil, caso em que não se deverá considerar o flag de alarme.
Todos os comandos relativos à memória são descritos em detalhes na seção Comandos.
Detalhe dos registros:
- Byte 0 e byte 1 do scratchpad contém o LSB e MSB do registro de temperatura, respectivamente. Esses byte são apenas de leitura.
- Byte 2 e 3 fornecem acesso aos registros TH e TL.
- Byte 4 contém os dados do registro de configuração.
- Byte 5, 6, e 7 são reservados para uso interno e não podem ser sobre escritos.
- Byte 8 é de leitura apenas e contém o código CRC para os bytes de 0 a 7 do scratchpad.
Para escrever nos bytes 2, 3 e 4 se utiliza o comando Write [4Eh]; os dados devem ser transmitidos ao DS18B20 iniciando com o bit menos significativo do byte 2.
Para verificar a integridade dos dados se pode reler o scratchpad com o comando Read Scratchpad [BEh]. Durante a leitura, os dados são transferidos pelo barramento 1-Wire a partir do bit menos significativodo byte 0. Para transferir o TH, o TL e os dados de configuração do scratchpad para EEPROM, o mestre deve enviar o comando Copy Scratchpad [48h].
Os dados na EEPROM são mantidos quando o dispositivo está desligado; quando o dispositivo é alimentado, os dados da EEPROM são carregados nas respectivas posições do scratchpad.
Os dados podem também ser recarregados da EEPROM para o scratchpad a qualquer momento, utilizando o comando Recall E2 [B8h]. Dado que a operação exige um certo tempo, o mestre pode enviar a intervalos de tempo uma solicitação de leitura e o DS18B20 informará o estado transmitindo 0 enquanto a solicitação está em curso e 1 quando a solicitação tiver sido concluída.
O registro de configuração do DS18B20
O byte 4 da memória scratchpad contém o registro de configuração, que é organizado como segue:

O usuário pode ajustar a resolução de conversão utilizando os bits R0 e R1 neste registro.
O bit 7 e os bits 0 a 4 do registro de configuração são reservados para uso interno do dispositivo.
Observe-se que a resolução influi no tempo de conversão: quanto maior a resolução, maior o tempo necessário para completar a conversão.
O valor default na energização desses bits é R0=1 e R1=1 (resolução de 12 bits).
CRC
O código ROM CRC é calculado sobre os primeiros 56 bits do código ROM e é armazenado no byte mais significativo da memória ROM. O código CRC scratchpad é calculado sobre os dados memorizados no scratchpad e, por consequência, é alterado quando os dados no scratchpad mudam.
Os códigos CRC fornecem ao mestre um meio de validação quando os dados são enviados pelo DS18B20. Para verificar a validade da transmissão, o mestre deve recalcular o CRC dos dados recebidos e então comparar o valor recebido com o valor calculado. Se o valor de CRC calculado for igual ao valor recebido, os dados foram recebidos sem erro. A validação do CRC e a decisão de prosseguir com a comunicação são determinações exclusivas do mestre. Não existe internamente ao DS18B20 um circuito que impeça a comunicação de comandos do mestre se houver falhas de CRC. A função polinomial equivalente ao CRC é:
CRC = X8 + X5 + X4 + 1
Esquematicamente:

Se trata de um registro de deslocamento binário (shift register) e três portas XOR; os bits do registro de deslocamento são inicializados em zero. Inicia-se com o bit menos significativo do código ROM ou o bit menos significativo no scratchpad, então um bit por vez é movido no registro de deslocamento. Após a movimentação no bit 56 da ROM ou no bit mais significativo do byte 7 do scratchpad o CRC estará calculado.
Hardware do barramento 1-Wire
O barramento 1-Wire tem, por definição, apenas uma linha de dados. Cada dispositivo (mestre ou escravo) se conecta ao barramento por uma interface open-drain ou tri-state. Isso permite a cada dispositivo liberar o barramento quando não estão transmitindo dados de forma que o barramento possa ser utilizado por outros dispositivos. A porta 1-Wire do DS18B20 é open-drain com um circuito interno equivalente àquele mostrado na figura seguinte.
Na forma mais simples, o barramento 1-Wire necessita apenas uma porta I/O do microcontrolador, ajustável como saída ou entrada e um resistor de pull-up externo de cerca de 5 kΩ; nesse modo, o estado de inatividade é nível alto. Se o barramento form mantido baixo por mais de 480μs, todos os dispositivos de barramento serão resetados.
O dispositivo sem o emprego de um pull-up forte deve ser alimentado por uma alimentação própria.
O pull-up forte demanda um I/O adicional do microprocessador para comandar o MOSFET e instruções adicionais ao programa de controle. Adicionalmente, é necessário garantir que o MOSFET de pull-up seja desabilitado durante a fase de comunicação, de forma a evitar um curto circuito entre VDD e GND através dos semicondutores internos aos dispositivos conectados ao barramento quando os mesmos levam o barramento ao nível baixo.
O acesso ao DS18B20
A sequência para o acesso é a seguinte:
- Inicialização;
- Comando ROM (seguido de uma troca qualquer de dados quando solicitados);
- Comando Função (seguido de uma troca qualquer de dados quando solicitados).
É muito importante seguir esta sequência em cada comunicação, visto que o DS18B20 não responde se um passo da sequência faltar. As exceções a esta regra são os comando Busca ROM [F0h] e Busca Alarme [ECh]. Após a emissão de um desses comandos, o mestre deve retornar ao passo 1 da sequência.
Inicialização do DS18B20
Todas as comunicações sobre o barramento 1-Wire iniciam com uma sequência de inicialização. A sequência de inicialização é constituída de um impulso de reset transmitido pelo mestre e seguido de um impulso de presença transmitido pelos escravos. O impulso de presença permite ao mestre saber que dispositivos escravos presentes no barramento estão prontos a operar.
Comandos ROM
Após o mestre liberar o impulso de presença, poderá enviar um comando ROM. Esses comandos permitem identificar um dispositivo específico (caso estejam presentes mais de um no barramento) determinando também quantos e quais dispositivos estão ligados ou se um dispositivo possui registro de alarme ativo. Existem cinco comandos ROM, e cada comando possui 8 bits. O mestre deve enviar um comando ROM apropriado antes de um comando de função. Um diagrama de fluxo do funcionamento dos comandos ROM é mostrado no anexo A.
Os comandos ROM são os seguintes:
Busca ROM [F0h]
Quando um sistema é acessado inicialmente, o mestre deve identificar os códigos ROM de todos os dispositivos escravos no barramento, para determinar o número de escravos e tipos de dispositivos. O mestre descobre os códigos ROM através de um processo de eliminação que exige um ciclo de Busca ROM (isso é, de um comando Busca ROM seguido de uma troca de dados) o número de vezes necessário para identificar todos os dispositivos presentes.
Se apenas um dispositivo está presente no barramento, o comando Lê ROM pode ser utilizado no lugar do comando Busca ROM.
Uma explicação completa do procedimento de Busca ROM está contido no documento iButton® no Standards em www.maxim-ic.com/ibuttonbook.
Após cada ciclo de Busca ROM, o mestre deve retornar ao passo 1 (inicialização) na sequência da transação.
Lê ROM [33h]
Este comando pode ser utilizado apenas quando existe apenas um escravo no barramento. Permite ao mestre do barramento ler o código ROM de 64 bits do escravo sem utilizar o procedimento de Busca ROM. Se este comando é utilizado quando estão presentes mais de um dispositivo no barramento, uma colisão de dados irá acontecer pois todos os dispositivos irão responder ao mesmo tempo.
Match ROM [55h]
O comando seguido de uma sequência de 64 bits de código ROM permite ao mestre comunicar com um dispositivo específico quando se tem um barramento multidrop ou single-loop. Apenas o escravo que corresponde exatamente a sequência transmitida responderá ao comando função enviado pelo mestre; todos os outros dispositivos no barramento aguardarão um impulso de reset.
Skip ROM [CCh]
O mestre pode utilizar este comando para acessar todos os dispositivos do barramento simultaneamente sem enviar nenhuma informação de código ROM. Por exemplo, o mestre pode ordenar a todos DS18B20 do barramento a executar uma conversão de temperatura simultaneamente enviando um comando SKIP ROM seguido de um comando Converter T [44h].
Observe-se que o comando Lê Scratchpad [BEh] pode seguir o comando Skip ROM apenas se existir apenas um dispositivo escravo no barramento. Nesse caso, se poupa tempo permitindo ao mestre ler do escravo sem ter de enviar um código ROM de 64 bits. Um comando Skip ROM seguido de um comando de leitura scratchpad causará uma colisão de dados no barramento se existirem mais de um dispositivo escravo transmitindo dados ao mesmo tempo.
Busca Alarme [ECh]
O funcionamento deste comando é idêntico ao funcionamento do comando Busca ROM, salvo ao fato que responderão apenas os escravos com um flag de alarme ativo. Este comando permite ao mestre mapear os eventuais DS18B20 que tenham sinalizado uma condição de alarme seguido a conversão de temperatura mais recente. Após cada ciclo de Busca Alarme, o mestre deve retornar ao passo 1 (inicialização) na sequência de transações.
Comandos de Função
Após o mestre do barramento ter utilizado um Comando ROM para acessar um DS18B20 com o qual deseja comunicar-se, o mestre pode enviar um comando função. Esses comandos permitem ao mestre escrever e ler da memória scratchpad do DS18B20, iniciar conversões de temperatura e determinar o modo de alimentação. Os comandos função descritos a seguir tem o diagrama de fluxo apresentado no anexo B.
Os Comandos de Função são os seguintes:
Convert T [44h]
Este comando inicia uma conversão única de temperatura. Após a conversão, o dado resultante é memorizado no registro de temperatura da memória scratchpad e o DS18B20 retorna ao estado de inatividade em baixo consumo.
Cuidados com a alimentação:
- Se o dispositivo estiver utilizando a modalidade de alimentação “parasita”, dentro de 10μs (máx) após o envio deste comando, o mestre deve ativar um pull-up forte no barramento 1-Wire pelo tempo que durar a conversão (tCONV).
- Se o DS18B20 é alimentado por uma fonte externa, o mestre pode enviar em intervalos de tempo, impulsos de leitura após o comando Convert T e o DS18B20 responderá transmitindo 0 se a conversão da temperatura estiver em curso e 1 quando a conversão for concluída. Em modalidade de alimentação “parasita” esta técnica de comunicação não pode ser utilizada enquanto o barramento está ligado ao VCC pelo pull-up forte durante a conversão.
Write Scratchpad [4Eh]
Este comando permite ao mestre escrever 3 bytes de dados no scratchpad do DS18B20. O primeiro byte dos dados é escrito no registro TH (byte 2 do Scratchpad), o segundo byte é escrito no registro TL (byte 3), e o terceiro byte é escrito no registro de configuração (byte 4). Os bytes devem ser transmitidos iniciando pelo bit menos significativo. A escrita dos três bytes deve ser completada antes de um reset do barramento ou os dados poderão ser corrompidos.
Read Scratchpad [BEh]
Este comando permite ao mestre ler o conteúdo do scratchpad. A transferência dos dados inicia con o bit menos significativo do byte 0 e continua até o nono byte ( 8 bytes + CRC). o mestre pode enviar um reset para interromper a leitura a qualquer momento, se for necessária apenas parte dos dados.
Copy Scratchpad [48h]
Este comando copia o conteúdo dos bytes TH, TL e registro de configuração (byte 2, 3 e 4) do scratchpad para a memória EEPROM. Se o dispositivo utiliza a alimentação “parasita”, dentro de 10μs (máx) após a emissão deste comando, o mestre deve ativar o pull-up forte sobre o barramento 1-Wire por 10 ms (min).
Recall E2 [B8h]
Este comando solicita os valores de alarme (TH e TL) e dados de configuração da memória EEPROM para o scratchpad. O dispositivo mestre pode enviar a intervalos de tempo, solicitações de leitura, e o DS18B20 indica o estado transmitindo 0 enquanto a solicitação estiver em curso e 1 quando a mesma for concluída. A operação de solicitação acontece automaticamente na energização, então os dados validos são disponíveis no scratchpad assim que o dispositivo é alimentado.
Read Power Supply [B4H]
Este comando permite ao mestre saber se algum DS18B20 no barramento utiliza alimentação “parasita”. Durante o intervalo de tempo de leitura, os DS18B20 alimentados pelo modo “parasita” levarão o barramento para nível baixo, enquanto que aqueles alimentados com fonte externa deixarão o barramento em nível alto. Isto serve para identificar quando é necessário ativar o pull-up forte.
Exemplos de comunicação entre mestre e DS18B20
Este é o procedimento no caso de existirem mais de um DS18B20 no barramento:
Mestre |
Dado |
Função |
Tx |
Reset |
O mestre envia um impulso de reset |
Rx |
Presença |
DS18B20 responde com um impulso de presença |
Tx |
55h |
O mestre envia o comando Match ROM |
Tx |
64 bit ROM code |
O mestre envia o código ROM do dispositivo desejado |
Tx |
44h |
O mestre envia o comando Convert T |
Tx |
DQ alto |
E’ solicitado o pull-up se existirem dispositivos com alimentação parasita |
Tx |
Reset |
O mestre envia um impulso de reset |
Rx |
Presença |
DS18B20 responde com um impulso de presença |
Tx |
55h |
O mestre envia o comando Match ROM |
Tx |
64 bit ROM code |
O mestre envia o código ROM do dispositivo desejado |
Tx |
BEh |
O mestre envia o comando Read Scratchpad |
Rx |
9 data bytes |
O escravo envia o conteúdo do scratchpad + CRC |
É tarefa do mestre verificar se o CRC recebido está correto.
Se existe apenas um DS18B20 no barramento e são solicitados os registros internos:
Mestre |
Dado |
Função |
Tx |
Reset |
O mestre envia um impulso de reset |
Rx |
Presença |
DS18B20 responde com um impulso de presença |
Tx |
CCh |
O mestre envia um comando Skip ROM |
Tx |
4Eh |
O mestre envia um comando Write Scratchpad |
Tx |
3 bytes |
O mestre envia os 3 bytes para o scratchpad |
Tx |
Reset |
O mestre envia impulso de reset |
Rx |
Presença |
DS18B20 responde com o impulso de presença |
Tx |
CCh |
O mestre envia o comando Skip ROM |
Tx |
BEh |
O mestre envia o comando Read Scratchpad |
Rx |
9 data bytes |
O escravo envia o conteúdo do scratchpad junto com o CRC |
Tx |
Reset |
O mestre envia o impulso de reset |
Rx |
Presença |
DS18B20 responde com o impulso de presença |
Tx |
CCh |
O mestre envia o comando Skip ROM |
Tx |
48h |
O mestre envia o comando Copy Scratchpad |
Tx |
DQ alto |
É necessário o pull-up o DS18B20 a alimentação é “parasita” |
Nota:
- É tarefa do mestre verificar se o CRC recebido está correto e tomar a ação necessária.
- Durante o ajuste dos registros internos, no seguimento do comando Write Scratchpad devem ser transmitidos os três bytes, mesmo que os alarmes não sejam necessários a aplicação.
Se existir apenas um DS18B20 no barramento e é solicitada a leitura da temperatura:
Mestre |
Dados |
Função |
Tx |
Reset |
O mestre envia o impulso de reset |
Rx |
Presença |
DS18B20 responde com o impulso de presença |
Tx |
CCh |
O mestre envia um comando Skip ROM |
Tx |
44h |
O mestre envia o comando Convert T |
Tx |
DQ alto |
É necessário acionar o pull-up forte se DS18B20 a alimentação é “parasita”.
Deve-se aguardar o tempo de conversão relativo a resolução ajustada. |
Tx |
3 bytes |
O mestre envia os três bytes ao scratchpad |
Tx |
Reset |
O mestre envia um impulso de reset |
Rx |
Presença |
DS18B20 responde com o impulso de presença |
Tx |
CCh |
O mestre envia o comando Skip ROM |
Tx |
BEh |
O mestre envia o comando Read Scratchpad |
Rx |
9 data bytes |
O escravo envia o conteúdo do scratchpad junto com o CRC |
Tx |
Reset |
O mestre envia o impulso de reset |
O mestre pode emitir um reset para interromper a leitura a qualquer momento se for necessária apenas parte dos dados, de forma que, se apenas a leitura da temperatura é desejada, se pode interromper a comunicação após os primeiros dois bytes. Deve-se considerar que a falta do CRC na comunicação reduz a segurança sobre a integridade dos dados recebido, principalmente se a fiação estiver sujeita a ruídos interferentes.
Barramento 1-Wire
O DS18B20 utiliza um rigoroso protocolo de comunicação 1-Wire para garantir a integridade dos dados. Diversos tipos de sinalizações são definidas neste protocolo: reset, impulso de presença, escrita de 0 e 1, leitura de 0 e 1. O barramento mestre executa todos as sinalizações, com exceção do impulso de presença que é emitido pelo escravo em resposta ao reset.
Reset e Impulso de Presença.
Todas as comunicações com o DS18B20 iniciam com uma sequência de reset, que consiste de um impulso enviado pelo mestre e respondido com um impulso de presença pelo DS18B20.
Quando o DS18B20 envia o impulso de presença em resposta ao reset, indica para o mestre que está presente no barramento e pronto para funcionar. O impulso de reset força o barramento ao nível baixo por um mínimo de 480 μs. O mestre então libera o barramento que passa ao modo de recepção (RX). Quando o barramento é liberado, a resistência de pull-up leva o barramento para nível alto. Quando o DS18B20 detecta a subida do nível, aguarda de 15μs a 60μs e então transmite um impulso de presença, colocando o barramento em nível baixo por um tempo entre 60μs e 240μs.
Se estiverem presentes mais DS18B20, todos responderão com um impulso de presença. É tarefa do mestre analisar o barramento e identificar os dispositivos conectados.
Intervalos de escrita – Write time slots
Existem dois tipos de escrita: “Write 1” e “Write 0”. O mestre utiliza intervalos diferente de tempo para escrever 1 e 0. Todos os intervalo de escrita devem ter no mínimo 60μs de duração, com um tempo de recuperação mínimo de 1μs entre intervalos. Ambos os tipos de intervalos de tempo de escrita são executados pelo mestre levando o barramento para nível baixo.
Para gerar um intervalo de tempo de escrita 1, após ter colocado o barramento em nível baixo, o mestre deve liberar em 15μs. Quando o barramento é liberado, o resistor de pull-up leva o barramento para nível alto. Para gerar um intervalo de tempo de escrita 0, após ter colocado o barramento em nível baixo, o mestre deve continuar a manter o barramento em nível baixo pelo tempo mínimo de 60μs. O DS18B20 amostra o barramento durante uma janela de tempo que dura de 15μs a 60μs. Se o barramento estiver em nível alto dentro da janela de amostragem, um 1 é escrito no DS18B20. Se a linha estiver em nível baixo, um 0 é escrito.
Intervalo de leitura – Read Time Slots
O mestre pode gerar, a intervalos de tempo, impulsos de leitura logo após a emissão de um comando Read Scratchpad [BEh] ou Read Power [B4H], de modo que o DS18B20 possa fornecer os dados solicitados. Além disso, o mestre pode gerar intervalos de leitura após ter emitido o comando Convert T [44h] ou o Recall E2 [B8h] para saber o estado de operação. Todos os intervalos de leitura deverão ter no mínimo 60μs, com um tempo mínimo de recuperação de 1μs entre intervalos. Um intervalo de tempo de leitura é executado pelo mestre colocando o barramento em nível baixo por um mínimo de 1μs e depois liberando o barramento. Após o mestre ter executado o intervalo de leitura, o DS18B20 começará a transmitir um 1 ou um 0 no barramento: um 1 é executado liberando o barramento ao nível alto e o 0 é executado levando o barramento a nível baixo.
Quando transmite o 0, o DS18B20 libera o barramento até o término do intervalo de tempo; o nível do barramento é levado para alto pelo pull-up.
Os dados enviados pelo DS18B20 são validos por 15μs após a borda de descida do intervalo de tempo da leitura. Portanto, o mestre deve liberar o barramento e então amostrar o estado dentro do intervalo de 15μs desde o início do intervalo.
A figura seguinte mostra que a soma de TINIT, TRC e TSAMPLE deve ser inferior a 15μs para um intervalo de tempo de leitura.
A figura seguinte mostra que a marge de temporização do sistema é maximizada mantendo TINIT e TRC o mais breves possível e posicionando o tempo de amostragem do mestre durante o intervalo de tempo de leitura até o fim do período de 15μs.
Anexo A – ROM Command Flowchart

Anexo B – Function Command Flowchart.
Leia também