collapse

* Posts Recentes

Amplificador - Rockboard HA 1 In-Ear por almamater
[Ontem às 19:13]


O que é isto ? por KammutierSpule
[26 de Março de 2024, 19:35]


Bateria - Portátil por almamater
[25 de Março de 2024, 22:14]


Emulador NES em ESP32 por dropes
[13 de Março de 2024, 21:19]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]


Distancia Cabo por jm_araujo
[08 de Janeiro de 2024, 16:30]


Meu novo robô por josecarlos
[06 de Janeiro de 2024, 16:46]


Laser Engraver - Alguém tem? por almamater
[16 de Dezembro de 2023, 14:23]

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

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

Offline dio123

  • Mini Robot
  • *
  • Mensagens: 1.032
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.598
    • 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: 1.032
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: 1.032
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.469
    • 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: 1.032
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.469
    • 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.733
  • 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: 1.032
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: 1.032
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: 1.032
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();
}