collapse

* Links de Robótica

* Posts Recentes

Feira de electricidade e eletrónica por edeweld
[Hoje às 02:02]


Recomendação de um opamp para um DAC r2r por jm_araujo
[Ontem às 10:48]


RN42 e TP-Link MR3020 por doiga
[22 de Novembro de 2017, 19:22]


Ajuda Projecto IR / RF por senso
[22 de Novembro de 2017, 13:15]


Ideias para construir um quadrúpede simples por dropes
[21 de Novembro de 2017, 22:43]


Ajuda com TRIAC por senso
[17 de Novembro de 2017, 18:00]


TV LG White Screen por almamater
[15 de Novembro de 2017, 08:37]


Pergunta sobre prototipagem ( Pesquisa ) por luisjustin
[14 de Novembro de 2017, 23:22]


Medir Agua que está no Poço por Njay
[14 de Novembro de 2017, 13:28]


Amplificador audio por beirao
[12 de Novembro de 2017, 23:43]

Autor Tópico: modo sleep arduino  (Lida 4236 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline dio123

  • Mini Robot
  • *
  • Mensagens: 928
modo sleep arduino
« em: 07 de Junho de 2013, 00:19 »
Boa noite,
Hoje decidi exprimentar no meu arduino os modo sleep. A primeira ronda consegui por o atmega8 a consumir  3.4ma.
Depois fui ligar o  lcd 16x2 em shift register e aqui  encontrei um problema. Mesmo sem o lcd ligado está consumir 40ma onde deveria estar nos 3.4ma. se tirar #include <ShiftLCD.h> já vai para o 3.4.

Alguem me poder uma dica do que se está a passar?
Acho que codigo nao tem  erro, ou pelo menos nao dectacta erro.

Desde ja agradeço
« Última modificação: 29 de Junho de 2013, 00:34 por dio123 »

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.141
    • Tróniquices
Re: modo sleep arduino
« Responder #1 em: 07 de Junho de 2013, 00:29 »
Tens algo mal nas ligações, circuitos digitais não têm esse tipo de consumo.

Offline dio123

  • Mini Robot
  • *
  • Mensagens: 928
Re: modo sleep arduino
« Responder #2 em: 07 de Junho de 2013, 15:54 »
bem o problema estava na biblioteca voltei a por os pinos originais e já funciona.Agora vai 8.5ma se tirar 7805 vai para 3.4ma.

Agora estou com o seguinte problema.  Liguei o keypad e defeni a tecla 3 para por o arduino em sleep e outro botao ligado ao pino 2 para acordar.

Marco os numeros aparece no lcd, clico no 3 o arduino entra em sleep.  Depois quando acordo clico no keypad mas nao aparece nada do ecra.
Terei de defenir novamente alguma coisa no wakeUpNow() ?

codigo está no  primeiro post actualizado.
« Última modificação: 07 de Junho de 2013, 15:56 por dio123 »

Offline dio123

  • Mini Robot
  • *
  • Mensagens: 928
Re: modo sleep arduino
« Responder #3 em: 08 de Junho de 2013, 19:56 »
Já tenho tudo a funcionar como planeado e projectado.

No entanto vi que posso usar o teclado para acordar o arduino. Assim evito assim ter um botão própio.
Pelo os esquemas que estão na net segui este http://www.crossroadsfencing.com/Diode_AND_interrupt.jpg

Coloquei o diodo 1n4007. Depois coloco o arduino em sleep mas nao consigo acordar com o keypad.

O que está mal.

Offline andre_f_carvalho

  • Mini Robot
  • *
  • Mensagens: 1.461
    • Pro - andrefcarvalho
Re: modo sleep arduino
« Responder #4 em: 08 de Junho de 2013, 21:08 »
consegues ter sinal no pino que esta ligado ao ard?

Offline dio123

  • Mini Robot
  • *
  • Mensagens: 928
Re: modo sleep arduino
« Responder #5 em: 08 de Junho de 2013, 21:37 »
no pino sem nada ligado tem 0.22v. Depois com o esquema da imagem com os diodos a mesma coisa 0.22v.

Pelo o que percebi o pino sem voltagem faz acordar o arduino do sleep. Com voltagem já não.

Offline andre_f_carvalho

  • Mini Robot
  • *
  • Mensagens: 1.461
    • Pro - andrefcarvalho
Re: modo sleep arduino
« Responder #6 em: 08 de Junho de 2013, 22:09 »
no pino sem nada ligado tem 0.22v. Depois com o esquema da imagem com os diodos a mesma coisa 0.22v.

Pelo o que percebi o pino sem voltagem faz acordar o arduino do sleep. Com voltagem já não.


entao ness caso mete uma resistência em serie para baixar ate 0v, nao sei a forma certa de como isso trabalha, mas no meu ver faz mais sentido ligar com sinal positivo, a nao ser que seja tipo switch

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.402
  • Helpdesk do sitio
Re: modo sleep arduino
« Responder #7 em: 08 de Junho de 2013, 22:22 »
Depende de como configuram as interrupções, tenho ideia que o atmega acorda tanto com rising edge como com falling edge, leiam a datasheet..
Avr fanboy

Offline dio123

  • Mini Robot
  • *
  • Mensagens: 928
Re: modo sleep arduino
« Responder #8 em: 08 de Junho de 2013, 23:40 »
resolvido, tenho de limpar o codigo.

O problema deve-se ao facto de nao ter defenido os pinos do teclado no OUTPUT antes de entrar em modo sleep.
Quando acorda define como  INPUT.
 

Offline dio123

  • Mini Robot
  • *
  • Mensagens: 928
Re: modo sleep arduino
« Responder #9 em: 10 de Junho de 2013, 00:55 »
alguem me pode confirmar o seguinte.
O multimetro na escala 2ma  .675 quer dizer 675 microamperes.

O atmega328 alimentado 3 pilhas normais, 675 microamperes. Muito bom mesmo.


Offline dio123

  • Mini Robot
  • *
  • Mensagens: 928
Re: modo sleep arduino
« Responder #10 em: 29 de Junho de 2013, 00:33 »
Boa noite,
Estou aqui com um quebra cabeças e nao sei o que está mal.
Então o sensor acorda o arduino. o arduino envia sinal rf e dorme. Isto funciona bem no atmega328 sem problemas.

O mesmo codigo no atmega8 não funciona e testei ainda noutro atmega.  Porque?

Codigo em anexo.
Citar
#include <avr/sleep.h>
#include <VirtualWire.h> // lib para RF

long tempofinal =0;
long prev = 0;   

int led = 13;
 int estado =0;



void setup()
{
pinMode(2, INPUT);
 pinMode(led, OUTPUT); 
 vw_set_tx_pin(9); // porta que vamos usar
 vw_setup(2000); // bits para comunicação
}

void loop(){
  enterSleep();
estado = digitalRead(2);
while( estado == HIGH){
  tempofinal =  millis() - prev ;
  estado = digitalRead(2);
  if (estado == LOW){
break;
 }
 if (tempofinal > 5000){
      prev = millis();
      pin2Interrupt();
}
}
  }
void pin2Interrupt(){
detachInterrupt(0); 
digitalWrite(led,HIGH);
for(float i=0;i<10000;i++){}
const char *msg = "3";
vw_send((uint8_t *)msg, strlen(msg));
digitalWrite(led,LOW);
}

void enterSleep()
{
  attachInterrupt(0, pin2Interrupt,RISING);
  delay(100);
  set_sleep_mode(SLEEP_MODE_PWR_DOWN); 
  sleep_enable();                 
  ADCSRA &= ~(1 << ADEN);
 sleep_mode();   
 
 sleep_disable();
}