Hallo,
ich möchte ein Funkmodul (z.B.
http://www.pollin.de/shop/dt/MDU5OTgxOTk/Bausaetze_Module/Module/Funkmodul_RFM12_433_Sende_Empfangsmodul.html)
im Sleepmodus betreiben, damit es über Monate oder Jahre von
AA-Batterien leben kann.
Nur, wenn es Daten empfängt, soll das Funkmodul aufwachen, einen
Interrupt erzeugen und damit einen angeschlossenen Atmega aufwecken, der
die Daten verarbeitet, und eine Antwort zurück senden.
Ist es möglich, das Funkmodul so in den Sleepmodus zu versetzen, dass es
trotzdem noch auf eingehende Daten reagiert? Quasi Tx off, Rx on? Auch
der Empfangskanal sollte so sparsam wie möglich laufen. Erstmal reicht
es, auf irgendwelche eintreffenden Signale zu warten, bevor das Modul
so weit aufwacht, dass es die Signale auch demoduliert. Ich habe dazu im
Datenblatt nichts gefunden.
Gruß
Jannis
Noch einmal kurzgefasst:
Kann ich das RFM12-Modul so schlafen schicken, dass es erst dann
aufwacht, wenn ein anderes RFM-Modul Daten sendet?
Wenn ja, wieviel Strom wird während der Wartezeit gezogen?
Wenn die ersten Daten (wegen noch "Halbschlaf") verloren gehen, ist es
kein Problem. Der Sender kann seine Anfrage nach kurzer Zeit
wiederholen.
Gruß
Jannis
So weit ich weiß geht das nicht. 10-14 mA werden im Empfang immer
verbraucht.
Eine einfache Methode um den Verbrauch zu senken, wäre den Aufwand auf
den Sender zu verschieben.
Der Empfänger wacht jede Minute für etwa eine Sekunde auf. Wenn in der
Zeit nichts empfangen wird, legt er sich wieder schlafen. Wenn der
Sender was zu senden hat, sendet er erstmal 1 Minute lang kurze (kürzer
als 0,5 Sekunden) "Bleib wach" Pakete. Nach jedem Packet wartet er für
eine halbe Sekunde. Wenn der Empfänger ein "Bleib wach" Packet empfängt,
antwortet er darauf, und die Kommunikation wird normal fortgeführt.
Dadurch verringert sich der Stromverbrauch von 12 mA auf ((59 * 1µA) +
12 mA) / 60 = 0,2 mA. Natürlich erhöht sich dafür die Reaktionszeit.
Jannis schrieb:> Noch einmal kurzgefasst:>> Kann ich das RFM12-Modul so schlafen schicken, dass es erst dann> aufwacht, wenn ein anderes RFM-Modul Daten sendet?>> Wenn ja, wieviel Strom wird während der Wartezeit gezogen?> Wenn die ersten Daten (wegen noch "Halbschlaf") verloren gehen, ist es> kein Problem. Der Sender kann seine Anfrage nach kurzer Zeit> wiederholen.>> Gruß> Jannis
Da stecken diverse Problemchen drin.
So ein Funkmodul hört ja ständig auf der Frequenz auf der
Trägerfrequenz. Um das zu tun, muss ein Schwingkreis diese
Trägerfrequenz produzieren und eine Filterschaltung Frequenzmodulierte
Signale darauf auswerten.
Als nächstes muss der Mikroprozessor des RFM12 kucken, ob die Präambel
in den Daten erkennbar ist und dann ggf. den Fifo füllen und auf der
INT-Leitung Bescheid geben.
D.h. was m.E. grundsätzlich denkbar ist, dass der Mikroprozessor, der am
RFM hängt schläft und durch den INT des Fifo aufgeweckt wird.
Allerdings muss der richtig schnell bei der Sache sein, sonst
Fifo-Überlauf und Daten gehen verloren.
Bei einer Datenrate von 9600 Baud sind das also Zehntel von
Millisekunden - so ein uC braucht aber mehrere Millisekunden zum
Aufwachen, ist also höchst kritisch bis unmöglich.
Dann ist die Frage wieviel Strom das RFM zum reinen Empfang braucht,
sollte es wirklich als einziges Modul in der Schaltung laufen.
Lt. Datenblatt braucht das Modul im RX Modus mindestens 11-13 mA.
Dazu kommt aber noch Strom für einen Spannungsregler oder andere
Bauteile, sagen wir mal 25mA gesamt.
Dann hält die 3xAA-Batterie (10Ah) theoretisch 400h oder 16 Tage.
Wenn man die Kapazität überhaupt komplett nutzen kann und die nicht auf
"0V" gerechnet ist, was in der Praxis ja nicht geht, weil unter einer
bestimmten Spannung man eine Schaltung nicht mehr betreiben kann.
Aber: das Funkmodul wird wegen des ständigen Rauschens im Funk sicher
häufig meinen jetzt kommt was und dem uC Bescheid geben aufzuwachen,
dann wird jedesmal 10-20mA zusätzlich verbrutzelt und die Laufzeit
verkürzt sich nochmal deutlich.
Und wie gesagt ist es fraglich, ob der uC überhaupt schnell genug
aufwachen kann. Wenn er laufen muss, dann hält die Batterie höchstens
ein paar Tage.
Philip Peter schrieb:> So weit ich weiß geht das nicht. 10-14 mA werden im Empfang immer> verbraucht.>> Eine einfache Methode um den Verbrauch zu senken, wäre den Aufwand auf> den Sender zu verschieben.>> Der Empfänger wacht jede Minute für etwa eine Sekunde auf. Wenn in der> Zeit nichts empfangen wird, legt er sich wieder schlafen. Wenn der> Sender was zu senden hat, sendet er erstmal 1 Minute lang kurze (kürzer> als 0,5 Sekunden) "Bleib wach" Pakete. Nach jedem Packet wartet er für> eine halbe Sekunde. Wenn der Empfänger ein "Bleib wach" Packet empfängt,> antwortet er darauf, und die Kommunikation wird normal fortgeführt.>> Dadurch verringert sich der Stromverbrauch von 12 mA auf ((59 * 1µA) +> 12 mA) / 60 = 0,2 mA. Natürlich erhöht sich dafür die Reaktionszeit.
Genau, Schaltungen wie Wetterstationsempfänger nutzen meist ein
bestimmtes Timing-Protokoll, d.h. der Empfänger weiss in welchem
Zeitraum die Clients funken werden und wacht dann für eine Sekunde auf.
S.h. zB. http://www.dc3yc.privat.t-online.de/protocol.htm
Jannis schrieb:> Kann ich das RFM12-Modul so schlafen schicken, dass es erst dann> aufwacht, wenn ein anderes RFM-Modul Daten sendet?
Nein, das geht prinzipiell nicht. Würde auch keinen großen Sinn machen,
weil der Energiebedarf des Empfängers ziemlich hoch ist.
> Der Sender kann seine Anfrage nach kurzer Zeit> wiederholen.
Das ist schon fast der richtige Ansatz. Auch die ganz richtigen setzen
im Prinzip auf Wiederholungen, wie genau das ablaufen sollte, hängt vor
allem davon ab, wer Energie sparen muß. Nur der Empfänger, nur der
Sender oder beide?
Wieviel Energie sich sparen läßt, hängt vor allem davon ab, wie stark
die HF-Umwelt mit Störungen verseucht ist, wie hoch also die
Wahrscheinlichkeit ist, daß ein Paket hinreichend fehlerfrei übertragen
werden kann. Das ist die eine Hälfte, die andere ist, wie hoch die
Latenz sein darf, mit der eine Nachricht übermittelt werden muß.
In Analogie zu einem µC: Du wünschst hier eigentlich eine
Interruptsteuerung, die geht hier aber nicht. Der Ausweg ist Polling,
hier allerdings erschwert dadurch, daß der Poller mit einer gewissen
Wahrscheinlichkeit nix zum Pollen vorfindet und zusätzlich dadurch, daß
Sender und Empfänger nicht dieselbe Zeitbasis haben, sondern zwischen
ihnen eine gewisse Gangabweichung besteht.
Die Herausforderung ist also, sich ein sinnvolles Protokoll für diese
Sachverhalte auszudenken und dies für die konkreten Werte der beiden
Hauptparameter Übermittlungswahrscheinlichkeit und zulässige
Nachrichtenlatenz zu optimieren, natürlich unter Berücksichtigung der
Parameter des Hilfssystems Polling, also der Zeitbasen der beteiligten
Systeme.
Übrigens: du bist erstaunlicherweise nicht der erste, der mit einem
solchen System kämpft. Ein kompetente Google-Recherche liefert innerhalb
zwei, drei Minuten soviel einschlägiges Lesematerial, daß du dir nix
mehr selber ausdenken mußt. Als Google-Futter für den Einstieg wäre
"sensor net protocols" wohl das geeignete, wobei die Suchergebnisse
meistens den allgemeinen Fall deines kleinen Peer-to-Peer-Problems
behandeln. Aber wenn man die Ansätze zur Lösung des allgemeinen Falls
verstanden hat, ist es ja sehr leicht, das auf einen einfachen
Spezialfall "runterzudenken".
Jannis schrieb:> Noch einmal kurzgefasst:>> Kann ich das RFM12-Modul so schlafen schicken, dass es erst dann> aufwacht, wenn ein anderes RFM-Modul Daten sendet?
jain
Man kann die Betriebsart mit "Low Duty-Cycle Mode" verwenden.
Der Trick dabei ist, das das Modul die meiste Zeit schläft und nur in
einem einstellbarem Intervall aufweckt und kurz auf Empfang geht. Wenn
du das Modul also jede Sekunde für 100ms empfangen lässt, dann hast du
nur noch 10% Energieverbrauch.
Die Zeit die das Modul wach sein muss hängt von der Datenrate/Paketlänge
ab, die Pause dazwischen vom Sender, denn der muss sein Paket dann so
lange wiederholen, das in dieser Zeit der Empfänger den notwendigen
Paketstart erfassen kann.
Hab ich bei einem RFM22B schon in meiner Fernbedienung für die
Standheizung gemacht. Der Empfänger im Auto verbraucht so bei 12V nur
ca. 0.8mA.
(Empfänger 1s aus 100ms ein)
Sascha
Vielen Dank für eure Hinweise. Ich denke, ich werde es lösen, wie einige
von euch vorgeschlagen haben: der Empfänger schaltet sich in kurzen
Intervallen (Sekunden ... 1 Minute) ein, um eventuell eingehende Daten
zu verarbeiten und geht sonst nach einigen Millisekunden wieder
schlafen. Zusätzlich werde ich versuchen, Sender und Empfänger zu
synchronisieren, so dass der Sender nicht auf Verdacht senden muss.
Ich werde mich dann mal genauer damit beschäftigen, wie lange es dauert,
das Modul vom Schlaf- in den RX-Modus und wieder schlafen zu schicken,
und ob dabei irgendwelche Stromspitzen auftreten, denn davon wird das
Timing abhängen.
Auch die Sensornetz-Protokolle werde ich studieren. Da es meine ersten
Schritte in diesem Bereich sind, habe ich erst einmal hier nach
Erfahrungswerten gefragt, bevor ich tief in eine Thematik einsteige, die
vielleicht schon durch ein Flag im RFM12-Modul hardwareseitig hätten
gelöst werden können.
Danke
Jannis