Programm for decoding radio-signals sent by a ETH-Window-Shutter-Contact, received with a RFM12B-module

Dependencies:   TextLCD mbed

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?

UserRevisionLine numberNew 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