INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Arduino Leonardo Sleep Mode
24.09.2014, 17:53
Beitrag #1
Arduino Leonardo Sleep Mode
Hallo ich bin neu hier und scheinbar stehe ich mit dem Arduino Leonardo und der Sleep Mode Funktion auf Kriegsfuß. Habe folgenden Code:

#include <avr/sleep.h>
#include <avr/power.h>

int pin3 = 3;

/***************************************************
* Name: pin3Interrupt
*
* Returns: Nothing.
*
* Parameters: None.
*
* Description: Service routine for pin2 interrupt
*
***************************************************/
void pin3Interrupt(void)
{
/* This will bring us back from sleep. */

/* We detach the interrupt to stop it from
* continuously firing while the interrupt pin
* is low.
*/
detachInterrupt(0);
}


/***************************************************
* Name: enterSleep
*
* Returns: Nothing.
*
* Parameters: None.
*
* Description: Enters the arduino into sleep mode.
*
***************************************************/
void enterSleep(void)
{

/* Setup pin3 as an interrupt and attach handler. */
attachInterrupt(0, pin3Interrupt, LOW);
delay(100);

set_sleep_mode(SLEEP_MODE_IDLE);

sleep_enable();

sleep_mode();

/* The program will continue from here. */

/* First thing to do is disable sleep. */
sleep_disable();
}


/***************************************************
* Name: setup
*
* Returns: Nothing.
*
* Parameters: None.
*
* Description: Setup for the Arduino.
*
***************************************************/
void setup()
{
Serial.begin(9600);

/* Setup the pin direction. */
pinMode(pin3, INPUT_PULLUP);
pinMode(13, OUTPUT);
//digitalWrite(pin2, HIGH);

Serial.println("Initialisation complete.");
}



/***************************************************
* Name: loop
*
* Returns: Nothing.
*
* Parameters: None.
*
* Description: Main application loop.
*
***************************************************/
int seconds=0;
void loop()
{
delay(1000);
seconds++;

digitalWrite(13,HIGH);
Serial.print("Awake for ");
Serial.print(seconds, DEC);
Serial.println(" second");

if(seconds == 10)
{
Serial.println("Entering sleep");
digitalWrite(13,LOW);
delay(200);
seconds = 0;
enterSleep();
}

}

Das hoch zählen klappt wunderbar, dann geht scheinbar auch ganz kurzfristig ind die if-Schleife, springt aber sofort wieder heraus und zählt wieder hoch. Eigentlich ist es doch so programmiert, dass er nur bei einem LOW an PIN3 aus dem Sleep zurück kommt, oder habe ich einen Fehler?

Eigentlich habe ich ein klein bisschen was vor, ich will mit dem Arduino ein paar Code Pattern heraus schicken und wenn dies erledigt ist, soll dieser in den PWR_DOWN sleep und erst mit einem Power-on-reset wieder aufwachen. Die oben stehenden Zeilen sind für mich eigentlich erstmal ein Test, ob das mit dem sleep funktioniert. Ich sehe im Code eigentlich keinen Fehler, zusätzlich habe einmal probiert von außen den Pin3 auf HIGH zu legen und über einen Taster nach GND und ein zweiter Versuch war mit dem Befehl INPUT_PULLUP, wie beschrieben beides ohne erwünschten
Erfolg.

Hat jemand zum Code oben oder zu meiner eigentlichen Umsetzung Rat?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.09.2014, 18:08
Beitrag #2
RE: Arduino Leonardo Sleep Mode
Hi,
vielleicht steht hier was brauchbares:
http://playground.arduino.cc/Learning/arduinoSleepCode
Insbesondere das hier:
Zitat:When using SLEEP_MODE_IDLE, care must be taken to ensure that the 8-bit timer is disabled if you're using the arduino layer. The timer can be disabled before entering sleep using the PRR = PRR | 0b00100000; statement and subsequently re-enabled once out of sleep using PRR = PRR & 0b00000000; .
Gruss,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.09.2014, 19:04
Beitrag #3
RE: Arduino Leonardo Sleep Mode
Im Grunde mache ich es ja wie auf einigen Seiten erklärt, nur meine Frage ist, ist es so mit dem Leonardo möglich, denn häufig wird der Uno verwendet oder andere. Eine große Unterscheidung ist ja schon mal der Interrupt 0, welcher beim Leonardo an Pin3 ist, beim Uno z.B. an Pin2
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.09.2014, 20:21
Beitrag #4
RE: Arduino Leonardo Sleep Mode
Zitat:When using SLEEP_MODE_IDLE, care must be taken to ensure that the 8-bit timer is disabled if you're using the arduino layer. The timer can be disabled before entering sleep using the PRR = PRR | 0b00100000; statement and subsequently re-enabled once out of sleep using PRR = PRR & 0b00000000; .
Kleine Verständnisfrage:
Während PRR = PRR | 0b00100000; die anderen Bits von PRR unverändert lässt, setzt PRR = PRR & 0b00000000; nach meinem Verständnis alle Bits auf 0 und ist somit gleichbedeutent mit PRR=0; gemeint ist hier doch sicherlich PRR = PRR & 0b11011111; oder sehe ich das falsch?

gruß lorenz
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
25.09.2014, 10:10
Beitrag #5
RE: Arduino Leonardo Sleep Mode
(24.09.2014 20:21)Corvus schrieb:  Während PRR = PRR | 0b00100000; die anderen Bits von PRR unverändert lässt, setzt PRR = PRR & 0b00000000; nach meinem Verständnis alle Bits auf 0 und ist somit gleichbedeutent mit PRR=0; gemeint ist hier doch sicherlich PRR = PRR & 0b11011111; oder sehe ich das falsch?
Hi,
ich habe das Coding nur von der Doku-Seite kopiert. ...aber meiner Meinung nach hast Du Recht.
...aber nachdem der OP das sowieso aus irgendwelchen Gruenden nicht ausprobieren will ist es eh egal.
Gruss,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  while Schleife nach sleep mode interrupt tklaus 13 259 23.11.2016 17:40
Letzter Beitrag: Tommy56
  Leonardo- Anzeige von MIDI-Daten an ws2812b Modinox 7 482 26.01.2016 13:11
Letzter Beitrag: Bitklopfer
  Jeffs 4-Way Button Code auf Arduino Leonardo? noxx 17 1.311 16.11.2015 20:30
Letzter Beitrag: noxx
  Hilfe! Arduino Leonardo programmieren - Tastatur Simulation noxx 3 902 13.11.2015 17:15
Letzter Beitrag: noxx
Shocked Arudrino Leonardo mit Display hängt sich auf EvilKnivel 0 551 26.08.2015 20:33
Letzter Beitrag: EvilKnivel
  Arduino Leonardo Reset für UART Norbie 4 834 04.07.2015 09:10
Letzter Beitrag: Norbie
  Arduino Ethernet mit USB 2 Serial Converter/Welche Einstellungen im Arduino-Sketch lociluke 1 1.113 05.05.2015 13:40
Letzter Beitrag: Bitklopfer
  Arduino Mega-Projekt mit EEPROM auf Arduino Due portieren Foto-Ralf 17 3.138 16.03.2015 12:06
Letzter Beitrag: Foto-Ralf
  Leonardo und KeyBoardLogout Symphonie 1 489 04.12.2014 11:33
Letzter Beitrag: pylon
  Arduino im sleep Modus cb_baer 1 1.076 22.09.2014 15:32
Letzter Beitrag: Bitklopfer

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste