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
kann es möglicherweise an der SPI Frequenz von nur 271KHz liegen? Ich habe die SPI Schnittstelle (PIC 18F2550) softwareseitig realisiert.
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?