RFM12 über µC ein und ausschalten

OP #3642587
Hi Leute!

Ich möchte gerne über einen µC das Funkmodul RFM12 abschalten, wenn es 
nicht gebraucht wird.

Leider braucht das Modul nach dem einschalten sehr viel Strom. Ich habe 
in der Schaltung eine Spannungskonstante verbaut, die nicht mehr als 200 
mA her gibt. Diese 200 mA nimmt das Funkmodul sich nach dem Einschalten 
komplett. Schließe ich das Funkmodul fest an VCC an, funktioniert alles. 
Es ist also kein Schaltungsproblem.

Ich habe verschiedene tests gemacht, indem ich die Ports über die das 
Modul seine Daten bekommt nach GND oder nach + lege, leider alles ohne 
Erfolg.

Vielleicht hat schonmal jemand das gleiche Problem gehabt und kann mir 
weiterhelfen.

Danke
OP
Ja, die Idee mit dem Schlafmodus hab ich auch schon gehabt. Wenn ich es 
aber ganz abschalte, dann braucht es gar kein Strom mehr.

Aber wo wir gerade dabei sind. Wie mach ich das mit dem Schlafmodus?
Ich programmiere in Bascom. Was muss ich da programmieren?
Gast
Christian Betzen schrieb:
> Diese 200 mA nimmt das Funkmodul sich nach dem Einschalten
> komplett. Schließe ich das Funkmodul fest an VCC an, funktioniert alles.
> Es ist also kein Schaltungsproblem.

Doch, es ist ein Problem. Nach dem Einschalten hat ein RFM12 eine sehr 
geringe Stromaufnahme, beim Empfang ca. 10-20 mA und beim Senden bis ca. 
30 mA. Steht sogar so im Datenblatt geschrieben. 200 mA sind definitiv 
nicht normal.
Gast
Nur so als Hausnummer:

Bei mir verbrauchen ein RFM12 + Attiny45 im Schlafmodus ca 1,3µA.

Der RFM12 hat dabei sogar noch den Wakeup Timer laufen, der Tiny schläft 
tief und fest.

Bei 1,3µA würde eine Knopfzelle reichen, um das ganze ca. 17 Jahre zu 
betreiben, ich denke das sollte reichen. Und man spart sich zusätzliche 
Transistoren.

Beim Senden verbraucht das Ganze ca. 30mA und beim Starten vielleicht 
15mA. Damit dass 200mA zieht, muss schon irgendwas ganz schön schief 
gelaufen sein.
Gast
Bei mir liegt die Ruhestromaufnahme in der Größenordnung um die 600nA 
mit einem MSP430G2553, dem abgeschalteten RFM12 bei Speisung durch eine 
3,6V Lithiumprimärzelle im R6 Format (AA). Es gibt keinen Schalter und 
es ist nicht vorgesehen die Zelle zu wechseln..

Gruß,

Holm
Um den Schlafmodus zu verwenden, muss der NIRQ-Pin mit dem 
Mikrocontroller verbunden sein, da er den Controller nach Ablauf der 
eingestellten Wake-Up-Zeit per Pin-Change-Interrupt wieder aufweckt.

Um das Funkmodul schlafen zu legen, musst du in den entsprechenden 
Registern (Configuration Setting und Power Management) die richtigen 
Einstellungen vornehmen: Latch und FIFO deaktivieren, alle Blöcke 
ausschalten, sämtliche Interrupts abhandeln (Gründe und Gegenmittel sind 
bei der Beschreibung des Statusregisters erklärt), so dass NIRQ auf high 
bleibt, Wake-Up-Timer einstellen und aktivieren. Hierbei hilft der 
Artikel RFM12 weiter.

Wie man den µC schlafen legt, steht in Sleep Mode.
OP
Danke für den Beitrag Felix!

Der NIRQ ist mit dem Portd.2 verbunden. Damit sollte man dann n ext. IR 
auslösen können.

An die Register hab ich garnicht gedacht. Hab noch nicht so viel mit dem
Modul experimentiert.

Im Anhang das Programm womit ich momentan arbeite.

Eine Zeile für die "Configuration Setting" kann ich gar nicht finden.

In der Endlosschleife wird immer das Register vom Power Management 
angesprochen.

Wenn ich das richtig verstanden habe, werden immer die Teile et es ex 
vorm senden ein und nach dem senden wieder ausgeschaltet.

Ist das zum Stromsparen im Funkmodul alles was man machen kann?

Wenn ich jetzt den Wake up noch aktivieren will, muss ich das Register 
von &h8238 in &H823A ändern. Richtig?

Außerdem muss ich dann nach jedem Ablauf noch das Register &h196 für 
300ms setzen. Richtig?

Sry wenn ich da so nachfragen muss. Mir fehlt da die nötige Erfahrung 
mit...
Angehängte Dateien:
Die "Configuration Setting" ist die dritte Zeile in deiner init: "Call 
Rf_cmd(&H80d7)". Bevor du in den Sleep-Mode gehst, ist empfehlenswert, 
Latch und FIFO abzuschalten, das wäre dann also "Call Rf_cmd(&H8017)".

Was mir noch auffällt: Du hast in deinem Code eine Crystalfrequenz von 
16 MHz angegeben, daher gehe ich davon aus, dass du einen externen 
Oszillator am Controller hängen hast und du den Taktausgang des RFM12 
nicht brauchst. Richtig? Wenn das so ist, dann ersetze "Call 
Rf_cmd(&Hc080)" durch "Call Rf_cmd(&Hc000)" und alle "Call 
Rf_cmd(&H8200)" durch "Call Rf_cmd(&H8201)" sowie "Call Rf_cmd(&H8238)" 
durch "Call Rf_cmd(&H8239)".

Was die Stromaufnahme angeht: Wie sicher bist du dir, dass die 200 mA 
vom Funkmodul gezogen werden. In deinem Code ist von einem LCD die Rede 
- wie wird das versorgt? Hängt das an derselben Quelle?

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 12 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.