The following table shows the differences in intialisations of the RFM12B for the JeeNode applicaiton to receiver weather station data from both FSK and OOK stations, and send it to the JeeNode home sensor network, and eventually to HouseMon:
JeeLib native | WH1080 FSK | JeeLib OOK | Jeelib native remark | WH1080 FSK Remark | JeeLib OOK |
0x8205 | 0x820D | | disable some circuits | disable some circuits | |
0x80E7 | 0x80E7 | | 868 Mhz, enable tx+rx | identical | disable TX and RX buf |
0xA640 | 0xA67C | 0xA68A | frequency | | |
0xC613 | 0xC613 | 0xC691 | bitrate | | N/A ? |
0x94A2 | 0x94A0 | 0x9489 | 134kHz, -0dBm, 91dBm | 134kHz, -0dB, 103dBm | 200khz, -6db, 97dbm |
0xC2AC | | 0xC220 | datafilter = digital | | datafilter = OOK |
0xCA83 | 0xCA83 | 0xCA00 | | identical | FIFO disabled |
0xCEnn | 0xCED4 | | group ID | groupID=0xD4! | |
0xC483 | 0xC49F | 0xC473 | AFC auto, free, DQD4 | AFC manual slow +-16 DQD2 | AFC @PWR, auto, +-4 DQD4 |
0x9850 | | | | | |
0xCC77 | 0xCC67 | 0xCC67 | | PLL don't care | PLL don't care |
0xE000 | 0xE105 | | wakeup timer | don't care | |
0xC800 | 0xC80E | 0xC800 | | disable low duty cycle | |
0xC049 | 0xC006 | 0xC040 | clock out, low batt level | don't care | don't care |
| 0XB800 | 0XB800 | | clear transmit buffer | clear transmit buffer |
0x82DD | 0x82DD | 0x82C0 | enable relevant circuits | identical | enab receiver, baseband |
taking a look at the differences between the native-FSK and WH1080-foreign-FSK, there seem to be some obvious required differences, but also some differences that may not matter that much. For example the auto frequency control (AFC) settings, auto-mode, unrestricted, versus manual, slow, restricted to +/-16steps may not a big deal. So I tested this by making a sketch that receives foreign-FSK, and as soon as a signal is received, it programs the RFM12B to native mode and transmits the package into the sensor network. I extended the RF12 driver with functions below, which speak for themselves. The minimal set of changes can be seen in the following functions:
void configureWH1080 () {
rf12_setGroup(0xD4);
rf12_setBitrate(0x13); // 17.24 kbps
rf12_setFrequency(0x67C); // 868.300 MHz
rf12_setFixedLength(LEN_MAX); // receive fixed number of bytes
}
void deconfigureWH1080 () {
rf12_setGroup(GROUP_ID);
rf12_setBitrate(0x06); // 49.2 kbps
rf12_setFrequency(0x640); // 868.000MHz
rf12_setFixedLength(0); // number of bytes to be received in packet header
}
This approach avoids using the slightly costly rf12_initialize() funnction which reprograms the SPI bus and resets the RFM12B.
If you made it to here, but think what is this all about. See this:
Decoding the Oregon Scientific V2 protocol
Receiving OOKASK with a modified RFM12B
FSK 868MHz weather stations on JeeNode
WH1080 protocol V2 – FSK