Forum: Mikrocontroller und Digitale Elektronik RFM12 868 Stromsparen, aber wie?


von Timo P (Gast)


Lesenswert?

Hallo!

Es gibt einige Beiträge zum Thema RFM12. Dazu auch der angebotene Code 
aus "Bidirektionale RS232 Funkbrücke" FETTES LOB dazu!

Da ich einen kleinen Sender mit einem Sensor ausstatten will, muss ich 
so viel Strom sparen, wie möglich. ATMEGA32, RFM12 und Knopfzelle bilden 
quasi die hardware.
Wie kann ich am meisten Strom sparen, wenn ich sagen wir im 1 Hz Takt 
ein paar einzelne Bytes versenden möchte?
Bisher wache ich den ATMEGA via 32kHz Quarz auf, versetze das HF-Modul 
in den tx_mode() , versende die Daten, versetze das Modul in den 
Standby-Modus und schlafe dann mit dem ATMEGA wieder ein.

Gibt es sinnvollere Varianten? z.B. das Funkmodul stromlos zu schalten? 
Oder braucht es dann zu lange/zu viel Strom, um neu initialisiert zu 
werden?

Danke für Anregungen!

von TM (Gast)


Lesenswert?

Hi,

Die Zeit in der dein µController die Daten bereits zum Funkmodul 
gesendet hat und das Funkmodul noch am senden ist kannst du auch den µC 
in Sleep versetzen. Danach kurz aufwachen und das RFM Modul in 
Standbyschalten und anschließend auch wieder den Controller.
Würde sich allerdings eventuell ersta ab einer Bestimmten Datenmenge 
lohnen.
Vllt ist diese Wartezeit bei dir auch kaum vorhanden?

Gruß Tobias

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Timo P schrieb:
> z.B. das Funkmodul stromlos zu schalten?

Musst Du nicht. Das Teil hat einen PowerDown mode mit <5µA 
Stromaufnahme. Völlig ausreichend.

von Verwirrter Anfänger (Gast)


Lesenswert?

Du musst den Atmega nicht per Quartz aufwecken, wenn dir die exakte 
Frequenz nicht so wichtig ist. Das kann auch das RFM modul übernehemen.

Ich hab mir auch so einen kleinen Funksender gebaut, mit einem tiny45, 
dem rfm12 und einem NTC als Temperatursensor. Das ganze läuft mit einer 
Knopfzelle und verbraucht im Schlafmodus laut meinem Handmulti 2.2 µA. 
Allerdings trau ich dem Multi in diesem Bereich nicht mehr so ganz.
Ich erwarte mindestens 70 Tage Laufzeit mit einer Zelle, und die 
Entladekurve sieht bisher recht gut aus. Nach ca. 30 Tagen ist die 
Spannung noch bei 3.09V

Ich hab im normalen Betrieb alles deaktiviert bis auf den ADC. Bevor ich 
in den POWER_DOWN Mode gehe schalte ich alle Pins auf input um. Für 
welche Pins du den Pullup aktivieren musst, würde ich einfach mal 
durchprobieren.
Das Funkmodul setze ich dann in den Schlafmodus, mit einem Timer der das 
nach 180 Sekunden wieder aufweckt.

Bei diesen Strömen muss man auch die restliche Beschaltung beachten.
Wenn irgendwo ein Widerstand ist, der zwischen VCC und GND verbindet, 
kann das schon ein Großteil des Verbrauch ausmachen. selbst eine 100k 
Verbindung würde den Verbrauch in meinem Fall verdoppeln.
Das kann zum Beispiel durch schlechtes Ätzen passieren, durch eine 
schlechte Schaltung / Code, bei der durch irgenwelche Pullups ständig 
Strom fließt.

von Timo P (Gast)


Lesenswert?

diesen power down nutze ich ja auch. Werde nun mal genau messen, welchen 
Strom das Modul aufnimmt, in dem ich die VDD-Leitung aufschneide und ein 
Multimeter zwischenhänge.
Dann kann ich RX, TX und den sleep-mode mal vergleichen.


evtl. ist es besser, das Modul im power down per wake up timer den 
controller zu wecken, so könnte ich den controller in einem anderen 
modus quasi tiefer schlafen lassen können. Lohnt sich dies?

Daten ca. 8Byte 1x die Sekunde

von Timo P (Gast)


Lesenswert?

Kann ich den "standby-mode" auch nutzen, wenn ich von intern takte? 
Verstehe nicht ganz, was im Datenblatt gemeint ist.

Dort steht:


When the SM2..0 bits are 110 and an external crystal/resonator clock 
option is selected, the SLEEP instruction makes the MCU enter Standby 
mode. This mode is identical to Power-down with the exception that the 
Oscillator is kept running

evtl. muss ich von extern Takten, das HF-Modul hat ja 10MHz.


Es gibt leider keine Gegenüberstellung der Modi bezüglich des 
Stromverbrauches. Mir ist sehr wohl bewusst, dass dieser von der 
Betriebsspannung und von der Taktrate abhängig ist, aber in 
Datenblättern anderer Controllerhersteller sind diagramme angegeben 
gewesen.

Danke für Hilfe auch hierzu?

von Timo P (Gast)


Lesenswert?

lt. Datenblatttabelle:

Active 8 MHz, VCC = 5V (ATmega32) sind es 12mA typisch.

Ich habe immer um die 20mA für einen Controller. z.B. wenn ich ihn im 
Programmieradapter habe und vom Netzteil aus speise. Wo liegt mein 
Fehler?
Dabei bin ich im Active mode, dabei habe ich auch 8MHz.

von Verwirrter Anfänger (Gast)


Lesenswert?

Hier gibts eine Übersicht der verschiedenen Modi:
http://www.mikrocontroller.net/articles/Sleep_Mode#Batterielebensdauer

Danach bleibt beim Standby der interne Oscilator aktiv.

Ich benutz bei meinem Tiny auch den internen Takt und hab keine Probleme 
mit dem power down Modus. Solange dir die Aufwachzeit genügt, würde ich 
den Modus empfehlen, da der am wenigsten verbraucht.

von Matthias (Gast)


Lesenswert?

@ verwirrter Anfänger:
Könntest du deinen Source bitte online stellen? Konntest du vorhandenen 
Source direkt nutzen mit einem Software SPI des tiny? Ich hab in der 
letzten Zeit versucht das ganze mit einem tiny44 anzusteuern, aber 
irgendwie keinen Erfolg gehabt. Mit dem mega8 lief es direkt...

Vielen Dank

von Verwirrter Anfänger (Gast)


Lesenswert?

Der Verbrauch hängt stark davon ab, welche Komponenten des Chips 
aktiviert sind und was der Chip gerade macht, standardmäßig sind das 
glaub ich alle an.

Hat der Programmieradapter vielleicht auch noch andere Komponenten? 
LEDs, Widerstände an irgendwelchen Pins, die gerade Output sind?

Ist VCC an dem Programmieradapter wirklich 5V oder ist das 5.15V, 5.25V?

Alles zusammen kann durchaus was ausmachen.

von Verwirrter Anfänger (Gast)


Lesenswert?

@Matthias
Ich werd die gleich mal ein bischen aufräumen und kann die online 
stellen.

Das ganze ist allerdings keine wirklich ordentliche Library. Ich hab mir 
das ganze selbst zusammengesucht und je nach Projekt entwickel ich das 
weiter.
Der Code für den Sender benutzt eine Software SPI und kann nur Senden 
(Blocking, ohne Interrupts).

Ich hab auch noch eine andere Version für den Mega1284P, der benutzt 
Hardware SPI, kann Senden und Empfangen, und benutzt einen simplen 
Buffer und Interrupt, um längere Sachen zu senden, ohne den Programmfluß 
zu blockieren.

Man sollte ohne Probleme den Software SPI vom Tiny mit der Interrupt 
Routine des Megas kombinieren können.

Welche Variante bräuchtest du?

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Verwirrter Anfänger schrieb:
> Bevor ich
> in den POWER_DOWN Mode gehe schalte ich alle Pins auf input um.

Mit unbeschalteten Pins sollte man dies nicht tun. Alle Pins sollten 
einen festen Pegel haben und keinen Strom treiben.

von Matthias (Gast)


Lesenswert?

@verwirrter:
Die Tiny-Variante mit dem Software SPI bitte :)

Danke

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
Noch kein Account? Hier anmelden.