Sleep/wake up

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Sleep/wake up

Mensagempor hemasc » 09 Out 2012 19:25

Pessoal, li em outros tópicos sobre sleep/wake up mas no momento ainda estou sem um hardware para testar. Usarei o compilador CCS e um PIC18f87k90 (acredito que o sleep seja igual ao demais PIC).

Pensei em colocar uma ponte resistiva entre os 5V e a porta B0 (evitar flutuação na porta). Com energia tem 5V na B0, sem energia, tem um resistor direto pro GND.

Aí fiz a seguinte lógica, com a interrupção global ligada no MAIN:

if(!input(PIN_B0))
{
ENABLE_INTERRUPTS(INT_EXT); //ativa e int_ext RB0
EXT_INT_EDGE(0,L_TO_H); //int_ext RB0 na borda de subida
sleep(); //dorme na espera de 5V na porta B0
delay_us(10);
DISABLE_INTERRUPTS(INT_EXT); //desativa int_ext RB0
}

enquanto estiver 0V na porta B0 o PIC dorme
quando chegar 5V na porta B0, o PIC fará o próxima instrução que é delay_us(10)

Está correto meu raciocínio? Preciso de mais alguma coisa?
hemasc
Nibble
 
Mensagens: 80
Registrado em: 26 Fev 2007 08:59
Localização: Campinas - SP

Mensagempor hemasc » 10 Out 2012 13:09

fiz umas modificações

if(!input(PIN_B0))
{
EXT_INT_EDGE(0,L_TO_H);
ENABLE_INTERRUPTS(INT_EXT);
disable_interrupts(INT_TIMER0);
sleep();
enable_interrupts(INT_TIMER0);
DISABLE_INTERRUPTS(INT_EXT); //desativa int_ext RB0
}

também coloquei a função da interrupt ext após o pic acordar

#INT_EXT
void int_rb0_handler()

o problema é, o PIC não para no sleep quando aplico 0V na porta B0.

se alguém puder me auxiliar, fico grato!
hemasc
Nibble
 
Mensagens: 80
Registrado em: 26 Fev 2007 08:59
Localização: Campinas - SP

Mensagempor hemasc » 10 Out 2012 18:08

era um problema no hardware, tinha um R de 22k entre GND e PIC, diminuí para 10k e funcionou perfeitamente.

if(!input(PIN_B0))
{
ENABLE_INTERRUPTS(INT_EXT); //ativa e int_ext RB0
clear_interrupt(INT_EXT);
sleep();
DISABLE_INTERRUPTS(INT_EXT); //desativa int_ext RB0
}

e para qdo estiver no sleep e a interrupção externa no B0 for acionada

#INT_EXT
void int_rb0_handler()
{
delay_us(1);
}
hemasc
Nibble
 
Mensagens: 80
Registrado em: 26 Fev 2007 08:59
Localização: Campinas - SP


Voltar para PIC

Quem está online

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

x