Discutindo sobre Watchdog no Arduino

|


Já se imaginou parado num semafaro aguardando as luz mudar de cor 1,2,5min e... Eis que nada contece. Logo você se atira ao acaso e espera que um outro lunático não faça o mesmo na outra mão.
E uma pergunda vem a mente: Quem foi o gênio que não ativou o Watchdog dessa casa de "Mãe Joana"?
Vez ou outra travamentos acontecem e e´ preciso estar pronto para eles. Ou você espera mandar alguem  apertar o botão de reset de um Satelite em orbita? E se a máquina de respiraçao forçada no hospital der um "Xabu"? De fato o "carbra morre".
Vamos descombrir como resolver problema?
    


Devemos ter em mente alguns conceitos básicos.
Exite um software rodando no AVR do Arduino e essa "nuvem" de dados transitando está sujeita a erros.
Você pode fazer uma analogia com o Windows que costuma dar erro mais do que deveria e de imediato você e´ tomado a evocar o poderoso botão de RESET que resolve na marra o que o (Ctrl+Alt+Del) já não dá conta. Quando isso e´ feito tudo volta do ínicio, mas resolve.
Bem.. o arduino também possui o mesmo botão de RESET na placa para a mesma função.
Entretanto nos microcontroladores não e´ viável nem lógico apertar esse botão. As aplições normalmente demandam funcionamento repetitivo e autônomo.
O Watchdog faz a tarefa de testar se o código está travado ou rodando normalmente. Isso pode ser ativado no minimo a cada 15ms ou no máximo 8s usando as configurações básica do AVR.






As configurações básicas que oferencem os tempos de testes e são essas:

 Tempo / Declaraçao para a função / Compatibilidade
15 ms WDTO_15MS ATMega 8, 168, 328, 1280, 2560
30 ms WDTO_30MS ATMega 8, 168, 328, 1280, 2560
60 ms WDTO_60MS ATMega 8, 168, 328, 1280, 2560
120 ms WDTO_120MS ATMega 8, 168, 328, 1280, 2560
250 ms WDTO_250MS ATMega 8, 168, 328, 1280, 2560
500 ms WDTO_500MS ATMega 8, 168, 328, 1280, 2560
1 s WDTO_1S ATMega 8, 168, 328, 1280, 2560
2 s WDTO_2S ATMega 8, 168, 328, 1280, 2560
4 s WDTO_4S ATMega 168, 328, 1280, 2560
8 s WDTO_8S ATMega 168, 328, 1280, 2560


E´ impotante notar que o tempo de execução máximo do código não pode passar de 8s pois estoura o teste e acabará resetando automanticamente, assim parte do código nao será executado..
Essa limitação pode ser resolvida usando um watchdog via hardware com um 555 por exemplo.

Para exemplificar vamos apresentar um código básico sobre o tema:
Baixe o código para executar no arduino: Baixar



#include   avr/wdt.h

void setup() {
  
   pinMode(12, OUTPUT); //use um LEd no pino 12
   wdt_enable(WDTO_2S); //Função que ativa e altera o Watchdog

}


void loop()
{
  digitalWrite(12, HIGH);  
  delay(1000);             
  digitalWrite(12, LOW); 
  delay(1000);
  wdt_reset(); //diz que esta tudo ok
}



OBS: Baixe o código para executar no arduino.

Vamos ao entendimento do código:

 #include  avr/wdt.h
Adiciona a biblioteca que habilita o funcionamento do Watchdog.
E´ o que tem a informação de tudo e diz em detalhes(fica oculto) como cada coisa deve acontecer.


wdt_enable(WDTO_2S); 
Esta e´ uma função que informa o tempo que cada teste deve ser feito.
Altere WDTO_2S o que está entre ( ) para WDTO_15MS e vera o LED piscar alucinado pois está resetando o código ou mude para WDTO_4S onde faz duas vezes o loop para fazer um novo teste.

wdt_reset(); 
Esta função informa que o código está ok e permite tudo continuar normalmente.

Gostou desta Aula? Incentive visitando:
LOJA do Brasilrobotics

6 comentários:

Anônimo disse...

Você tem a biblioteca para me enviar?

Anônimo disse...

Olha a besteira que fiz...rsrs
Coloquei wdt_enable(WDTO_15MS); //Função que ativa e altera o Watchdog
Agora a placa fica em loop e não consigo mais gravar nada.

Alguma dica?

Obrigado

Wellington disse...

Por favor ajude-me:
Coloquei wdt_enable(WDTO_15MS); //Função que ativa e altera o Watchdog
Agora a placa fica em loop e não consigo mais gravar nada.

Mega 2560

wellcomebr@yahoo.com.br

Brasilrobotics disse...

olá

Algo de errado aconteceu.
Faça um boot novo para reiniciar tudo. Depois tente entender o que aconteceu. Faz parte do processo de aprendizagem.

Anônimo disse...

Essa limitação pode ser resolvida usando um watchdog via hardware com um 555 por exemplo. como aummentar essa limitaçao com o 555???

Renato Murilo Falarz disse...

quando utilizar o wacthdog de qualquer sistema não use os menores valores 15ms apenas deve ser usado em sistemas onde o codigo possui poucas instruções e tem de ser ineterrupt, você não consigirá mais gravar nada neste chip... lamento

:(

pode usar o watch dog mas liguese que ele reseta seu microcontrolador quando o tempo estoura e 15ms é maior que o tempo de espera do ftdi para parar o codigo e gravar a nova função.

 

©2010 Brasil Robotics | by Gamesh_