Får inte SleepMode att fungera korrekt - Arduino MEGA

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
Användarvisningsbild
fosfor
Inlägg: 453
Blev medlem: 13 februari 2013, 05:43:15
Kontakt:

Får inte SleepMode att fungera korrekt - Arduino MEGA

Inlägg av fosfor »

Hallå allihop!

Jag har ett program som fungerar bra som jag skulle vilja lägga in en Sleep funktion i. :idea:
Som slår igång när man inte använt apparaten på en stund, men som väcks sen när man trycker på en knapp.
Men när jag gör det, utefter en guide på Arduinos sida och som finns på YouTube, så ballar precis allt ur och inget fungerar.

Jag har en rotaryencoder motor som kan gå fram och tillbaka, räkna pulser och visa allt på en skärm.
Styrs enkelt med knapptryckningar.

Men med denna kod, som jag trippelkollat ska stämma enligt Arduinos guide, så fungerar inget alls.
Skärmen bara lyser, och kortet verkar gå ner i Sleep Mode direkt och inte kunna väckas ur den hur jag än gör.
Har testat massa kombinationer med External Interrupts osv.

En grej jag misstänker är att lite rader som står som void kanske inte ska ligga under void loop? :humm:
(Nybörjare).

Någon som har något förslag? Jag bifogar filen.
Allt fungerar i koden förutom det som står under texten "SLEEP MODE", som står på ett par ställen i koden.

Kortet är en Arduino Mega.

Jag har testat att köra både djupt och icke djupt viloläge.
Under djupt viloläge så indikerar IBLAND serial monitor att den vaknar till, men somnar direkt igen.
Under lätt viloläge så vaknar den till var femte sekund.
Vida båda dessa tillfällen kan man inte göra ett smack med apparaten, den reagerar inte övervhududtaget på knapptryckningar eller så. :|

Jag misstänker att jag helt enkelt bara lagt koden i fel ordning eller så.
Koden går igenom kompilern.

Någon som vet vad det kan vara?
(Förutom nybörjare bakom spakarna)

Mvh F
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
HUGGBÄVERN
Tidigare soundbrigade
Inlägg: 32629
Blev medlem: 23 augusti 2006, 22:44:11
Ort: Lilla Paris
Kontakt:

Re: Får inte SleepMode att fungera korrekt - Arduino MEGA

Inlägg av HUGGBÄVERN »

Samma projekt som i alla dina trådar om Arduino?!
Användarvisningsbild
fosfor
Inlägg: 453
Blev medlem: 13 februari 2013, 05:43:15
Kontakt:

Re: Får inte SleepMode att fungera korrekt - Arduino MEGA

Inlägg av fosfor »

Japp :D
Användarvisningsbild
HUGGBÄVERN
Tidigare soundbrigade
Inlägg: 32629
Blev medlem: 23 augusti 2006, 22:44:11
Ort: Lilla Paris
Kontakt:

Re: Får inte SleepMode att fungera korrekt - Arduino MEGA

Inlägg av HUGGBÄVERN »

Det blir stökigt att hålla reda på vad du håller på med och ge vettiga råd. :idea:
Användarvisningsbild
fosfor
Inlägg: 453
Blev medlem: 13 februari 2013, 05:43:15
Kontakt:

Re: Får inte SleepMode att fungera korrekt - Arduino MEGA

Inlägg av fosfor »

Alla tidigare trådar och ämnen är lösta.
Nu är det enbart att försätta prylen i ett bra sleepmode som är på agendan :)
Användarvisningsbild
jesse
Inlägg: 9233
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: Får inte SleepMode att fungera korrekt - Arduino MEGA

Inlägg av jesse »

Nu kan inte jag Arduino alls, men som gammal programmerare så reagerar jag på några detaljer när jag söker på "sleep" i koden...

delay(5000); orsakar troligen det mesta av problemen. Du kan inte ha en delay på 5 sek inne i loopen. Du måste istället sätta igång en variabel som räknar upp (eller ner) med bestämda tidsintervall - finns säkert stöd för det i Arduino med nån funktion eller så. ??? När den kommit till 50 eller 500 (beroende på om den räknas upp 10 ggr/sek eller 100 ggr/sek till exempel) så går man in i sleep-mode och nollställer samtidigt räknaren.

Risken är väl att en snurrande räknare/timer (med interrupt) väcker processorn hela tiden. I så fall får man inaktivera timern innan man går in i sleep.

sleepSetup(); // borde inte finnas i loopen - Det borde funka att lägga den före loopen, dvs. i setup().

Men eftersom dessa två funktioner var de enda som fanns i loopen så blir det ju tomt.... någonting annat ska den väl göra än bara sova och vänta?

Eller görs allt i pin-interrupten? Det kanske funkar, men känns inte riktigt bra. Interruptrutiner ska vara så korta som möjligt: Minsta möjliga mängd kod, och helst inga funktionsanrop inuti om man inte måste.

Jag har inte alls kollat koden noga, bara en minut eller så.... Men jag hoppas att något av mina tips kan göra nytta.
Användarvisningsbild
fosfor
Inlägg: 453
Blev medlem: 13 februari 2013, 05:43:15
Kontakt:

Re: Får inte SleepMode att fungera korrekt - Arduino MEGA

Inlägg av fosfor »

Tack! Ok ska kika.
Misstänkte att Delayet var en stor bov i dramat...
Användarvisningsbild
hawkan
Inlägg: 2586
Blev medlem: 14 augusti 2011, 10:27:40

Re: Får inte SleepMode att fungera korrekt - Arduino MEGA

Inlägg av hawkan »

Du har massor av kod i wakeup-ISR-en pinInterrupt.
Jag tror inte det är meningen. I exempelkoden heter den wakeUpNow och gör just inget.
Du har mååånga rader kod där.
Använd autoformat/indenteringsfunktionen - högerklicka i editor och välj.
Så ser du lättare vilke kod som hör till vilken funktion.
Användarvisningsbild
fosfor
Inlägg: 453
Blev medlem: 13 februari 2013, 05:43:15
Kontakt:

Re: Får inte SleepMode att fungera korrekt - Arduino MEGA

Inlägg av fosfor »

AVR/sleep.h

Den fungerar inte med Arduino Mega va? :-/
ToPNoTCH
Inlägg: 4847
Blev medlem: 21 december 2009, 17:59:48

Re: Får inte SleepMode att fungera korrekt - Arduino MEGA

Inlägg av ToPNoTCH »

Kolla på Narcoleptic library.

Vill minnas att jag kört det med framgång.

https://github.com/brabl2/narcoleptic
Användarvisningsbild
fosfor
Inlägg: 453
Blev medlem: 13 februari 2013, 05:43:15
Kontakt:

Re: Får inte SleepMode att fungera korrekt - Arduino MEGA

Inlägg av fosfor »

ToPNoTCH: Ok tack! Fungerar den likadant med Arduino MEGA?
Användarvisningsbild
fosfor
Inlägg: 453
Blev medlem: 13 februari 2013, 05:43:15
Kontakt:

Re: Får inte SleepMode att fungera korrekt - Arduino MEGA

Inlägg av fosfor »

Namnger man interrupt 3 som 3 när man använder attachInterrupt?
Fastän att den sitter på pinne 18 på MEGA kortet?
ToPNoTCH
Inlägg: 4847
Blev medlem: 21 december 2009, 17:59:48

Re: Får inte SleepMode att fungera korrekt - Arduino MEGA

Inlägg av ToPNoTCH »

Nää...18 är väl interrupt 5

Kolla här så klarnar det..

https://www.arduino.cc/reference/en/lan ... interrupt/
snigelen
Inlägg: 815
Blev medlem: 8 maj 2009, 11:02:14
Ort: Lund

Re: Får inte SleepMode att fungera korrekt - Arduino MEGA

Inlägg av snigelen »

Hej,

Jag programmerar en hel del AVR men inte i Arduino-miljö. Men ett fungerande litet test fick jag ihop.

Kod: Markera allt

#include <avr/sleep.h>

const byte interrupt_pin = 2;

void setup()
{
  pinMode(interrupt_pin, INPUT_PULLUP);
  pinMode(13, OUTPUT);
}

void loop() {
  byte i;
  goto_sleep();

  for (i = 0; i < 5; i++)
  {
    digitalWrite(13, HIGH);
    delay(100);
    digitalWrite(13, LOW);
    delay(100);
  }

}

void interrupt(void)
{
  detachInterrupt(digitalPinToInterrupt(interrupt_pin));
}

void goto_sleep()
{
  attachInterrupt(digitalPinToInterrupt(interrupt_pin), interrupt, LOW);
  set_sleep_mode(SLEEP_MODE_STANDBY);
  sleep_enable();
  sleep_cpu();
  sleep_disable();
}
Observera att om man skall väcka den med externa interrupt är det bara interrupten på pinne D2 och D3 som kan användas för sleep-modes djupare än idle (och bara på LOW level int)..

Egentligen är det fler på en mega2560, men de andra pinnarna är inte kopplade.
Användarvisningsbild
fosfor
Inlägg: 453
Blev medlem: 13 februari 2013, 05:43:15
Kontakt:

Re: Får inte SleepMode att fungera korrekt - Arduino MEGA

Inlägg av fosfor »

Snigelen:

Attans...
På pinne D2 och D3, Ext interrupt 5 och 4, så sitter min rotary encoder...
På pinne D20 och D21, Ext interrupt 1 och 0, där sitter min display...

Då blir det till att flytta rotary encoderns intterupt till external int 3 och 2 för att få detta att gå ihop?
Och låta sleep moden ha kontakt med D2 och D3?
Skriv svar