quarta-feira, 9 de maio de 2018

Até onde o nosso erro pode chegar ao usar Millis e não um RTC (Caso não tenha falha de energia)


Em nosso datalogger estamos trabalhando com a função Millis, enquanto o correto seria um RTC, que será implantado no futuro, uma vez que já possuo um guardado. Só que o Millis apresenta um imprecisão, pois mesmo que você coloque o código para rodar a cada 1000ms, as leituras do millis não serão:
1000
2000
3000

Isso porque existe um tempo de execução do código, então esse tempo precisa ser adicionado, no código de exemplo que utilizamos nesse post, a leitura foi feita a cada 5 segundos, e a cada leitura 1ms foi adicionado. Assim a leitura do millis foi:
5001
10002
15003
20004

Seguindo a documentação do Arduino, o millis reseta a cada aproximados cinquenta dias, então no final de quarenta dias (vamos trabalhar com uma margem), qual será o nosso erro?

40 dias = 960 horas = 57600 minutos = 3456000 segundos = 3456000000 milissegundos

Se a nossa leitura ocorrer a cada 5000ms, teríamos:

3456000000/5000 = 691200 gravações

Então, se cada gravação for adicionado 1ms ao nosso tempo final, o millis aos 40 dias deveria ser 3456000000, passará a ser 3456691200.

Ou seja, com 40 dias ligado rodando um código muito pequeno o nosso Arduino estaria 8 dias errado. 20% errado.

Claro que se o nosso logger fizer leituras a cada 10 minutos (3456000000/300000 = 11520), o nosso arduino estaria 11,52 segundos atrasado. Bem mais aceitável né. Mesmo que isso signifique mais de duas leituras.

O problema é que nosso código não rodará em 1ms, e isso ampliará o erro. Então para usar Millis em um datalogger temos dois lados para corrigir o erro, elevar o tempo entre a execução de código demorados e reduzir o tempo para o código se executado.

Ou seja, você precisa reduzir as funções do código ao mesmo tempo que faz leituras menos vezes, ou seja, reduz a precisão do trabalho.

Ou você pode usar um RTC, que implica em mais energia, mais código, mais espaço e mais dinheiro. Mas que no final faz mais sentido também.

Ao adicionar o millis em nosso código vamos ver quanto que será o nosso erro.

Nenhum comentário:

Postar um comentário