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.