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
Jannis schrieb: > Kann ich das RFM12-Modul so schlafen schicken, dass es erst dann > aufwacht, wenn ein anderes RFM-Modul Daten sendet? Nein.
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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.