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?