Comunicação 1-Wire (Single Bus) entre PIC e Sensor de Umidade

Olá amigos do Laboratório de Garagem.

Há alguns dias venho procurando pela net alguma instrução de como usar um sensor de umidade por meio de um microcontrolador PIC. Não encontrei conteúdo simples o suficiente para que eu pudesse entender. Por isso resolvi pedir ajuda.

Acontece que gostaria de realizar leituras de umidade usando um PIC, trata-se de um projeto que irei realizar para cuidar de hortas. Já usei sensores de temperatura pela entrada analógica de um PIC, porém o sensor de umidade que quero ligar (Anexo) se comunica de um modo que ainda estou estudando.

Eu acho que preciso programar o PIC para enviar sinais ao sensor e medir os períodos de resposta do sensor. Por exemplo:

1º - O PIC envia o "Pulso de Reset" ao sensor;

2° - Detecto o sensor porque ele responde com nível lógico alto;

3° - Depois disso preciso medir os demais tempos de resposta do sensor para diferenciar os bits de 0 e 1, assim eu vou salvando os valores , não sei talvez numa lista, para depois converter e ter a leitura.

Assim eu teria por exemplo :

  0001 1111 1010 0100 1111

Enfim...  Eu não entendi ainda como realizar as leituras desse sensor. Agradeço imensamente se puderem indicar algum material para eu estudar.

Uso o PIC C Compiler (CCS, PCW)

Sou novo por aqui então perdoem quaisquer erros.

Valeu pesoal

Exibições: 739

Anexos

Responder esta

Respostas a este tópico

Boa tarde 2N,

Acho que você vai ter que escrever a biblioteca para o AM2305.

Há alguns anos escrevi uma biblioteca para ler um dispositivo com bus 1-wire,

Ela foi escrita para o compilador Hi-tech-C.

Segue anexa a biblioteca que escrevi, e veja se consegue que ela funcione no CCS.

Boa sorte.

RV

Anexos

Oi Nack Nat.

A descrição que vc fez no passos 1º, 2º, 3º é a ideia de leitura, vc está perto.

No datasheet em 7.4 "Peripherals read step example" diz:

1º) ligar o sensor e aguardar 2 segundos

2º) executar o handshake inicial: configura porta do PIC pra saída, inicia em nível alto, coloca em nível baixo por 1ms, coloca em nível alto por 20us, depois configura a porta para entrada, lê nível baixo por 80us, lê nível alto por 80us.

3º) lê os bytes! O bit '1' e o bit '0' são diferentes pois, para cada um, o tempo em nível alto é diferente.

No arquivo do link no final, eu adaptei um código para Atmega328 a 16MHz, para ler um sensor DHT11.

Vc pode fazer a leitura por esse código, mas vai ter que adaptar como eu fiz.

As dicas que dou são as seguintes:

- As escritas e leituras são feitas sempre em um determinado tempo, e pra isso vc trabalha com um TIMER.

- Pra a frequência do Atmega328 que usei, de 16MHz, eu precisei usar o TIMER de 16 bits, pra contar além de 255.

- Os valores de tempo são contados pelo TIMER em função do clock, então vc vai ter que fazer uma contas de conversão entre tick do clock e os tempo em milisegundos e microsegundos.

- Pra depurar o que acontecia durante as conversas Atmega328<->sensor, eu usei a porta serial que me dizia até onde a conversa atingiu.

https://bitbucket.org/vitorafsr/bandeirola/src/70ffd88a4cefbf650294...

Boa sorte.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço