3 Comentários

Módulo Tiny RTC 1-Wire – Parte 3

i2c
Este post faz parte da série Módulo Tiny RTC I2C. Leia também os outros posts da série:

Continuamos nosso estudo com o Módulo Tiny RTC I2C, e apresento para vocês a última parte dessa série. Nesta parte 3 vamos analisar o sensor de temperatura DS18B20 que o módulo permite adicionar, usando comunicação 1-Wire. Vamos entender como é feito o protocolo de comunicação e quais suas principais características.

Para quem não acompanhou, podem acessar aqui a parte 1 e parte 2 da nossa série. O Módulo Tiny RTC I2C pode ser encontrado no FILIPEFLOP, assim como os cabos utilizados para a montagem das experiências.

Esta série foi desenvolvida com o hardware oferecido pelo loja FILIPEFLOP, a qual foi fundamental para o desenvolvimento deste projeto, pois sem o auxílio do hardware, o projeto se tornaria inviável.

logoFF

Comunicação 1-Wire

Muito conhecida e aplicada principalmente nos iButtons, a comunicação 1-Wire (ou One-Wire) foi desenvolvida pela Dallas Semiconductor, posteriormente adquirida pela Maxim Integrated. Trata-se de uma comunicação serial bidirecional assíncrona half-duplex, desenvolvida para que toda a comunicação aconteça com apenas uma única linha de comunicação. Daí o nome 1-Wire.

O formato do Bit

Assim como a comunicação I2C, a comunicação 1-Wire é feita através de um dreno aberto. Isso significa que o bit 0 acontece quando o transistor está fechado, e o bit 1 se dá através de um resistor de pull-up externo ao circuito.

Barramento 1-Wire
Figura 1: Barramento 1-Wire.

O estado idle da comunicação, ou seja, o estado inativo de comunicação, é mantendo o valor 1 no barramento de comunicação. Cada bit é transmitido em um tempo de exatamente 60µs, iniciado por uma borda de descida. A largura em 0 é que define se a comunicação é um bit 0 ou um bit 1.

Escrita de um bit 0 e 1 respectivamente na comunicação 1-Wire.
FIgura 2: Escrita de um bit 0 e 1 respectivamente.

De maneira similar, acontece a leitura de um bit. Um sinal de 0 é gerado com largura específica, e o barramento é liberado para que o componente escreva 0 ou 1 dependendo do valor a ser transmitido.

Leitura de um bit no barramento 1-Wire.
Figura 3: Leitura de um bit no barramento 1-Wire.

Toda a comunicação 1-Wire é sincronizada com um sinal de reset. Trata-se de um pulso 0 com largura superior a 480µs. Podemos observar esse sinal na imagem abaixo.

Pulso de reset na comunicação 1-Wire.
Figura 4: Pulso de reset.

Biblioteca 1-Wire

O Arduino já possui uma biblioteca para comunicação 1-Wire. No entanto, ela não está presente nativamente nas bibliotecas do ambiente e precisa ser instalada. Apesar disso, ela pode ser baixada no site oficial do Arduino e instalada facilmente.

http://playground.arduino.cc/Learning/OneWire

O processo é simples, após baixar o OneWire.zip, basta adicioná-lo em seu ambiente. No nosso caso, estamos utilizando a versão 1.6.3 do Arduino.

Adicionando biblioteca 1-Wire no ambiente.
Figura 5: Adicionando uma nova biblioteca no ambiente.

Após instalar a biblioteca, uma nova lista de exemplos é adicionada. Uma delas é específica para nosso sensor de temperatura, e é dele que vamos partir para desenvolver nosso software.

Novas opções na lista de exemplos.
Figura 6: Novas opções na lista de exemplos.

Bits de comunicação 1-Wire

Ao realizar testes com essa biblioteca, pode-se verificar como é formado o bit 0 e 1 que verificamos na carta de tempo anteriormente. Podemos ver abaixo respectivamente os bits 0 e 1.

Transmissão do bit 0 na comunicação 1-Wire.
Figura 7: Transmissão do bit 0.
Transmissão do bit 1 na comunicação 1-Wire.
Figura 8: Transmissão do bit 1.

Dessa forma, podemos analisar a troca de um byte completo. Verificando a troca do byte 8Ah, percebemos que os primeiros bits transmitidos são os menos significativos. Dessa forma, a seguencia de bits para formar o byte 8Ah será 0101.0001, pois começará do menos significativo.

Troca de dados do byte 8Ah.
Figura 9: Troca de dados do byte 8Ah.

Sinal de Reset

Também verificamos o sinal de Reset gerado pela biblioteca. Como verificamos na carta de tempo, é um sinal bastante largo. Após seu envio, um pulso de resposta de um dos componentes ligados a este barramento pode ser verificado.

Pulso de Reset da comunicação 1-Wire.
Figura 10: Pulso de Reset.

Sensor de Temperatura DS18B20 via 1-Wire

Nosso sensor de temperatura se apresenta em um encapsulamento TO-92. É fácil confundi-lo com um BC548, mas sua pinagem de nada tem a ver com um transistor. Trata-se de um circuito integrado inteiro em apenas três pinos.

Encapsulamento do DS18B20.
Figura 11: Encapsulamento do DS18B20.
Pinagem do sensor.
Figura 12: Pinagem do sensor.

Nosso Módulo Tiny RTC I2C possui um espaço específico para esse sensor nesse encapsulamento, fornecendo acesso ao barramento de comunicação 1-Wire no pino DS em ambos os conectores (P1.6 e P2.5). É possível verificar essa conexão no esquemático do módulo.

Esquema de ligação do sensor DS18B20 no Módulo Tiny RTC usando 1-Wire.
Figura 13: Esquema de ligação do sensor DS18B20 no Módulo Tiny RTC I2C.

Verificamos também que o módulo já possui o resistor de pull-up R1, de valor 3K3Ω, montado. Dessa forma, basta apenas a conexão do terminal de acesso com o Arduino.

Montagem do sensor DS18B20 no Módulo Tiny RTC com 1-Wire.
Figura 14: Montagem do sensor DS18B20 no Módulo Tiny RTC I2C.

O sensor pode trabalhar com diferentes tamanhos de palavra. Isso significa que a precisão da medida pode variar de acordo com a necessidade do sistema. No entanto, a velocidade de conversão também está ligada com o número de bits, de forma que a velocidade de conversão também varia. Podemos verificar as possibilidades conforme a tabela abaixo:

N° de BitsTempo de ConversãoPrecisão da Medida
 9 93,75ms 0,5°C
 10187,5ms 0,25°C 
 11375ms 0,125°C 
 12750ms 0,0625°C

Para verificar o funcionamento do sistema, vamos executar o exemplo presente na biblioteca que instalamos logo antes. Esse exemplo (DS18x20_Temperature) faz a leitura dos módulos 1-Wire presentes no sistema e executa a medida de temperatura.

A montagem realizada foi bastante simples, fazendo uso do pino 10 do Arduino, conforme indicado no software. Além da alimentação (Vcc + GND), apenas 1 pino de dados é necessário nessa comunicação 1-Wire.

Esquema de ligação do sensor para comunicação 1-Wire.
Figura 15: Esquema de ligação do sensor.

Ao executar o exemplo DS18x20_Temperature da biblioteca, temos o seguinte resultado no terminal:

Resultado do exemplo DS18x20_Temperature da biblioteca OneWire.
Figura 16: Resultado do exemplo DS18x20_Temperature da biblioteca OneWire.

Para compreender o resultado, vamos analisar o campo Data que foi trocado na comunicação. Essa transferência de dados teve os seguintes resultados.

Temp LSBTemp MSB ThTlConf. RegisterRes.Res.Res.CRC 
A2014B467FFF0E10D8

Temperatura

A temperatura é dada por alguns bits de sinal e um valor em ponto fixo. Sua estrutura possui sempre 16 bits, embora sejam utilizados até 12. O excedente mais significativo será o sinal, sendo 0 para positivo e 1 para negativo.

1514131211109876543210
 S S S S S 26 25 24 23 22 21 20 2-1 2-2 2-3 2-4

A partir dessa informação, podemos calcular que nosso valor 01.A2h, representado pelo valor 0000.0001.1010.0010b. Sabemos que os 5 primeiros bits serão idênticos e representam o sinal, neste caso positivo. Dessa forma, nossa informação de temperatura está nos bits 001.1010.0010b.

0*26= 0*64= 0
0*25= 0*32= 0
1*24= 1*16= 16
1*23= 1*8= 8
0*22= 0*4= 0
1*21= 1*2= 2
0*20= 0*1= 0
0*2-1= 0*0,5= 0
0*2-2= 0*0,25= 0
1*2-3= 0*0,125= 0,125
0*2-4= 0*0,0625= 0

A soma de todos os valores, no caso 16+8+2+0,125, dão o resultado da temperatura. O valor de 26,125°C condiz com o valor de 26,12°C verificado no resultado do teste.

Série "Módulo Tiny RTC I2C"

Módulo Tiny RTC I2C - Parte 1

Módulo Tiny RTC I2C - Parte 2

Referências

[1] Maxim-IC - DS18B20

[2] Atmel - AT24C32

[3] Wikipedia - 1-Wire

[4] Maxim IC

Figura 1 - Fonte: Maxim IC - 1-Wire Comunication

Figura 2 - Fonte: Maxim-IC - DS18B20

Figura 3 - Fonte: Maxim-IC - DS18B20

Figura 4 - Fonte: Maxim-IC - DS18B20

Crédito da Imagem Destacada: Módulo Tiny RTC I2C - FILIPEFLOP

Outros artigos da série

<< Módulo Tiny RTC I2C - Parte 2
Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Arduino » Módulo Tiny RTC 1-Wire - Parte 3
Comentários:
Notificações
Notificar
guest
3 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Fernando Rodrigues
Fernando Rodrigues
04/07/2019 11:54

Muito bacana o projeto,
Eu consigo ligar vários arduinos entre si, nos quais eles consigam fazer leituras de variáveis diferentes e enviem esses dados para um arduino mestre?
Muito obrigado.
Abraço!

Henrique Oliveira dos Santos
13/11/2015 06:58

Muito legal a serie de posts.
Qual é esse software que exibe as formas de onda?

Francesco Sacco
Reply to  Henrique
13/11/2015 09:35

Olá Henrique,

Está falando das figuras 7 a 10? Se forem elas, eu usei um analisador lógico da Saleae. É muito bom e muito prático, um dia faço um artigo só sobre ele.
Uma braço.

Talvez você goste:

Séries



Outros da Série

Menu

WEBINAR
 

Soluções inteligentes para acionamento de MOSFETs/IGBTs com família STDRIVE

Data: 08/10 às 15:00h - Apoio: STMicroelectronics
 
INSCREVA-SE AGORA »



 
close-link