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

Dependencies:   TextLCD mbed

Committer:
charly
Date:
Thu Apr 07 19:54:09 2011 +0000
Revision:
1:fc72e0bdb693
Parent:
0:96794c9fc5a3
Reorganized and created classes for RFM12B and ETH-Comfort

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