Merge pull request #36 from elena-v2/500khz-bw-sensitivity
Optimize receiver sensitivity, per errata note 2.1
This commit is contained in:
		
						commit
						bfeb345ed8
					
				
							
								
								
									
										20
									
								
								LoRa.cpp
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								LoRa.cpp
									
									
									
									
									
								
							@ -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)
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user