Optimize receiver sensitivity, per errata note 2.1

This commit is contained in:
elena 2023-04-21 22:56:46 -07:00
parent 60c7cde74d
commit 7ab26a6b56
2 changed files with 21 additions and 0 deletions

View File

@ -61,8 +61,10 @@
#define REG_FREQ_ERROR_LSB 0x2a #define REG_FREQ_ERROR_LSB 0x2a
#define REG_RSSI_WIDEBAND 0x2c #define REG_RSSI_WIDEBAND 0x2c
#define REG_DETECTION_OPTIMIZE 0x31 #define REG_DETECTION_OPTIMIZE 0x31
#define REG_HIGH_BW_OPTIMIZE_1 0x36
#define REG_DETECTION_THRESHOLD 0x37 #define REG_DETECTION_THRESHOLD 0x37
#define REG_SYNC_WORD 0x39 #define REG_SYNC_WORD 0x39
#define REG_HIGH_BW_OPTIMIZE_2 0x3a
#define REG_DIO_MAPPING_1 0x40 #define REG_DIO_MAPPING_1 0x40
#define REG_VERSION 0x42 #define REG_VERSION 0x42
#define REG_PA_DAC 0x4d #define REG_PA_DAC 0x4d
@ -460,6 +462,8 @@ void LoRaClass::setFrequency(long frequency) {
writeRegister(REG_FRF_MSB, (uint8_t)(frf >> 16)); writeRegister(REG_FRF_MSB, (uint8_t)(frf >> 16));
writeRegister(REG_FRF_MID, (uint8_t)(frf >> 8)); writeRegister(REG_FRF_MID, (uint8_t)(frf >> 8));
writeRegister(REG_FRF_LSB, (uint8_t)(frf >> 0)); writeRegister(REG_FRF_LSB, (uint8_t)(frf >> 0));
optimizeModemSensitivity();
} }
uint32_t LoRaClass::getFrequency() { uint32_t LoRaClass::getFrequency() {
@ -526,6 +530,21 @@ void LoRaClass::handleLowDataRate(){
} }
} }
void LoRaClass::optimizeModemSensitivity(){
byte bw = (readRegister(REG_MODEM_CONFIG_1) >> 4);
uint32_t freq = getFrequency();
if (bw == 9 && 410E6 <= freq <= 525E6) {
writeRegister(REG_HIGH_BW_OPTIMIZE_1, 0x02);
writeRegister(REG_HIGH_BW_OPTIMIZE_2, 0x7f);
} else if (bw == 9 && 862E6 <= freq <= 1020E6) {
writeRegister(REG_HIGH_BW_OPTIMIZE_1, 0x02);
writeRegister(REG_HIGH_BW_OPTIMIZE_2, 0x64);
} else {
writeRegister(REG_HIGH_BW_OPTIMIZE_1, 0x03);
}
}
void LoRaClass::setSignalBandwidth(long sbw) void LoRaClass::setSignalBandwidth(long sbw)
{ {
int bw; int bw;
@ -555,6 +574,7 @@ void LoRaClass::setSignalBandwidth(long sbw)
writeRegister(REG_MODEM_CONFIG_1, (readRegister(REG_MODEM_CONFIG_1) & 0x0f) | (bw << 4)); writeRegister(REG_MODEM_CONFIG_1, (readRegister(REG_MODEM_CONFIG_1) & 0x0f) | (bw << 4));
handleLowDataRate(); handleLowDataRate();
optimizeModemSensitivity();
} }
void LoRaClass::setCodingRate4(int denominator) void LoRaClass::setCodingRate4(int denominator)

1
LoRa.h
View File

@ -93,6 +93,7 @@ private:
static void onDio0Rise(); static void onDio0Rise();
void handleLowDataRate(); void handleLowDataRate();
void optimizeModemSensitivity();
private: private:
SPISettings _spiSettings; SPISettings _spiSettings;