Tags:
Posta o codigo
isto ocorre por causa do tempo de processamanto do sistema, ai vc tem que ficar ajustando usando 999 ao inves de 1000 por exemplo pra ver se fica bom
Realmente a diferença de tempo está de acordo com o tempo de processamento, mas esse tempo de processamento não deveria provocar um atraso no relogio?
é, não tinha reparado que tava adiantando, mas provavelmente ele esta contando 1 microssegundo a menos por vez na programação. aí tem quer ver o código pra saber
Olá,
O millis usa o timer do atmega, e não é influenciado pelo "processamento".
O adiantamento observado muito provavelmente deve ser em função da tolerância do cristal do clock da placa, que deve estar com uma frequência um pouco acima dos 16MHz nominais, o que é muito normal...
Para obter uma precisão maior, só mesmo usando um chip de RTC e com um cristal de qualidade.
Abraço.
Nesse caso, fazendo as devidas contas chegamos a uma frenquencia de 16,0267MHz ou 16026,7KHz. Fazendo outras leituras dessa diferença de tempo você consegue calcular com maior precisão a frenquencia do cristal e com isso fazer o ajuste de tempo.
Por exemplo, considerando que a frequencia é 16,0267MHz, você teria uma diferença de tempo seria de
0,00000011ms por ciclo, então no loop principal você colocaria uma variavel para ler a função millis() e descontar esse valor
tempo = millis() - 0,00000011;
Lembrando que essa dedução é completamente teorica e eu não testei, caso você teste, ficaria feliz se você me contar o resultado.
Melhor ainda seria usar a função micros().
A respeito do que o Wiechert disse, o RTC é realmente a melhor saida, mas tenta melhorar esse com a função millis como um experimento didático e depois usa o RTC =)
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por