PIC do Zero

Programação em C para Microcontroladores PIC

Aula 24 – Watchdog Timer (WDT)

Nesta aula vamos estudar o Watchdog Timer, um recurso essencial para aumentar a confiabilidade de sistemas embarcados. Ele ajuda o PIC a se recuperar automaticamente quando o programa trava ou deixa de executar corretamente.

1. O que é Watchdog Timer?

Watchdog Timer, ou WDT, é um temporizador interno de segurança. Se o programa não limpar esse temporizador dentro de um tempo determinado, o PIC entende que houve uma falha e executa um reset automático.

Watchdog = cão de guarda do sistema

Se o programa travar:
WDT gera reset automático

2. Por que o WDT é importante?

Em aplicações industriais, um equipamento pode ficar funcionando por dias, meses ou anos. Se o software travar, o sistema precisa voltar a operar sem depender de uma pessoa para reiniciar.

  • Evita sistema parado indefinidamente.
  • Aumenta a disponibilidade do equipamento.
  • Ajuda na recuperação automática de falhas.
  • É muito usado em sistemas críticos.

3. Exemplo prático

Imagine um controlador de bomba. Se o programa travar com a bomba ligada, o processo pode ficar inseguro. Com WDT ativo, o PIC reinicia e volta para uma condição controlada.

Programa normal → limpa WDT continuamente
Programa travado → não limpa WDT
Timeout do WDT → reset automático

4. O que é Timeout?

Timeout é o tempo máximo permitido antes do Watchdog gerar reset. Se o programa limpar o WDT antes desse tempo, o sistema continua funcionando normalmente.

Tempo limite atingido
        ↓
Watchdog gera reset

5. Limpando o Watchdog

Para informar ao PIC que o programa está funcionando corretamente, usamos a instrução:

CLRWDT();

Essa instrução reinicia a contagem do Watchdog.

6. Exemplo básico

while(1)
{
    // Executa tarefas principais

    CLRWDT(); // Limpa o Watchdog
}

7. O que acontece se esquecer o CLRWDT?

Se o WDT estiver habilitado e o programa não executar CLRWDT() dentro do tempo limite, o PIC será reiniciado automaticamente.

while(1)
{
    // Programa executando sem limpar WDT
}

// Resultado:
// Reset automático

8. Configurando o WDT nos Configuration Bits

O Watchdog normalmente é habilitado ou desabilitado nos bits de configuração do PIC.

#pragma config WDTE = ON   // Watchdog habilitado
#pragma config WDTE = OFF  // Watchdog desabilitado

9. Exemplo com WDT habilitado

#include <xc.h>

#pragma config WDTE = ON

void main()
{
    while(1)
    {
        // Tarefas do sistema

        CLRWDT();
    }
}

10. Onde colocar o CLRWDT?

O CLRWDT() deve ser colocado em pontos estratégicos. O ideal é limpar o Watchdog somente depois que as tarefas principais forem executadas corretamente.

while(1)
{
    ler_sensores();
    processar_logica();
    atualizar_saidas();
    comunicar();

    CLRWDT();
}

11. Uso incorreto do Watchdog

Um erro comum é limpar o WDT em qualquer ponto do programa, mesmo quando o sistema não executou as tarefas corretamente.

while(1)
{
    CLRWDT();

    // Se o programa travar depois daqui,
    // talvez o Watchdog demore a atuar
}

12. Uso correto do Watchdog

while(1)
{
    if(sistema_ok)
    {
        CLRWDT();
    }
}

13. Travamento por loop infinito

Se o programa ficar preso em uma rotina e não voltar ao ponto onde o WDT é limpo, o Watchdog fará o reset do PIC.

while(sensor_falhou)
{
    // Programa preso aqui
}

// Se não houver CLRWDT:
// Watchdog reinicia o PIC

14. Watchdog em comunicação industrial

Em sistemas com RS-485, Modbus, UART ou I²C, o Watchdog pode recuperar o sistema caso uma rotina de comunicação fique presa aguardando uma resposta que nunca chega.

15. Watchdog em sistemas críticos

O WDT é muito utilizado em:

  • Controladores industriais.
  • Sistemas de bombeamento.
  • Alarmes.
  • Equipamentos remotos.
  • Data loggers.
  • Sistemas de automação que operam 24 horas por dia.

16. Alta disponibilidade

Alta disponibilidade significa manter o sistema funcionando pelo maior tempo possível. O Watchdog contribui para isso porque permite recuperação automática em caso de falha de software.

Falha detectada indiretamente
        ↓
Reset automático
        ↓
Sistema volta a operar

17. Boas práticas

  • Habilite o WDT em equipamentos que precisam operar continuamente.
  • Não use delays longos sem limpar o Watchdog.
  • Evite loops bloqueantes.
  • Coloque timeout em rotinas de comunicação.
  • Faça o sistema iniciar em estado seguro após reset.
  • Registre falhas em EEPROM quando necessário.

18. Integração com EEPROM

Podemos gravar na EEPROM um contador de resets por Watchdog. Isso ajuda na manutenção e diagnóstico.

Se ocorreu reset por WDT:
incrementa contador de falhas na EEPROM

19. Exemplo de lógica robusta

while(1)
{
    erro = 0;

    if(!ler_sensores())
        erro = 1;

    if(!executar_controle())
        erro = 1;

    if(!atualizar_comunicacao())
        erro = 1;

    if(erro == 0)
    {
        CLRWDT();
    }
}

20. Exercícios

Exercício 1: Para que serve o Watchdog Timer?

Para reiniciar o PIC automaticamente caso o programa trave.

Exercício 2: Qual instrução limpa o Watchdog?

CLRWDT();

Exercício 3: O que acontece se o WDT não for limpo no tempo correto?

O PIC executa reset automático.

Exercício 4: Onde é mais indicado usar WDT?

Em sistemas críticos, industriais e equipamentos que operam continuamente.

21. Laboratório prático

Crie um programa simples com WDT habilitado. Primeiro, use CLRWDT() corretamente. Depois, remova essa instrução e observe o PIC reiniciando automaticamente.

Teste 1:
while(1)
{
    CLRWDT();
}

Teste 2:
while(1)
{
    // Sem CLRWDT
}

22. Resumo da Aula

  • WDT é um temporizador de segurança.
  • Ele reinicia o PIC quando o programa trava.
  • CLRWDT() limpa o Watchdog.
  • O WDT melhora a confiabilidade.
  • É essencial em sistemas industriais e críticos.
  • Deve ser usado com planejamento e boas práticas.

Próxima Aula – Aula 25

Na próxima aula vamos estudar Sleep Mode e Baixo Consumo, aprendendo como reduzir o consumo de energia do PIC em aplicações alimentadas por bateria ou sistemas remotos.