Вы находитесь на странице: 1из 16

Prof.

Pedro Pedrosa
h"p://www.facebook.com/lproFfcemaracanau  
h"p://buscatextual.cnpq.br/buscatextual/visualizacv.do?id=K4227622E1    
pedrosarf@ifce.edu.br
Prof. Pedro Pedrosa
Ø  Definição
Sistemas de reset são os diversos modos de reiniciar o
microcontrolador e retornar ao início do programa em
execução.

Tipos de reset:
•  Alimentação inicial do chip
•  Queda de tensão de alimentação
•  Timer de inicialização
•  Timer de partida do oscilador
•  Reset por software
•  Reset por hardware
•  Reset por Watch Dog Timer (WDT)

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa


Ø  Alimentação inicial do chip (Power-On Reset – POR)
Circuito interno detecta a subida de tensão, mantendo-o em
reset até que ele atinja o valor nominal de operação.

#fuses POR
Habilita esta configuração

#fuses NOPOR
Desabilita esta configuração.

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa


Ø  Queda de tensão de alimentação (Brown-Out Reset – BOR)
Quando BOR está ativado e ocorre uma queda de tensão
abaixo de VBOR configurado, o micro reseta e só reinicia
quando a tensão se restabelecer.

#fuses BROWNOUT
Habilita esta configuração

#fuses NOBROWNOUT
Desabilita esta configuração.

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa


Ø  Queda de tensão de alimentação (Brown-Out Reset – BOR)
Quando BOR está ativado e ocorre uma queda de tensão
abaixo de VBOR configurado, o micro reseta e só reinicia
quando a tensão se restabelecer.

Definição de VBOR
#fuses BOR46 Configura VBOR para 4,6 V

#fuses BOR43 Configura VBOR para 4,3 V

#fuses BOR28 Configura VBOR para 2,8 V

#fuses BOR20 Configura VBOR para 2,0 V

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa


Ø  Timer de inicialização (Power-Up Timer – PUT)
Faz o microcontrolador esperar 66ms a mais no tempo total
de reset.

#fuses PUT
Habilita esta configuração

#fuses NOPUT
Desabilita esta configuração.

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa


Ø  Timer de partida do oscilador (Oscilador Start-up Timer – OST)
Permite a estabilização do oscilador externo antes de
iniciar o microcontrolador.

#fuses OST
Habilita esta configuração

#fuses NOOST
Desabilita esta configuração.

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa


Ø  Reset por hardware

Setando nível lógico baixo no pino MCLR (pino 1 geralmente)

#fuses MCLR
Habilita esta configuração

#fuses NOMCLR
Desabilita esta configuração.

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa


Ø  Reset por software (via instrução de reset)
reset_cpu()
Sempre que a instrução acima é executada em qualquer
ponto do programa o microcontrolador reinicia a sua
execução.

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa


Ø  Reset por Watch Dog Timer (WDT – cão de guarda)
Timer responsável por checar o funcionamento do programa,
resetando o MCU quando este pára de funcionar.

#fuses WDT
Habilita esta configuração

#fuses NOWDT
Desabilita esta configuração.

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa


Ø  WDT - observações
•  Obs 1: O programa deve ser responsável por reiniciar a
contagem do timer do WDT (setup_wdt(WDT_ON);).
•  Obs 2: O tempo de um ciclo do WDT é 4,1 ms.
•  Obs 3: O WDT reseta o MCU quando a contagem alcança o valor
definido no postscaler.
•  Obs 4: O postscaler pode receber os valores 1,2,4,8,16,32,...,32768
•  Obs 5: O tempo de reinicio do WDT é o postscaler multiplicado
por 4,1 ms, resultando em um tempo em ms.

Exemplo
#fuses WDT Habilita o uso do WDT

#fuses WDT1024 Configura postscaler com 1024 X 4,1ms = 4,2 s

setup_wdt(WDT_ON); Reinicia o WDT no programa para que


ele não reinicie o MCU.
pedrosarf@ifce.edu.br Prof. Pedro Pedrosa
Ø  Verificação da causa do reset
restart_cause()
Retorna número inteiro de 1 a 15 indicando a causa do reset.

exemplo:

int res = restart_cause();

Principais valores possíveis do retorno:


0 - Reset por software 12 - Inicialização Normal
7 - Reset por WDT 15 - Reset por hardware

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa


Prof. Pedro Pedrosa
#include  <18F2550.h>  
#use  delay(clock=4000000)    
void  verifica_inicializacao(void)  
{  
int  cause;  
cause  =  restart_cause();    
switch  (    cause    )  
     {  
           case  0:  
                   prinU("\r\nReinicializacao  por  soYware!\r\n");  
                   break;  
           case  7:                    
 prinU("\r\nReinicializacao  por  watchdog  Fmeout!\r\n");  
                 break;    
           case  12:  
                   prinU("\r\nInicializacao  Normal!\r\n");  
                   break;  
           case  15:    
             prinU("\r\nReinicializacao  por  hardware!\r\n");  
               break;    
     }    //fim  switch  
}  
pedrosarf@ifce.edu.br Prof. Pedro Pedrosa
.  
.  
.  
main()  
{  
     verifica_inicializacao();      //  verifica  os  flags  do  RCON  
     setup_wdt(WDT_ON);  
     while(1)  
     {  
           restart_wdt();    //reinicia  a  contagem  do  watchdog  Fmer  
           if  (!input(pin_a0))  while(1);      //  se  S1  pressionada,  entra  em  loop  e  espera  watchdog  
           if  (!input(pin_a1))  reset_cpu();      //  se  S2  pressionada,  reseta  a  cpu  por  soYware  
           if  (!input(pin_a2))  sleep();      //  se  S3  pressionada,  entra  em  modo  sleep  
     }  
 
}

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa

Вам также может понравиться