Forum: HF, Funk und Felder RFM12 FIFO Problem


von Andre M. (gluehwein)


Lesenswert?

Hallo Ihr RFM12 Experten,

ich habe bei mir einen RFM12 Sender und Empfänger laufen.
Der Sender funktioniert soweit schonmal fehlerfrei.
Leider macht der Empfänger noch ein Problem. Im Forum habe ich leider 
noch nichts passendes gefunden...
Ich kann leider nur die ersten beiden gesendeten Bytes (16bit) aus dem 
FIFO lesen.

Ich habe folgenden Ablauf:
Sender:

   RFM12_write(0x8228);
   delay_us(4);
   RFM12_write(0x8238);

   RFM12_SendByte(0xAA);
   RFM12_SendByte(0xAA);
   RFM12_SendByte(0xAA);

   RFM12_SendByte(0x2D);
   RFM12_SendByte(0xD4);

   RFM12_SendByte(0x3A);
   RFM12_SendByte(0x5A);
   RFM12_SendByte(0x6A);
   RFM12_SendByte(0x7A);
   RFM12_SendByte(0x8A);
 ... usw.

Der Sender sendet alle 5 sec. diese Daten.

Empfänger:
Empfang wird über einen Interrupt ausgelöst.
 Beim Auslesen des FIFOs bekomme ich folgende Werte zurück:
  nIRQReceive
  rfm12_GetStatus()=                  A0E0
  rfm12_read_data(): data[0]: 3a      --> Byte i.O.
  rfm12_GetStatus()=                  80FF
  rfm12_read_data(): data[1]: 5a      --> Byte i.O.
  rfm12_GetStatus()=                  0287   // FIFO leer
  rfm12_read_data(): data[2]: 00      --> Byte n.i.O.
  rfm12_GetStatus()=                  02A7   // FIFO leer
  rfm12_read_data(): data[3]: 00      --> Byte n.i.O.


Die Funktion RFM12_read_fifo() sieht wie folgt aus:
int16 RFM12_read_fifo(){
   int i;
   int16 data;
   disable_interrupts(GLOBAL);
     while(input(SDO==1));
        RFM12_GetStatus();
      data=rfm12_read_data(0xB000);
      delay_us(2);
     enable_interrupts(GLOBAL);
     return(data);
}


Jetzt stellt sich mir die Frage, warum ich nur die ersten zwei 
gesendeten Bytes empfangen kann.
Ich vermute, dass der RFM12 16bit in den FIFO überträgt und di nächsten 
16bit können nicht in den FIFO geschrieben werden.
Kann es evtl. noch ein Timing Thema sein, dass ich den FIFO schon zu 
früh abfrage?

: Gesperrt durch Moderator
von Andre M. (gluehwein)


Lesenswert?

kann es möglicherweise an der SPI Frequenz von nur 271KHz liegen? Ich 
habe die SPI Schnittstelle (PIC 18F2550) softwareseitig realisiert.

von Bernhard M. (boregard)


Lesenswert?

Kann es sein, daß Du den Sender überfährst?
Ist bei
1
   RFM12_SendByte(0x3A);
2
   RFM12_SendByte(0x5A);
3
   RFM12_SendByte(0x6A);
immer sichergestellt, daß der Sendefifo frei ist?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?


Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.