Guten Abend zusammen,
ich beschäftige mich in letzter Zeit mit den RFM Modulen.
Momentan versuche ich mit einem RFM12 Daten zu empfangen, die von einem
RFM02 gesendet werden.
Das RFM12 erkennt die Daten auch, zumindest bekomme ich immer ein
Interrupt an VDI. Bloß bekomme ich auf dem Bus immer nur 0x0000.
Ich verwende SoftwareSPI auf einem MSP430F2001.
SPI funktioniert problemlos, ich kann das Modul konfigurieren sowie
Register auslesen. Nur kann ich mit 0xB000 keine Daten auslesen?
Verschaltung müsste korrekt sein, da Empfang und Kommunikation mit dem
Modul ja funktionieren.
In der Versorgung hängen ein ELKO, 1uF sowie Folienkondensatoren 0.22uF
direkt am Modul. MISO mit Pullup 20kOhm.
Hier noch der relevante Code:
Initialisierung:
1 | SPI_transfer16(0xc0e0);//clk 10Mhz
|
2 | SPI_transfer16(0x80D7);//fifo enable
|
3 | SPI_transfer16(0xc2ab);//data filter internal
|
4 | SPI_transfer16(0xca81);//set fifo mode
|
5 | SPI_transfer16(0xe000);//disable wakeuptimer
|
6 | SPI_transfer16(0xc800);//disable brownoutdetection
|
7 | SPI_transfer16(0xC4F7);//autotuning -10+7.5khz
|
8 | SPI_transfer16(0xA000|500);//set frequency200kHz
|
9 | SPI_transfer16(0x9400|((0&7)<<5)|((1&3)<<3)|(4&7));// 67kHz Bandbreite, -6dB Verstärkung, DRSSI threshold: -79dBm
|
10 | SPI_transfer16(0xC680|((43104/4800)-1));//4800Baud
|
Empfang:
1 | SPI_transfer16(0x82C8);// RX on
|
2 | SPI_transfer16(0xCA81); // set FIFO mode
|
3 | SPI_transfer16(0xCA83); // enable FIFO
|
4 | for(ptr=0;ptr<50;ptr++)
|
5 | {
|
6 | rf12_ready();
|
7 | tmp=SPI_transfer16(0xB000);//receive
|
8 | Transmit();
|
9 |
|
10 | }
|
11 | tmp1=SPI_transfer16(0x8208);//RX off
|
Transmit() gibt den Inhalt von tmp via UART aus, SPI_transfer16()
schreibt/liest 16 Bit via SPI.
rf12_ready():
1 | void rf12_ready(void)
|
2 | { setCS(1);
|
3 | while (!(getMISO())); // wait until FIFO ready
|
4 | return;
|
5 | }
|
Danke fürs Ansehen;)
Mit freundlichen Grüßen
SegFault