Go Down

Topic: Xbee1+Leonardo1(Sender) & Xbee2+Leonardo2(Empfänger) in sleep modus setzen (Read 499 times) previous topic - next topic

milito

Hallo habe 2 arduino leonardo mit jeweils 1 xbee s1 modul mit Hilfe des SD Wireless shield im Einsatz.

Habe das Sender & Empfänger prinzip und betreibe diese mit jeweils einer 9V Akkubatterie.
Da ich etwas Strom spraren will (Batterielebensdauer länger), wollte ich den Sender(XBEE 1) und den Empfänger in sleep modus setzen, wenn diese nichts senden oder empfangen und wenn diese was senden /empfangen müssen, werden diese geweckt.

Habe gelesen dass ich dazu SM =1 (set pin hibernation) und D7=0(for data flow) setzen muss und zzgl. noch anhand eines Pullupwiderstandes :

Pin 9 (Arduino)
|
|
|—-10 kOhm—-Vcc (3.3 V)
|
|
Pin 9 DTR (XBee)

dieses pin DTR anhand von funktionen so einstellen kann:
siehe hier : http://www.fiz-ix.com/2012/11/low-power-xbee-sleep-mode-with-arduino-and-pin-hibernation/

Meine frage: muss ich sowohl beim Sender als auch beim Empfänger die gleiche einstellung machen, oder braucht der Empfänger(XBEE2) andere Einstellungen?

Zweite frage ist: Anstatt pullup zu verwenden, würde ich den integrierten Pullup (INPUT_PULLUP) nehmen, doch wie ist es mit der Spannung?-> XBEE braucht 3,3V doch der Digitalpin 9 vom Arduino gibt 5V raus. Brauche ich nen spannungseiler dazu oder sollte ich es doch mit dem widerstand lieber machen?


uwefed

2. Frage: Spannungsteiler,
1. Zweifel: Wie sollen die beiden Leonardo wissen wann das XBee Modul einzuschalten ist, um Daten zu empfangen???
Grüße Uwe

milito

HI Uwe danke dir für die schnelle antwort bzgl auch frage 2.
Zu frage 1 dachte ich mir folgendes:

Am Sender habe ich bewegungssensoren. Idee-> Wenn Bewegung von den Bewegungssensoren detektiert wird, wecke ich dazugehörigen xbee auf, um diese Daten an dem Empfänger zu senden(es sind nur 1Byte große kontrollvariablen).

Der Empfänger: wird aufgeweckt, wenn daten an dem Serial anliegen, wenn keine anliegen, bleibt er im Sleep-modus.

Ich hoffe, meine Absicht ist klarer.
Nun war ich mir nicht sicher, ob ich die gleichen Einstellungen (DTR Pin, SM=1 und D7=0 auch beim Empfänger so machen muss)?

gloob

Wie soll der Leonardo2 denn wissen das Daten da sind, wenn er im Sleep Modus ist?

Den Sender kannst du schlafen schicken, nur den Empfänger musst du meiner Meinung nach immer aktiv halten.

uwefed


Wie soll der Leonardo2 denn wissen das Daten da sind, wenn er im Sleep Modus ist?

Den Sender kannst du schlafen schicken, nur den Empfänger musst du meiner Meinung nach immer aktiv halten.

dem kann ich nur anschließen.
Grüße Uwe

milito

Ah ok verstehe, dann is meine Idee doch nicht ganz richtig.

Ich würde es beim Leonardo2 so realisieren:

Code: [Select]

if(Serial.available>0){
   //hier wakeup funktion aufrufen und empfangene Byte speichern
.....

]



Kann es vllt sein, dass es durch das aufwecken zu lange dauern würde und ich somit nicht rechtzeitig schaffe, das ankommende Byte abzufangen?


uwefed

Woher sollen die Daten im Buffer herkommen wenn der Empfänger nichts empfängt weil er schläft?????
Oder verbindest Du die beiden Arduino mit einem Kabel über die Serielle Schnittstelle um die XBees aufzuwecken bevor Du sendest??

SkobyMobil

Hallo,
es eben die Frage, wie man das Ding schlafen legen könnte.

Einmal- wache nur auf, wenn Du vom µC ein Signal bekommst.

Oder, warte auf ein FunkSignal und wache auf.
Vielleicht gibt es verschiedene SleepModi.
Gruß und Spaß
Andreas
die zweite Maus bekommt den Speck...

milito

Hey danke für die tollen tipps.
Habt recht, den Empfänger schlafen legen geht nicht bzw wäre nicht sinng, sonst würde er die Daten nicht abfangen :D


Danke sehr


Sagt mal gibt es die Möglickeit, das XBEE direkt an dem Arduino über die Pins anszuschliessen? - Ohne SD Wireless Shield?

Da müssten doch nur die Pins vom xbee reichen: GND, VCC(3,3), DIN,DOUT,DTR

XBEE                                        Arduino
DTR                                          Digital pin 9  - eventuell mit spannungsteiler von 5V auf 3,3?
GND                                        GND
VCC                                         3,3V
DIN                                         RX
DOUT                                    TX

wäre das ok`?

uwefed


Hey danke für die tollen tipps.
Habt recht, den Empfänger schlafen legen geht nicht bzw wäre nicht sinng, sonst würde er die Daten nicht abfangen :D


Danke sehr


Sagt mal gibt es die Möglickeit, das XBEE direkt an dem Arduino über die Pins anszuschliessen? - Ohne SD Wireless Shield?

Da müssten doch nur die Pins vom xbee reichen: GND, VCC(3,3), DIN,DOUT,DTR

XBEE                                        Arduino
DTR                                          Digital pin 9  - eventuell mit spannungsteiler von 5V auf 3,3?
GND                                        GND
VCC                                         3,3V
DIN                                         RX
DOUT                                    TX

wäre das ok`?


3 Problemchen:
1)
Din - TX
Dout - RX
2) auch Din braucht einen Spannungsteiler um die 5V des Arduino auf 3,3V zu bringen.
3) Der Pinabstand des XBee ist 2mm nicht 2,54 mm wie der Rest der Elektronikwelt. Du brauchst dazu ein Adapterboard.

Grüße Uwe

milito

Hi danke nochmal habe nene spannungsteiler für den DTR pin gebastelt, jetzt nur die Frage, den PullupWiderstand brauche ich doch trotzdem, um einen definierten Pegel bei Störungen zu haben oder täusche ich mich?


milito

Hi danke sehr was mir noch recht unklar ist, warum wird beim wake das als Output definiert und auf low und beim sleep wird der pin auf Input defniert?

Bin da durcheinander, warum wird das so gemacht?

Hier  der Code dazu:

Code: [Select]

void xbeesleep() {
  Serial.println("sleep");   
  pinMode (XBEE_sleepPin,INPUT);    // put XBee to sleep
  digitalWrite(XBEE_sleepPin,LOW);  // Setting this pin to LOW turns off the pull up resistor, thus saving precious current
}

void xbeewake() {
  Serial.println("wake");   
  pinMode(XBEE_sleepPin,OUTPUT);   // Set the "wake-up pin" to output
  digitalWrite(XBEE_sleepPin,LOW); // wake-up XBee
  delay(1000); //make sure that XBee is ready



milito

kann mir das jemand bitter erklären, warum der pin in dem code einmal als INPUT und einmal als OUTPUT verwendet wird?

Iwie verstehe ich das nicht :(

Danke sehr

Go Up