/** * @fn void rfm12_init * @brief initializes the rfm12 radio module * @brief 868,3MHz,4,8kbps, 0db power * @param */ void rfm12_init(void){ unsigned int d; // set port direction nSEL_OUT(); SDI_IN(); SDO_OUT(); SCK_OUT(); nIRQ_IN(); // default signals nSEL=1; SDO=1; SCK=0; d=rfm12_spi16(0x80e7); // El, Ef, 11.5pF, 868MHz band d=rfm12_spi16(0x82d9); // !er, !ebb, Et, Es, Ex, !eb, !ew, Dc d=rfm12_spi16(0xa67c); // 434,15MHz/868,3MHz d=rfm12_spi16(0xc647); // 4,8kbps d=rfm12_spi16(0x94a0); // Vdi, fast, 134kHz, 0db,-103dbm d=rfm12_spi16(0xc2ac); // Al, !ml, Dig, Dqd4 d=rfm12_spi16(0xca80); // fifo8, sync, !ff, Dr d=rfm12_spi16(0xca83); // fifo8, sync, !ff, Dr d=rfm12_spi16(0xc483); // @pwr, no restrict, !st, !fi, Oe, En d=rfm12_spi16(0x9850); // 90kHz, power - 0db d=rfm12_spi16(0xe000); // not used (wake-up timer cmd) d=rfm12_spi16(0xc800); // not used (low duty-cycle cmd) d=rfm12_spi16(0xc000); // 1MHz, 2.2V (low bat detector and clk div) d=rfm12_spi16(0x0000); // read status word to clear fifos }
void init(void) { //osccon = 0x70; // 8Mhz internal OSC cmcon = 0x07; //ansel = 0; // all is digital i/o on PortA option_reg.NOT_RBPU = 0; // enable pullup resistors on PB option_reg.INTEDG = 0; // falling edge interrupt CONF_LED1_OUT(); LED1=0; // setup SPI // outputs RFM12_CS_OUT(); // Module Chip Select HI_SEL(); // RF CS is Active Low so set High SCK_OUT(); // SPI SCK as Output LOW_SCK(); SDO_OUT(); // SPI SDO as Output LOW_SDO(); // inputs RFM12_nIRQ_IN(); // nIRQ SDI_IN(); // SPI SDI delay_ms(500); // Wait for RFM12 POR WriteCMD(0x80F7); // 915 EL, EF, 12.0pf WriteCMD(0xA7D0); // 915=A7D0 904.50MHZ = A258 WriteCMD(0xC623); // c608=38400 c611=19200 c623= 9600bps WriteCMD(0xC22C); // Data Filter: AL, !ML, digital filter, 4 dqd WriteCMD(0xC4F7); // AFC Autotune, -10khz..+7.5Khz, !st, !fi, OE, EN WriteCMD(0x96A0); // P16, VDI, FAST, 65khz, 0dBm, -103dBm WriteCMD(0xCA81); // FIFO8, SYNC, !ff, DR //TX Config //WriteCMD(0x9850); // !mp, 9810=30Khz, MAX out WriteCMD(0xE000); // NOT USE WriteCMD(0xC80E); // NOT USE WriteCMD(0xC000); // CLK 1mhz, 2.2v WriteCMD(0x8280); // ER, EBB, !ET, ES, EX, !EB, !EW, !DC }