Arquivo da tag: Soluções

Cuidado com o Watchdog Timer no Arduino

Mesmo já tendo utilizados outras famílias de microcontroladores nem sempre você acaba lembrando do básico quando utiliza Arduino, e isso pode se um problema.

Para controlar o portão eletrônico e o alarme do condomínio, fiz um sistema utilizando um Arduino Uno, um Shield Ethernet e 2 relés juntamente com um controle que funcionava tanto para o portão quanto para o alarme. O sistema fica ligado ao roteador e funciona mesmo fora da rede local através da web.

Um problema que percebi é que nem sempre o sistema estava ativo e como não sabia ainda qual era realmente o problema resolvi ativar o WDT (Watchdog Timer) do Arduino. Para quem não sabe o WTD é uma parte independente do processamento principal do microcontrolador que, quanto ativo, realiza uma contagem e se chegar ao limite gera uma interrupção reiniciando o sistema para previnir que este fique travado durante muito tempo por algum problema ocorrido. Para que não ocorra sempre você deve resetar o WDT para que ele nunca alcance seu limite e assim seu código possa ser executado normalmente.

Quando ativei o WTD do meu sistema ele não funcionou bem como deveria. O sistema ficou se reiniciando o tempo todo (é o que acho, não cheguei a esta conclusão empiricamente) e dessa forma eu não conseguia realizar um novo upload para o Arduino e achei que equele chip estava perdido, pois sempre ocorria um timeout na gravação e um mensagem “avrdude: stk500_getsync(): not in sync: resp=0x00″, como se minha placa não fosse a correta ou não estivesse funcionando corretamente.

errowtd
Código que causa loop infinito de resets no Arduino.

Após fazer algumas pesquisas sem sucesso na web resolvi fazer uma tentativa fora do comum para gravar o chip. Após a etapa de compilação e um pouco depois do aparecimento da mensagem “Uploading…”, eu fiz um curto rápido, utilizando um fio, entre o GND e o 5V da placa. Após o curto a placa faz um reset diferente do realizando através do botão e o Arduino consegui entrar em modo gravação. Tentei muitas coisas sem sucesso antes dessa sugestão desesperada. Fiz a mesma coisa em um Arduino Nano e também tive sucesso.

Não tenho tanta experiência com Arduino e não sou profissional na área. Se alguém quiser enviar ou, por comentário mesmo, fazer alguma observação ou sugestão fiquem à vontade.