RF69 - implemented carrier frequency change
This commit is contained in:
parent
cdecf9ec7e
commit
cd2ae1883c
2 changed files with 27 additions and 21 deletions
|
@ -4,7 +4,7 @@ RF69::RF69(Module* module) {
|
||||||
_mod = module;
|
_mod = module;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t RF69::begin() {
|
uint8_t RF69::begin(float freq) {
|
||||||
// set module properties
|
// set module properties
|
||||||
_mod->init(USE_SPI, INT_0);
|
_mod->init(USE_SPI, INT_0);
|
||||||
|
|
||||||
|
@ -36,10 +36,10 @@ uint8_t RF69::begin() {
|
||||||
SPI.end();
|
SPI.end();
|
||||||
return(ERR_CHIP_NOT_FOUND);
|
return(ERR_CHIP_NOT_FOUND);
|
||||||
} else {
|
} else {
|
||||||
DEBUG_PRINTLN_STR("Found RF69! (match by RF69_REG_VERSION == 0x12)");
|
DEBUG_PRINTLN_STR("Found RF69! (match by RF69_REG_VERSION == 0x24)");
|
||||||
}
|
}
|
||||||
|
|
||||||
return(config());
|
return(config(freq));
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t RF69::transmit(Packet& pack) {
|
uint8_t RF69::transmit(Packet& pack) {
|
||||||
|
@ -71,9 +71,7 @@ uint8_t RF69::transmit(Packet& pack) {
|
||||||
_mod->SPIsetRegValue(RF69_REG_TEST_PA2, RF69_PA2_20_DBM);
|
_mod->SPIsetRegValue(RF69_REG_TEST_PA2, RF69_PA2_20_DBM);
|
||||||
|
|
||||||
// wait for transmission end
|
// wait for transmission end
|
||||||
while(!_mod->getInt0State()) {
|
while(!_mod->getInt0State());
|
||||||
DEBUG_PRINT('.');
|
|
||||||
}
|
|
||||||
|
|
||||||
// clear interrupt flags
|
// clear interrupt flags
|
||||||
clearIRQFlags();
|
clearIRQFlags();
|
||||||
|
@ -131,9 +129,15 @@ uint8_t RF69::standby() {
|
||||||
return(setMode(RF69_STANDBY));
|
return(setMode(RF69_STANDBY));
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t RF69::config() {
|
uint8_t RF69::config(float freq) {
|
||||||
uint8_t status = ERR_NONE;
|
uint8_t status = ERR_NONE;
|
||||||
|
|
||||||
|
if(!((freq > 290.0) && (freq < 340.0) ||
|
||||||
|
(freq > 431.0) && (freq < 510.0) ||
|
||||||
|
(freq > 862.0) && (freq < 1020.0))) {
|
||||||
|
return(ERR_INVALID_FREQUENCY);
|
||||||
|
}
|
||||||
|
|
||||||
//set mode to STANDBY
|
//set mode to STANDBY
|
||||||
status = setMode(RF69_STANDBY);
|
status = setMode(RF69_STANDBY);
|
||||||
if(status != ERR_NONE) {
|
if(status != ERR_NONE) {
|
||||||
|
@ -174,9 +178,11 @@ uint8_t RF69::config() {
|
||||||
}
|
}
|
||||||
|
|
||||||
//set carrier frequency
|
//set carrier frequency
|
||||||
status = _mod->SPIsetRegValue(RF69_REG_FRF_MSB, RF69_FRF_MSB, 7, 0);
|
uint32_t base = 1;
|
||||||
status = _mod->SPIsetRegValue(RF69_REG_FRF_MID, RF69_FRF_MID, 7, 0);
|
uint32_t FRF = (freq * (base << 19)) / 32.0;
|
||||||
status = _mod->SPIsetRegValue(RF69_REG_FRF_LSB, RF69_FRF_LSB, 7, 0);
|
status = _mod->SPIsetRegValue(RF69_REG_FRF_MSB, (FRF & 0xFF0000) >> 16, 7, 0);
|
||||||
|
status = _mod->SPIsetRegValue(RF69_REG_FRF_MID, (FRF & 0x00FF00) >> 8, 7, 0);
|
||||||
|
status = _mod->SPIsetRegValue(RF69_REG_FRF_LSB, FRF & 0x0000FF, 7, 0);
|
||||||
if(status != ERR_NONE) {
|
if(status != ERR_NONE) {
|
||||||
return(status);
|
return(status);
|
||||||
}
|
}
|
||||||
|
@ -245,10 +251,8 @@ uint8_t RF69::config() {
|
||||||
}
|
}
|
||||||
|
|
||||||
//set Rx timeouts
|
//set Rx timeouts
|
||||||
//status = _mod->SPIsetRegValue(RF69_REG_RX_TIMEOUT_1, RF69_TIMEOUT_RX_START, 7, 0);
|
status = _mod->SPIsetRegValue(RF69_REG_RX_TIMEOUT_1, RF69_TIMEOUT_RX_START, 7, 0);
|
||||||
status = _mod->SPIsetRegValue(RF69_REG_RX_TIMEOUT_1, RF69_TIMEOUT_RX_START_OFF, 7, 0);
|
status = _mod->SPIsetRegValue(RF69_REG_RX_TIMEOUT_2, RF69_TIMEOUT_RSSI_THRESH, 7, 0);
|
||||||
//status = _mod->SPIsetRegValue(RF69_REG_RX_TIMEOUT_2, RF69_TIMEOUT_RSSI_THRESH, 7, 0);
|
|
||||||
status = _mod->SPIsetRegValue(RF69_REG_RX_TIMEOUT_2, RF69_TIMEOUT_RSSI_THRESH_OFF, 7, 0);
|
|
||||||
if(status != ERR_NONE) {
|
if(status != ERR_NONE) {
|
||||||
return(status);
|
return(status);
|
||||||
}
|
}
|
||||||
|
|
|
@ -126,8 +126,8 @@
|
||||||
#define RF69_FDEV_LSB 0x33 // 7 0
|
#define RF69_FDEV_LSB 0x33 // 7 0
|
||||||
|
|
||||||
//RF69_REG_FRF_MSB + REG_FRF_MID + REG_FRF_LSB
|
//RF69_REG_FRF_MSB + REG_FRF_MID + REG_FRF_LSB
|
||||||
#define RF69_FRF_MSB 0x6C // 7 0 carrier frequency setting: f_RF = (F(XOSC) * FRF)/2^19
|
#define RF69_FRF_MSB 0xE4 // 7 0 carrier frequency setting: f_RF = (F(XOSC) * FRF)/2^19
|
||||||
#define RF69_FRF_MID 0x40 // 7 0 where F(XOSC) = 32 MHz
|
#define RF69_FRF_MID 0xC0 // 7 0 where F(XOSC) = 32 MHz
|
||||||
#define RF69_FRF_LSB 0x00 // 7 0 default value: 915 MHz
|
#define RF69_FRF_LSB 0x00 // 7 0 default value: 915 MHz
|
||||||
|
|
||||||
//RF69_REG_OSC_1
|
//RF69_REG_OSC_1
|
||||||
|
@ -318,8 +318,7 @@
|
||||||
#define RF69_IRQ_CRC_OK 0b00000010 // 1 1 CRC check passed
|
#define RF69_IRQ_CRC_OK 0b00000010 // 1 1 CRC check passed
|
||||||
|
|
||||||
//RF69_REG_RSSI_THRESH
|
//RF69_REG_RSSI_THRESH
|
||||||
//#define RF69_RSSI_THRESHOLD 0xE4 // 7 0 RSSI threshold level (2 dB by default)
|
#define RF69_RSSI_THRESHOLD 0xE4 // 7 0 RSSI threshold level (2 dB by default)
|
||||||
#define RF69_RSSI_THRESHOLD 0xDC // 7 0
|
|
||||||
|
|
||||||
//RF69_REG_RX_TIMEOUT_1
|
//RF69_REG_RX_TIMEOUT_1
|
||||||
#define RF69_TIMEOUT_RX_START_OFF 0x00 // 7 0 RSSI interrupt timeout disabled (default)
|
#define RF69_TIMEOUT_RX_START_OFF 0x00 // 7 0 RSSI interrupt timeout disabled (default)
|
||||||
|
@ -398,7 +397,6 @@
|
||||||
|
|
||||||
//RF69_REG_PACKET_CONFIG_2
|
//RF69_REG_PACKET_CONFIG_2
|
||||||
#define RF69_INTER_PACKET_RX_DELAY 0b00000000 // 7 4 delay between FIFO empty and start of new RSSI phase
|
#define RF69_INTER_PACKET_RX_DELAY 0b00000000 // 7 4 delay between FIFO empty and start of new RSSI phase
|
||||||
//#define RF69_INTER_PACKET_RX_DELAY 0b00010000 // 7 4
|
|
||||||
#define RF69_RESTART_RX 0b00000100 // 2 2 force receiver into wait mode
|
#define RF69_RESTART_RX 0b00000100 // 2 2 force receiver into wait mode
|
||||||
#define RF69_AUTO_RX_RESTART_OFF 0b00000000 // 1 1 auto Rx restart disabled
|
#define RF69_AUTO_RX_RESTART_OFF 0b00000000 // 1 1 auto Rx restart disabled
|
||||||
#define RF69_AUTO_RX_RESTART_ON 0b00000010 // 1 1 auto Rx restart enabled (default)
|
#define RF69_AUTO_RX_RESTART_ON 0b00000010 // 1 1 auto Rx restart enabled (default)
|
||||||
|
@ -427,17 +425,21 @@ class RF69 {
|
||||||
public:
|
public:
|
||||||
RF69(Module* module);
|
RF69(Module* module);
|
||||||
|
|
||||||
uint8_t begin();
|
uint8_t begin(float freq = 915.0);
|
||||||
uint8_t transmit(Packet& pack);
|
uint8_t transmit(Packet& pack);
|
||||||
uint8_t receive(Packet& pack);
|
uint8_t receive(Packet& pack);
|
||||||
|
|
||||||
uint8_t sleep();
|
uint8_t sleep();
|
||||||
uint8_t standby();
|
uint8_t standby();
|
||||||
|
|
||||||
|
uint8_t setFrequency(float freq);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Module* _mod;
|
Module* _mod;
|
||||||
|
|
||||||
uint8_t config();
|
float _freq;
|
||||||
|
|
||||||
|
uint8_t config(float freq);
|
||||||
uint8_t setMode(uint8_t mode);
|
uint8_t setMode(uint8_t mode);
|
||||||
void clearIRQFlags();
|
void clearIRQFlags();
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Reference in a new issue