RFM12 über µC ein und ausschalten

#3642587
Lesenswert?

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
Gast #3642653
Lesenswert?

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 #3642970
Lesenswert?

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 #3643000
Lesenswert?

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
#3643369
Lesenswert?

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.
#3643578
Lesenswert?

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:
#3647221
Lesenswert?

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren