Modo SLEEP (migrado)

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Modo SLEEP (migrado)

Mensagempor Fábio Pereira » 16 Out 2006 14:17

Post original resgatado do ASM51 antigo:

O comando SLEEP do basic e C é traduzido diretamente em uma instrução SLEEP Assembly do PIC.

Em modo SLEEP, o consumo típico de um 16F84A é da ordem 3.5uA @ 4.5V. Se o watchdog estiver habilitado, adicione 30uA a esse valor. Lembre-se de que as cargas conectadas aos pinos de I/O também irão consumir corrente. Por isso, antes de entrar em SLEEP, é interessante desativar tudo o que é supérfluo ao funcionamento do circuito quando o mesmo estiver "nanando".

Para retornar ao funcionamento normal, basta um RESET de hardware, o estouro do watchdog (que permanece em operação, mesmo no modo SLEEP) ou ocorrência de uma interrupção assíncrona (INT, RB, Comparadores, A/D, TMR1 (modo assíncrono, clock externo), LCD, SSP e Captura (módulo CCP)).

Note que, obviamente, para que o watchdog possa gerar o evento de WAKE-UP, é necessário que o mesmo esteja ativado ... (hehehe). Outra curiosidade interessante: o watchdog, ao estourar a contagem durante o modo SLEEP, não irá provocar um RESET no dispositivo (como acontece com o chip no modo RUN), mas irá resumir a execução do programa da instrução seguinte ao comando SLEEP.

Com relação ao wake-up por interrupções, lembre-se de que é necessário que uma das interrupções assíncronas citadas acima esteja individualmente habilitada ...
Se o bit GIE estiver habilitado, o chip será acordado o fluxo do programa será desviado para o vetor de interrupções. Ao término da RTI o programa irá resumir a execução a partir da instrução seguinte ao SLEEP.
Se o GIE estiver desabilitado, o chip será acordado e a execução será resumida da instrução seguinte ao SLEEP.

Até +


Fábio Pereira


luca
Aspirante


Brazil
119 Posts Posted - 01/03/2003 : 02:14:45
--------------------------------------------------------------------------------
Ola Fabio,

Uma duvida .
Se pongo em sleep o pic para aguardar um interrupt externo, por exemplo aguardo fonte principal voltar, mas se o wachdog esta habilitado , cada estouro acorda o pic, entao o comando sleep e´inutil.
Tem a possibilidade de manter em sleep o pic com o wachdog ligado?

Obrigado

Luca


quote:
--------------------------------------------------------------------------------



Para retornar ao funcionamento normal, basta um RESET de hardware, o estouro do watchdog (que permanece em operação, mesmo no modo SLEEP) ou ocorrência de uma interrupção assíncrona (INT, RB, Comparadores, A/D, TMR1 (modo assíncrono, clock externo), LCD, SSP e Captura (módulo CCP)).




Fábio Pereira



--------------------------------------------------------------------------------



Fabio Pereira
Conselheiro


Brazil
2205 Posts Posted - 01/03/2003 : 02:31:45
--------------------------------------------------------------------------------
Bom, a única forma de utilizar o watchdog como você quer será implementar uma rotina ou função para entrar no modo SLEEP e ao sair do SLEEP, verificar o bit TO. Se o mesmo estiver em 0, o PIC deverá ser colocado para dormir novamente, algo como:

void Modo_sleep (void)
{
while (true)
{
GIE = 1;
sleep();
delay_us (5);
if (TO == 0) sleep(); // se acordou e o watchdog estourou, volta a dormir
}
}

Repare que a solução acima irá ficar em um loop SLEEP infinito (acordando regularmente para atender ao estouro do watchdog). Ao ocorrer uma interrupção, o loop será interrompido, a interrupção será tratada e o programa retornará para o modo sleep ...

Até +
Fábio Pereira
embeddedsystems.io
Avatar do usuário
Fábio Pereira
Word
 
Mensagens: 674
Registrado em: 16 Out 2006 09:07
Localização: Kitchener, ON

Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x