segunda-feira, 9 de julho de 2012

Usando o watchdog do pic 16F877A

       Neste exemplo vou demostrar como usar o watchdog do pic, você vai precisar montar o seguinte circuito para testes:
      Note que se você manter o botão pressionado o watchdog não estoura mas se ficar com o botão livre ele irá reiniciar o pic a aproximadamente  2,3 segundos.Veja o código-fonte: 



///////////////////////////////////////////////////////////////////////////////
//projeto : usando o watchdog do pic
//autor : aguivone
//data : 09/07/2012
//versão: 1
//////////////////////////////////////////////////////////////////////////////

#include <16F877A.h>
#fuses XT,WDT,NOPROTECT,NOLVP // deve se habilitar aqui o watchdog(WDT)
#use delay(clock=4M)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)

void main()
{ 
    setup_wdt(WDT_2304MS);//programa pra estourar a cada 2,3 segundos
    printf("Iniciando teste de watch dog! \r\n");
    for(;;)
    {
      delay_ms(1800);
      if(INPUT(PIN_B0))
        {
          RESTART_WDT();// reinicia contagem,é mais usual 
          //#fuses NOWDT   se usar esta linha desliga watchdog        
          printf("Não estourou ainda! \r\n");
        }
        else
        {
         printf("Vai estourar em breve! \r\n");
        } 
    }
}

/*valores possiveis:

 WDT_18MS 
 WDT_36MS 
 WDT_72MS 
 WDT_144MS 
 WDT_288MS 
 WDT_576MS 
 WDT_1152MS 
 WDT_2304MS 
*/


contribua com o blog mande seus exemplos também!

4 comentários :

  1. Cara obrigado!! estafa fazendo uma matriz e travava entre 30min e 2hs de funcionamento
    agora que vo como reinicia a contagem do WDT ta tudo legal ^^
    apropósito... não sei se depende da PIC mas to usando uma 2550, nos testes coloquei WDT_4096MS e reseta em torno de 15/20s ... com isso acredito que os "valores possíveis" seja um default apenas... pode ser modificado o numero
    Obrigado novamente o/

    ResponderExcluir
  2. Olá, há como tornar as entradas do pic 16f877a independentes...? Pois todas as vezes que as ligo, uma depende que a outra esteja desligado para entrar em nivel baixo. Resumindo: ao acionar a entrada 2 (ex) e logo após a 3, a dois só desliga se a 3 for desligada primeiro. Gostaria de ativar as 8 entradas e aciona-las independentemente...obg.

    ResponderExcluir
    Respostas
    1. apesar delas serem independentes e funcionar bem nas versões antes do XC8, não sei por que para este modelo de microcontrolador já tive problema parecido.Acho que é bug do compilador, uma solução é criar uma variável que está linkada a porta de saída, dai quando vc atualizar a variável, e no final do seu processo vc envia o valor da variável ao "port" inteiro.
      Mas veja também se não foi alguma configuração dos pinos(se não for usar os comparadores internos é recomendado configurar eles para desligados).

      Excluir

olá,digite aqui seu comentário!