Karl Zweimüller
/
eth_comfort_test
Programm for decoding radio-signals sent by a ETH-Window-Shutter-Contact, received with a RFM12B-module
rfm12b.cpp@0:96794c9fc5a3, 2011-03-02 (annotated)
- Committer:
- charly
- Date:
- Wed Mar 02 20:46:57 2011 +0000
- Revision:
- 0:96794c9fc5a3
- Child:
- 1:fc72e0bdb693
Initial pre-beta version
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
charly | 0:96794c9fc5a3 | 1 | #include "mbed.h" |
charly | 0:96794c9fc5a3 | 2 | #include "rfm12b.h" |
charly | 0:96794c9fc5a3 | 3 | #include "rfm.h" |
charly | 0:96794c9fc5a3 | 4 | |
charly | 0:96794c9fc5a3 | 5 | /** Class rfm12b for RFM12B transceiver module |
charly | 0:96794c9fc5a3 | 6 | http://www.hoperf.com/rf_fsk/rfm12b.htm |
charly | 0:96794c9fc5a3 | 7 | */ |
charly | 0:96794c9fc5a3 | 8 | |
charly | 0:96794c9fc5a3 | 9 | /** rfm12b object |
charly | 0:96794c9fc5a3 | 10 | */ |
charly | 0:96794c9fc5a3 | 11 | rfm12b::rfm12b(PinName mosi, PinName miso, PinName sclk, PinName nsel, PinName rxdata){ |
charly | 0:96794c9fc5a3 | 12 | |
charly | 0:96794c9fc5a3 | 13 | rfm12b_spi = new SPI(mosi, miso, sclk); // mosi, miso, sclk |
charly | 0:96794c9fc5a3 | 14 | cs = new DigitalOut(nsel); // nsel for chipselect |
charly | 0:96794c9fc5a3 | 15 | m_pinRXData = new InterruptIn(rxdata); // rxData- generates interrupts |
charly | 0:96794c9fc5a3 | 16 | |
charly | 0:96794c9fc5a3 | 17 | init_spi(); // init the spi-device |
charly | 0:96794c9fc5a3 | 18 | } |
charly | 0:96794c9fc5a3 | 19 | |
charly | 0:96794c9fc5a3 | 20 | /** init the spi-communication |
charly | 0:96794c9fc5a3 | 21 | */ |
charly | 0:96794c9fc5a3 | 22 | void rfm12b::init_spi(){ |
charly | 0:96794c9fc5a3 | 23 | // Setup the spi for 16 bit data : 1RW-bit 7 adressbit, 8 databit |
charly | 0:96794c9fc5a3 | 24 | // second edge capture, with a 5MHz clock rate |
charly | 0:96794c9fc5a3 | 25 | rfm12b_spi->format(16,0); |
charly | 0:96794c9fc5a3 | 26 | rfm12b_spi->frequency(5000000); |
charly | 0:96794c9fc5a3 | 27 | } |
charly | 0:96794c9fc5a3 | 28 | |
charly | 0:96794c9fc5a3 | 29 | /////////////////////////////////////////////////////////////////////////////// |
charly | 0:96794c9fc5a3 | 30 | // |
charly | 0:96794c9fc5a3 | 31 | // Initialise RF module |
charly | 0:96794c9fc5a3 | 32 | // This are parameters for ETH Comfort by ELV |
charly | 0:96794c9fc5a3 | 33 | /////////////////////////////////////////////////////////////////////////////// |
charly | 0:96794c9fc5a3 | 34 | void rfm12b::RFM_init(void) |
charly | 0:96794c9fc5a3 | 35 | { |
charly | 0:96794c9fc5a3 | 36 | |
charly | 0:96794c9fc5a3 | 37 | // 0. Init the SPI backend |
charly | 0:96794c9fc5a3 | 38 | //RFM_TESTPIN_INIT; |
charly | 0:96794c9fc5a3 | 39 | |
charly | 0:96794c9fc5a3 | 40 | //RFM_READ_STATUS(); |
charly | 0:96794c9fc5a3 | 41 | |
charly | 0:96794c9fc5a3 | 42 | // 1. Configuration Setting Command |
charly | 0:96794c9fc5a3 | 43 | RFM_SPI_16( |
charly | 0:96794c9fc5a3 | 44 | //RFM_CONFIG_EL | |
charly | 0:96794c9fc5a3 | 45 | //RFM_CONFIG_EF | |
charly | 0:96794c9fc5a3 | 46 | RFM_CONFIG_BAND_868 | |
charly | 0:96794c9fc5a3 | 47 | RFM_CONFIG_X_11_0pf |
charly | 0:96794c9fc5a3 | 48 | ); |
charly | 0:96794c9fc5a3 | 49 | |
charly | 0:96794c9fc5a3 | 50 | // 2. Power Management Command |
charly | 0:96794c9fc5a3 | 51 | //RFM_SPI_16( |
charly | 0:96794c9fc5a3 | 52 | // RFM_POWER_MANAGEMENT // switch all off |
charly | 0:96794c9fc5a3 | 53 | // ); |
charly | 0:96794c9fc5a3 | 54 | |
charly | 0:96794c9fc5a3 | 55 | // 3. Frequency Setting Command |
charly | 0:96794c9fc5a3 | 56 | RFM_SPI_16( |
charly | 0:96794c9fc5a3 | 57 | RFM_FREQUENCY | |
charly | 0:96794c9fc5a3 | 58 | RFM_FREQ_868Band(868.30) |
charly | 0:96794c9fc5a3 | 59 | ); |
charly | 0:96794c9fc5a3 | 60 | |
charly | 0:96794c9fc5a3 | 61 | // 4. Data Rate Command |
charly | 0:96794c9fc5a3 | 62 | RFM_SPI_16(RFM_DATA_RATE_9600); |
charly | 0:96794c9fc5a3 | 63 | |
charly | 0:96794c9fc5a3 | 64 | // 5. Receiver Control Command |
charly | 0:96794c9fc5a3 | 65 | RFM_SPI_16( |
charly | 0:96794c9fc5a3 | 66 | RFM_RX_CONTROL_P20_VDI | |
charly | 0:96794c9fc5a3 | 67 | RFM_RX_CONTROL_VDI_FAST | |
charly | 0:96794c9fc5a3 | 68 | //RFM_RX_CONTROL_BW(RFM_BAUD_RATE) | |
charly | 0:96794c9fc5a3 | 69 | RFM_RX_CONTROL_BW_134 | |
charly | 0:96794c9fc5a3 | 70 | RFM_RX_CONTROL_GAIN_0 | |
charly | 0:96794c9fc5a3 | 71 | RFM_RX_CONTROL_RSSI_73 |
charly | 0:96794c9fc5a3 | 72 | ); |
charly | 0:96794c9fc5a3 | 73 | |
charly | 0:96794c9fc5a3 | 74 | // 6. Data Filter Command |
charly | 0:96794c9fc5a3 | 75 | RFM_SPI_16( |
charly | 0:96794c9fc5a3 | 76 | //RFM_DATA_FILTER_AL | |
charly | 0:96794c9fc5a3 | 77 | //RFM_DATA_FILTER_ML | |
charly | 0:96794c9fc5a3 | 78 | //RFM_DATA_FILTER_DQD(3) |
charly | 0:96794c9fc5a3 | 79 | RFM_DATA_FILTER_ANALOG |
charly | 0:96794c9fc5a3 | 80 | ); |
charly | 0:96794c9fc5a3 | 81 | |
charly | 0:96794c9fc5a3 | 82 | // 7. FIFO and Reset Mode Command |
charly | 0:96794c9fc5a3 | 83 | RFM_SPI_16( |
charly | 0:96794c9fc5a3 | 84 | RFM_FIFO_IT(8) | |
charly | 0:96794c9fc5a3 | 85 | RFM_FIFO_DR |
charly | 0:96794c9fc5a3 | 86 | ); |
charly | 0:96794c9fc5a3 | 87 | |
charly | 0:96794c9fc5a3 | 88 | // 8. Receiver FIFO Read |
charly | 0:96794c9fc5a3 | 89 | |
charly | 0:96794c9fc5a3 | 90 | // 9. AFC Command |
charly | 0:96794c9fc5a3 | 91 | RFM_SPI_16( |
charly | 0:96794c9fc5a3 | 92 | RFM_AFC_AUTO_VDI | |
charly | 0:96794c9fc5a3 | 93 | RFM_AFC_RANGE_LIMIT_7_8 | |
charly | 0:96794c9fc5a3 | 94 | RFM_AFC_EN | |
charly | 0:96794c9fc5a3 | 95 | RFM_AFC_OE | |
charly | 0:96794c9fc5a3 | 96 | RFM_AFC_FI |
charly | 0:96794c9fc5a3 | 97 | ); |
charly | 0:96794c9fc5a3 | 98 | |
charly | 0:96794c9fc5a3 | 99 | // 10. TX Configuration Control Command |
charly | 0:96794c9fc5a3 | 100 | RFM_SPI_16( |
charly | 0:96794c9fc5a3 | 101 | RFM_TX_CONTROL_MOD_30 | |
charly | 0:96794c9fc5a3 | 102 | RFM_TX_CONTROL_POW_0 |
charly | 0:96794c9fc5a3 | 103 | ); |
charly | 0:96794c9fc5a3 | 104 | |
charly | 0:96794c9fc5a3 | 105 | // 11. Transmitter Register Write Command |
charly | 0:96794c9fc5a3 | 106 | |
charly | 0:96794c9fc5a3 | 107 | // 12. Wake-Up Timer Command |
charly | 0:96794c9fc5a3 | 108 | |
charly | 0:96794c9fc5a3 | 109 | // 13. Low Duty-Cycle Command |
charly | 0:96794c9fc5a3 | 110 | |
charly | 0:96794c9fc5a3 | 111 | // 14. Low Battery Detector Command |
charly | 0:96794c9fc5a3 | 112 | |
charly | 0:96794c9fc5a3 | 113 | //RFM_SPI_16( |
charly | 0:96794c9fc5a3 | 114 | // RFM_LOW_BATT_DETECT | |
charly | 0:96794c9fc5a3 | 115 | // 3 // 2.2V + v * 0.1V |
charly | 0:96794c9fc5a3 | 116 | // ); |
charly | 0:96794c9fc5a3 | 117 | |
charly | 0:96794c9fc5a3 | 118 | // 15. Status Read Command |
charly | 0:96794c9fc5a3 | 119 | //RFM_SPI_16(RFM_TX_ON()); |
charly | 0:96794c9fc5a3 | 120 | RFM_SPI_16(RFM_RX_ON()); |
charly | 0:96794c9fc5a3 | 121 | |
charly | 0:96794c9fc5a3 | 122 | } |
charly | 0:96794c9fc5a3 | 123 | |
charly | 0:96794c9fc5a3 | 124 | /////////////////////////////////////////////////////////////////////////////// |
charly | 0:96794c9fc5a3 | 125 | |
charly | 0:96794c9fc5a3 | 126 | |
charly | 0:96794c9fc5a3 | 127 | |
charly | 0:96794c9fc5a3 | 128 | /** write and read 16 bit to device |
charly | 0:96794c9fc5a3 | 129 | */ |
charly | 0:96794c9fc5a3 | 130 | uint16_t rfm12b::rfm_spi16(uint16_t outval){ |
charly | 0:96794c9fc5a3 | 131 | |
charly | 0:96794c9fc5a3 | 132 | uint16_t readval; |
charly | 0:96794c9fc5a3 | 133 | // Select the device by seting chip select low |
charly | 0:96794c9fc5a3 | 134 | cs->write(0); |
charly | 0:96794c9fc5a3 | 135 | wait_ms(1); // wait before going on |
charly | 0:96794c9fc5a3 | 136 | //write and read |
charly | 0:96794c9fc5a3 | 137 | readval = rfm12b_spi->write(outval); |
charly | 0:96794c9fc5a3 | 138 | // Deselect the device |
charly | 0:96794c9fc5a3 | 139 | cs->write(1); |
charly | 0:96794c9fc5a3 | 140 | wait_ms(1); // wait before going on |
charly | 0:96794c9fc5a3 | 141 | return(readval); |
charly | 0:96794c9fc5a3 | 142 | } |
charly | 0:96794c9fc5a3 | 143 | |
charly | 0:96794c9fc5a3 | 144 |