While fixing up the Signal to Noise Ratio(SNR) and Received Signal Strength Indication(RSSI) in a previous post I noted the Low Noise Amplifier(LNA) had High Frequency(LF) and Low Frequency settings.
First step was to update the initialise method parameter list (the parameter list is huge but for most values the defaults are fine)
public void Initialise(RegOpModeMode modeAfterInitialise, // RegOpMode
double frequency = FrequencyDefault, // RegFrMsb, RegFrMid, RegFrLsb
bool rxDoneignoreIfCrcMissing = true, bool rxDoneignoreIfCrcInvalid = true,
bool paBoost = false, byte maxPower = RegPAConfigMaxPowerDefault, byte outputPower = RegPAConfigOutputPowerDefault, // RegPaConfig
bool ocpOn = true, byte ocpTrim = RegOcpOcpTrimDefault, // RegOcp
RegLnaLnaGain lnaGain = LnaGainDefault, bool lnaBoostLF = false, bool lnaBoostHf = false, // RegLna
RegModemConfigBandwidth bandwidth = RegModemConfigBandwidthDefault, RegModemConfigCodingRate codingRate = RegModemConfigCodingRateDefault, RegModemConfigImplicitHeaderModeOn implicitHeaderModeOn = RegModemConfigImplicitHeaderModeOnDefault, //RegModemConfig1
RegModemConfig2SpreadingFactor spreadingFactor = RegModemConfig2SpreadingFactorDefault, bool txContinuousMode = false, bool rxPayloadCrcOn = false,
ushort symbolTimeout = SymbolTimeoutDefault,
ushort preambleLength = PreambleLengthDefault,
byte payloadLength = PayloadLengthDefault,
byte payloadMaxLength = PayloadMaxLengthDefault,
byte freqHoppingPeriod = FreqHoppingPeriodDefault,
bool lowDataRateOptimize = false, bool agcAutoOn = false,
byte ppmCorrection = ppmCorrectionDefault,
RegDetectOptimizeDectionOptimize detectionOptimize = RegDetectOptimizeDectionOptimizeDefault,
bool invertIQ = false,
RegisterDetectionThreshold detectionThreshold = RegisterDetectionThresholdDefault,
byte syncWord = RegSyncWordDefault)
{
which became
public void Initialise(RegOpModeMode modeAfterInitialise, // RegOpMode
double frequency = FrequencyDefault, // RegFrMsb, RegFrMid, RegFrLsb
bool rxDoneignoreIfCrcMissing = true, bool rxDoneignoreIfCrcInvalid = true,
bool paBoost = false, byte maxPower = RegPAConfigMaxPowerDefault, byte outputPower = RegPAConfigOutputPowerDefault, // RegPaConfig
bool ocpOn = true, byte ocpTrim = RegOcpOcpTrimDefault, // RegOcp
RegLnaLnaGain lnaGain = LnaGainDefault, bool lnaBoost = false, // RegLna
RegModemConfigBandwidth bandwidth = RegModemConfigBandwidthDefault, RegModemConfigCodingRate codingRate = RegModemConfigCodingRateDefault, RegModemConfigImplicitHeaderModeOn implicitHeaderModeOn = RegModemConfigImplicitHeaderModeOnDefault, //RegModemConfig1
RegModemConfig2SpreadingFactor spreadingFactor = RegModemConfig2SpreadingFactorDefault, bool txContinuousMode = false, bool rxPayloadCrcOn = false,
ushort symbolTimeout = SymbolTimeoutDefault,
ushort preambleLength = PreambleLengthDefault,
byte payloadLength = PayloadLengthDefault,
byte payloadMaxLength = PayloadMaxLengthDefault,
byte freqHoppingPeriod = FreqHoppingPeriodDefault,
bool lowDataRateOptimize = false, bool agcAutoOn = false,
byte ppmCorrection = ppmCorrectionDefault,
RegDetectOptimizeDectionOptimize detectionOptimize = RegDetectOptimizeDectionOptimizeDefault,
bool invertIQ = false,
RegisterDetectionThreshold detectionThreshold = RegisterDetectionThresholdDefault,
byte syncWord = RegSyncWordDefault)
{
Then in the code for configuring the RegLna the frequency band is checked
// Set RegLna if any of the settings not defaults
if ((lnaGain != LnaGainDefault) || (lnaBoost != false))
{
byte regLnaValue = (byte)lnaGain;
if (lnaBoost)
{
if (Frequency > RFMidBandThreshold)
{
regLnaValue |= RegLnaLnaBoostHfOn;
}
else
{
regLnaValue |= RegLnaLnaBoostLfOn;
}
}
RegisterManager.WriteByte((byte)Registers.RegLna, regLnaValue);
}
The HF & LF differences where not obviously handled in Arduino-LoRa library and the Semtech LoRaMac node GitHub repository wasn’t so helpful this time.
Not so confident with these changes need to test with my 434MHz devices