LusoRobótica - Robótica em Português
Sistemas específicos => Arduino / AVR => Tópico iniciado por: dio123 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
-
Tens algo mal nas ligações, circuitos digitais não têm esse tipo de consumo.
-
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.
-
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 (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.
-
consegues ter sinal no pino que esta ligado ao ard?
-
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.
-
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
-
Depende de como configuram as interrupções, tenho ideia que o atmega acorda tanto com rising edge como com falling edge, leiam a datasheet..
-
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.
-
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.
-
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.
#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();
}