Este post é uma continuação do anterior...

Tal como já tinha dito, consegui fazer o pedido de um sample DS18S20 da MAXIM.
Hoje, embora tenha tido pouco tempo, pus as leituras em dia sobre este sensor e o que precisava fazer para ele me desse a temperatura.
Este sensor utiliza comunicação "1wire", desenvolvida pela Dallas Semiconductor Corp. que actualmente pertence à MAXIM. Como o nome indica, este tipo de comunicação utiliza apenas um fio e permite ligar vários CI's que utilizem o mesmo protocolo. Um pouco à semelhança do I2C, sendo que este utiliza 2 fios para comunicação.

O DS18S20 tem uma resolução de 9 bits, o que resulta em "steps" de 0,5ºC em 0,5ºC.
Para este meu projecto este step serve, mas se quisesse poderia optar por um DS18S22 que penso ter uma resolução de 0,1ºC.

Quanto ao que realmente importa, este sensor utiliza menos 1mA em "espera" e aquando da transmissão de dados tem umas oscilações até cerca de 2,5mA.



No que toca à programação bastou uma rápida pesquisa pela internet para saber como funciona o protocolo "1wire" e como "falar" com este sensor.
Uma vez mais, não vou colocar o código completo, mas o essencial é isto (utilizando "1wire.c" e "ds1820.c"):


void main()
{
          float temperatura;
          pic_init();
          temperatura=ds1820_read();
          temperatura*=10;
}

O valor resultante ("temperatura") terá 3 casas sem decimal, ou seja, ao invés de 12,5ºC será 125ºC.
O circuito de teste, em simulação, foi o seguinte e já tive os primeiros resultados satisfatórios.




É muito importante cortar ao máximo no consumo de energia, para que no minimo o datalogger aguente 1 mês a funcionar com as mesmas baterias. Esses cuidados ainda não foram tomados pois ainda estou na fase de simulação/teste e até ao final muitas coisas ainda mudarão.


Próxima parte:

No passo seguinte vou-me debruçar mais sobre o código e ver se haverá algumas correcções electrónicas a fazer.
A planear também será a forma de armazenar eficazmente todos os valores. Por agora estou a ver que tenho de utilizar 3 endereços da memória, 1 para valores negativos (até -25.6ºC) e as outras duas para valores positivos (25.6+25.6=51.2ºC). Dá-me "folga" ainda para fazer o que pretendo, que é a aquisição de temperatura a cada 15min.

Por hoje é tudo.

0 Responses so far.

Enviar um comentário