Who's online

There are currently 0 users and 5 guests online.

Publicidade

Pinos

User login

Watchdog

 Se você é novo no mundo dos microcontroladores em geral, você deve estar se questionando se o recurso Watchdog Timer dos microcontroladores PIC tem realmente alguma utilidade. Afinal, quem gostaria de ter o microcontrolador reiniciado, em determinadas circunstâncias, periodicamente?

Na realidade, o Watchdog timer (WDT) tem um função muito importante não apenas contra bugs de software, mas também em situações ambientais agressivas. O WDT oferece a possibilidade de reestabelecer o controle da aplicação pelo microcontrolador através da reinicialização do sistema (um simples reset) mesmo que a falha esteja na próprio oscilador do microcontrolador (o WDT possui clock independente através de um RC interno e, por isso, possui tempo de incremento constante). Esse insucesso do microcontrolador de manter o fluxo do programa adequadamente pode ter várias causas:

 

  • condições ambientais que excedem os limites do microcontrolador. Neste caso, o estouro do temporizador pode ocorrer após um tempo que pode ser maior do que o especificado pelo postscaler (alguns segundos) porque o hardware do microcontrolador está exposto a uma condição que não tem garantia de funcionamento.
  • instabilidade da alimentação do microcontrolador
  • falha no oscilador externo. O diferencial do WDT é justamente pelo fato de ele possuir um oscilador independente do clock principal.
  • bug no código do programa (um loop infinito, por exemplo). Embora o programa deva ser testado corretamente antes de colocá-lo em produção, o WDT proporciona uma opção de programação defensiva que deve ser utilizado em aplicações críticas e mesmo em outras aplicações triviais. Mesmo que a aplicação não tenha relevância, ninguém deseja ter o sistema travado inesperadamente durante longos períodos.

 

Portanto, o WDT pode ser utilizado em qualquer tipo de aplicação. O WDT tem um timeout padrão de 18ms que pode ser aumentado para até alguns segundos através do postscaler. Este postscaler é comum entre o WDT e o TMR0; portanto, pode-se utilizar o postscaler para o WDT apenas quando o postscaler não está sendo aplicado ao TMR0 (o controle é feito através do bit PSA do registrador OPTION_REG). Para evitar que o sistema resete, deve-se adicionar a instrução clrwdt a algum loop do programa para que ela seja executada periodicamente e em tempo menor do que o período de WDT.

O WDT pode ser desativado adicionando-se o parâmetro _WDT_OFF no __CONFIG. A detecção de um reset devido ao WDT é efetuada pela verificação do bit /TO (TimeOut) do registrador STATUS. Este sinal é ativo-baixo: /TO igual a 0 significa que houve um estouro no temporizador watchdog.

Caso o sistema esteja no modo sleep, o WDT acorda o microcontrolador. Este procedimento é chamado de WDT wake-up.

Post new comment

The content of this field is kept private and will not be shown publicly.
CAPTCHA
This question is for testing whether you are a human visitor and to prevent automated spam submissions.
Image CAPTCHA
Copy the characters (respecting upper/lower case) from the image.