12F683 não sai do sleep nem com reza braba

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

12F683 não sai do sleep nem com reza braba

Mensagempor lpagano » 23 Dez 2008 15:41

Pessoal,

Seguinte, tô tentando fazer um programinha que usa o speep do 12F683. E só para testar e ver que ele sai do SLEEP com um "GPIO change" eu fiz o seguinte programa:

Código: Selecionar todos
void main ( )
{

     delay_ms(10);

     ANSEL = 0;                         // entradas todas digitais
     CMCON0 = 7;                     // comparadores desligados


     TRISIO.F0 = 1;                    // entrada para sinalizador
     TRISIO.F4 = 0;                    // saída do comando para acerto do relógio

     OPTION_REG.F7 = 0;           // habilita o uso do registrador WUP (pull-ups)
      WPU.F4 = 1;                      // habilita pull-up no port 4

      ANSEL = 0;                         // entradas todas digitais
     CMCON0 = 7;                      // comparadores desligados

     asm {sleep};                   
     GPIO.F4 = 1;
     delay_ms(300);
     GPIO.F4 = 0;

     while (1);

}




Só que quando eu mudo o estado na entrada do pino 0 não acontece nada, fica no SLEEP.

Poderiam me ajudar em fazer esse troço sair do SLEEP com a mudança do estado no pino GPIO 0?

Valeu!
lpagano
Byte
 
Mensagens: 393
Registrado em: 06 Nov 2006 14:23

Mensagempor turuna » 23 Dez 2008 19:43

Ñ analizei o seu código, só um pergunta; vc habilitou a interrupção que vai acordar o pic?
turuna
Nibble
 
Mensagens: 97
Registrado em: 10 Mar 2008 12:50

Mensagempor ffcprog » 24 Dez 2008 07:45

bom dia amigo.
o nana nenem, serve para colocar o uC em baixo consumo, para aplicações que ele pode dormir..

Para você acordar o nenem, é necessario que haja alguma ação, para isto você tem n formas..
Por wdt
Por int RB0
Por int RB4...7
ou dependendo do seu ucrocontrolador, outras N formas.

O importante é que você sempre tenha em mente onde o sleep vai ficar.
Se for acordalo por interrupção, não se esqueça que tem que tratar a interrupção.
Se for acordalo por WDT, lembre-se que o ucontrolador vai reiniciar..

asm {sleep};
GPIO.F4 = 1;
delay_ms(300);
GPIO.F4 = 0;

while (1);

Aqui, olha o que você esta fazendo, gera um pulso de 300mS em GP4.

Logo após, while(1); << este cara aqui tranca o processamento infinitamente sem fazer nadinha de nada.. fica alí pensando nas contas à serem pagas ...

um escopo correto seria isto aqui.

Código: Selecionar todos
void interrupt(void){
aqui você deve tratar a interrupção.
Seria zerar o flag da int que acordou o ucontrolador

ligar o INTCON.GIE,
}

void main ( )
{

      ANSEL = 0;                    // entradas todas digitais
     CMCON0 = 7;               // comparadores desligados
     TRISIO.F0 = 1;            // entrada para sinalizador
     TRISIO.F4 = 0;           // saída do comando para acerto do relógio

     OPTION_REG.F7 = 0;    // habilita o uso do registrador WUP (pull-ups)
      WPU.F4 = 1;              // habilita pull-up no port 4

      ANSEL = 0;             // entradas todas digitais
     CMCON0 = 7;         // comparadores desligados

while(1){
       
     GPIO.F4 = 1;
     delay_ms(300);
     GPIO.F4 = 0;
     asm sleep;   
     }
}


ffcprog

Veja se deu uma clareada em suas idéias..
ffcprog
Byte
 
Mensagens: 145
Registrado em: 14 Fev 2007 23:16

Mensagempor lpagano » 24 Dez 2008 08:17

Esse programa que eu mandei para vocês verem foi somente um teste para ver se ele saia do SLEEP após um pin change no GPIO 0. Para mostrar que ele sai do SLEEP eu piscava um led, como podem ver nas 3 linhas depois da instrução SLEEP.

Bem, só para informação uma vez eu fiz isso no 12F629 e 12F675 e não precisei habilitar interrupção. Era só fazer a mudança de estado do pino que ele já saia do modo SLEEP.

Mas vou testar com essa interrupção para ver no que dá.


Valeu!
lpagano
Byte
 
Mensagens: 393
Registrado em: 06 Nov 2006 14:23

Mensagempor ffcprog » 24 Dez 2008 08:22

Bem, só para informação uma vez eu fiz isso no 12F629 e 12F675 e não precisei habilitar interrupção. Era só fazer a mudança de estado do pino que ele já saia do modo SLEEP.

Bem meu querido, ai é truco 6 MI...

A não ser que você tivesse abilitado o ONPIE..
é um registrador que você pode colocar 5 dos 6 pinos como acionamento de interrupção em mudança de estado.

ffcprog
ffcprog
Byte
 
Mensagens: 145
Registrado em: 14 Fev 2007 23:16

Mensagempor lpagano » 24 Dez 2008 08:27

meu amigo ffcprog,

Tem razão, 1 minuto depois de reponder esse tópico eu verifiquei no meu código com o 12F629 que tive que habilitar a "mardita" da interrupção.

1 x 0 para você!!!! :lol:

Nem deu tempo para fazer uma edição na minha resposta.

Acho que é clima de Natal, fora um resfriado que está me derrubando hoje. Mas a gente faz o que pode!!!


Valeu!
lpagano
Byte
 
Mensagens: 393
Registrado em: 06 Nov 2006 14:23


Voltar para PIC

Quem está online

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

x