Forum: Mikrocontroller und Digitale Elektronik RFM12 sendet nach Aus- und Einschalten nicht mehr


von DerKorb (Gast)


Lesenswert?

Hi,
habe ein merkwürdiges Problem mit einem RFM12 Chip.
Wenn ich den Chip mit 0x8201 in den Sleepmode versetze und anschließend 
wieder aufwecke sendet er nicht mehr. Kommentiere ich die Zeile mit dem 
8201 aus funktioniert das Programm wie es soll. Am Multimeter sehe ich 
auch, dass der RFM12 wieder aus dem Sleep Mode aufwacht, da der 
Stromverbraucht wieder auf 60mA steigt. Hat jemand eine Idee warum der 
Funkchip nicht mehr funtioniert sobald ich ihn mal in den Sleep Mode 
versetzt habe?
mfg
DerKorb
1
   rfm12_init();
2
  rfm12_data( 0x8201 );  // Zeile zum Ausschalten
3
  _delay_ms( 800 );
4
  rfm12_data( 0x82d8 );
5
  _delay_ms( 800 );
6
  rfm12_tx( sizeof( sendString), PT_INITCONFIG, sendString );
7
  rfm12_tick();
8
  while(1);

von Timmo H. (masterfx)


Lesenswert?

Ich glaube nach dem Sleep musst du die Betriebsart (RX, TX) nochmal 
setzen, die vergisst er irgendwie

von Helfer (Gast)


Lesenswert?

> rfm12_data( 0x82d8 );

Beitrag "Re: RFM12 und Sleep Mode"

von DerKorb (Gast)


Lesenswert?

Die Betriebsart setze ich ja durch 0x82d8, das ist zwar anscheinend RX 
aber wenn ich den RFM12 vorher nicht in Sleep versetzte geht es damit.

Aus dem verlinkten Beitrag habe ich die Powermanagment Befehle 
entnommen, ich habe es auch schon mit 0x8238 statt 0x82d8 versucht 
klappt auch nicht. Das merkwürdige ist finde ich, dass es beim senden 
des zweiten Powermanagmentbefehls keinen Unterschied machen sollte ob 
ich vorher ein anderen Befehl gesendet habe, da der Befehl ja den 
vorherigen komplett überschreibt. Das ist bei mir aber nicht der Fall, 
sende ich vorher den Sleep geht es nicht, sende ich den Sleep nicht geht 
es. Sinn würde es für mich auch machen, dass ich sobald ich im Sleep bin 
den RFM12 nicht mehr wecken kann, da der Stromverbrauch rauf geht, 
schließe ich das aber auch fast aus. Außerdem wäre der Sleep ja sonst 
ehr nutzlos.

von DerKorb (Gast)


Lesenswert?

Ich hab das ganze mal noch auf die einzelnen Bits reduziert und 
herausgefunden, dass es ziemlich egal ist was ich mit den anderen Bits 
mache, sobald ich das ER bit einmal auf 0 gesetzt habe gehts nicht mehr, 
egal was ich danach sende.
1
  rfm12_data( RFM12_CMD_PWRMGT | RFM12_PWRMGT_EX | RFM12_PWRMGT_ET | RFM12_PWRMGT_ES | RFM12_PWRMGT_EB | RFM12_PWRMGT_EBB );
2
  _delay_ms( 800 );
3
  rfm12_data( RFM12_CMD_PWRMGT | RFM12_PWRMGT_EX | RFM12_PWRMGT_ET | RFM12_PWRMGT_ES | RFM12_PWRMGT_ER );

von DerKorb (Gast)


Angehängte Dateien:

Lesenswert?

Ich hab mal noch meinen Logicanalyzer angeschlossen, komplettes Program 
ist gleich, außer dass ich einmal 0x8201 sende und beim anderem mal 
nicht.
Ich verwende die RFM12 Lib von Labor, und den RFM12B mit 868Mhz.
1
int main ( void )
2
{  
3
  sei();
4
  rfm12_init();
5
  //rfm12_data( 0x8201 );
6
  rfm12_data( 0x80D7 );
7
  rfm12_data( 0x8208 );
8
  rfm12_tick();  
9
  while(1);
10
}

von DerKorb (Gast)


Lesenswert?

Ganz vergessen, beide Bilder sind nur Ausschnitte und zeigen den letzten 
Abschnitt der Komunikation, vorher ist natürlich alles gleich. Das 
Problem ist, was nach dem 8208 passiert. Ohne das vorherige 8201 läuft 
alles wie es soll, mit 8201 fällt das B000 weg und es geht allgemein 
nicht weiter.

von Gregor B. (gregor54321)


Lesenswert?

soll das Clock "prellen" nach dem $82xx so?

von DerKorb (Gast)


Lesenswert?

Hmm, da ich nur die RF12 Lib verwende weiß ich nicht genau wie es dazu 
kommt. Im ersten Bild wo alles funktioniert tritt das gleiche Phänomen 
aber auch nach dem Senden von 8208 auf, daher würde ich jetzt vermuten, 
dass es schon stimmt so.

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.