SX127x - Sync with LoRaLib v3.0.3

pull/1/head
Jan Gromeš 2018-07-22 08:52:02 +02:00
rodzic 19840f8249
commit 39d674f953
5 zmienionych plików z 187 dodań i 5 usunięć

Wyświetl plik

@ -53,7 +53,7 @@ uint8_t SX1272::setFrequency(float freq) {
}
// set frequency
return(SX1272::setFrequencyRaw(freq));
return(SX127x::setFrequencyRaw(freq));
}
uint8_t SX1272::setBandwidth(float bw) {

Wyświetl plik

@ -10,6 +10,66 @@ uint8_t SX1276::setFrequency(float freq) {
return(ERR_INVALID_FREQUENCY);
}
// sensitivity optimization for 500kHz bandwidth
// see SX1276/77/78 Errata, section 2.1 for details
if(_bw == 500.0) {
if((freq >= 862.0) && (freq <= 1020.0)) {
_mod->SPIwriteRegister(0x36, 0x02);
_mod->SPIwriteRegister(0x3a, 0x64);
} else if((freq >= 410.0) && (freq <= 525.0)) {
_mod->SPIwriteRegister(0x36, 0x03);
_mod->SPIwriteRegister(0x3a, 0x65);
}
}
// mitigation of receiver spurious response
// see SX1276/77/78 Errata, section 2.3 for details
if(_bw == 7.8) {
_mod->SPIsetRegValue(0x31, 0b0000000, 7, 7);
_mod->SPIsetRegValue(0x2F, 0x48);
_mod->SPIsetRegValue(0x30, 0x00);
freq += 7.8;
} else if(_bw == 10.4) {
_mod->SPIsetRegValue(0x31, 0b0000000, 7, 7);
_mod->SPIsetRegValue(0x2F, 0x44);
_mod->SPIsetRegValue(0x30, 0x00);
freq += 10.4;
} else if(_bw == 15.6) {
_mod->SPIsetRegValue(0x31, 0b0000000, 7, 7);
_mod->SPIsetRegValue(0x2F, 0x44);
_mod->SPIsetRegValue(0x30, 0x00);
freq += 15.6;
} else if(_bw == 20.8) {
_mod->SPIsetRegValue(0x31, 0b0000000, 7, 7);
_mod->SPIsetRegValue(0x2F, 0x44);
_mod->SPIsetRegValue(0x30, 0x00);
freq += 20.8;
} else if(_bw == 31.25) {
_mod->SPIsetRegValue(0x31, 0b0000000, 7, 7);
_mod->SPIsetRegValue(0x2F, 0x44);
_mod->SPIsetRegValue(0x30, 0x00);
freq += 31.25;
} else if(_bw == 41.7) {
_mod->SPIsetRegValue(0x31, 0b0000000, 7, 7);
_mod->SPIsetRegValue(0x2F, 0x44);
_mod->SPIsetRegValue(0x30, 0x00);
freq += 41.7;
} else if(_bw == 62.5) {
_mod->SPIsetRegValue(0x31, 0b0000000, 7, 7);
_mod->SPIsetRegValue(0x2F, 0x40);
_mod->SPIsetRegValue(0x30, 0x00);
} else if(_bw == 125.0) {
_mod->SPIsetRegValue(0x31, 0b0000000, 7, 7);
_mod->SPIsetRegValue(0x2F, 0x40);
_mod->SPIsetRegValue(0x30, 0x00);
} else if(_bw == 250.0) {
_mod->SPIsetRegValue(0x31, 0b0000000, 7, 7);
_mod->SPIsetRegValue(0x2F, 0x40);
_mod->SPIsetRegValue(0x30, 0x00);
} else if(_bw == 500.0) {
_mod->SPIsetRegValue(0x31, 0b1000000, 7, 7);
}
// set frequency
return(SX1278::setFrequencyRaw(freq));
return(SX127x::setFrequencyRaw(freq));
}

Wyświetl plik

@ -10,8 +10,68 @@ uint8_t SX1277::setFrequency(float freq) {
return(ERR_INVALID_FREQUENCY);
}
// sensitivity optimization for 500kHz bandwidth
// see SX1276/77/78 Errata, section 2.1 for details
if(_bw == 500.0) {
if((freq >= 862.0) && (freq <= 1020.0)) {
_mod->SPIwriteRegister(0x36, 0x02);
_mod->SPIwriteRegister(0x3a, 0x64);
} else if((freq >= 410.0) && (freq <= 525.0)) {
_mod->SPIwriteRegister(0x36, 0x03);
_mod->SPIwriteRegister(0x3a, 0x65);
}
}
// mitigation of receiver spurious response
// see SX1276/77/78 Errata, section 2.3 for details
if(_bw == 7.8) {
_mod->SPIsetRegValue(0x31, 0b0000000, 7, 7);
_mod->SPIsetRegValue(0x2F, 0x48);
_mod->SPIsetRegValue(0x30, 0x00);
freq += 7.8;
} else if(_bw == 10.4) {
_mod->SPIsetRegValue(0x31, 0b0000000, 7, 7);
_mod->SPIsetRegValue(0x2F, 0x44);
_mod->SPIsetRegValue(0x30, 0x00);
freq += 10.4;
} else if(_bw == 15.6) {
_mod->SPIsetRegValue(0x31, 0b0000000, 7, 7);
_mod->SPIsetRegValue(0x2F, 0x44);
_mod->SPIsetRegValue(0x30, 0x00);
freq += 15.6;
} else if(_bw == 20.8) {
_mod->SPIsetRegValue(0x31, 0b0000000, 7, 7);
_mod->SPIsetRegValue(0x2F, 0x44);
_mod->SPIsetRegValue(0x30, 0x00);
freq += 20.8;
} else if(_bw == 31.25) {
_mod->SPIsetRegValue(0x31, 0b0000000, 7, 7);
_mod->SPIsetRegValue(0x2F, 0x44);
_mod->SPIsetRegValue(0x30, 0x00);
freq += 31.25;
} else if(_bw == 41.7) {
_mod->SPIsetRegValue(0x31, 0b0000000, 7, 7);
_mod->SPIsetRegValue(0x2F, 0x44);
_mod->SPIsetRegValue(0x30, 0x00);
freq += 41.7;
} else if(_bw == 62.5) {
_mod->SPIsetRegValue(0x31, 0b0000000, 7, 7);
_mod->SPIsetRegValue(0x2F, 0x40);
_mod->SPIsetRegValue(0x30, 0x00);
} else if(_bw == 125.0) {
_mod->SPIsetRegValue(0x31, 0b0000000, 7, 7);
_mod->SPIsetRegValue(0x2F, 0x40);
_mod->SPIsetRegValue(0x30, 0x00);
} else if(_bw == 250.0) {
_mod->SPIsetRegValue(0x31, 0b0000000, 7, 7);
_mod->SPIsetRegValue(0x2F, 0x40);
_mod->SPIsetRegValue(0x30, 0x00);
} else if(_bw == 500.0) {
_mod->SPIsetRegValue(0x31, 0b1000000, 7, 7);
}
// set frequency and if successful, save the new setting
return(SX1278::setFrequencyRaw(freq));
return(SX127x::setFrequencyRaw(freq));
}
uint8_t SX1277::setSpreadingFactor(uint8_t sf) {

Wyświetl plik

@ -52,8 +52,68 @@ uint8_t SX1278::setFrequency(float freq) {
return(ERR_INVALID_FREQUENCY);
}
// sensitivity optimization for 500kHz bandwidth
// see SX1276/77/78 Errata, section 2.1 for details
if(_bw == 500.0) {
if((freq >= 862.0) && (freq <= 1020.0)) {
_mod->SPIwriteRegister(0x36, 0x02);
_mod->SPIwriteRegister(0x3a, 0x64);
} else if((freq >= 410.0) && (freq <= 525.0)) {
_mod->SPIwriteRegister(0x36, 0x03);
_mod->SPIwriteRegister(0x3a, 0x65);
}
}
// mitigation of receiver spurious response
// see SX1276/77/78 Errata, section 2.3 for details
if(_bw == 7.8) {
_mod->SPIsetRegValue(0x31, 0b0000000, 7, 7);
_mod->SPIsetRegValue(0x2F, 0x48);
_mod->SPIsetRegValue(0x30, 0x00);
freq += 7.8;
} else if(_bw == 10.4) {
_mod->SPIsetRegValue(0x31, 0b0000000, 7, 7);
_mod->SPIsetRegValue(0x2F, 0x44);
_mod->SPIsetRegValue(0x30, 0x00);
freq += 10.4;
} else if(_bw == 15.6) {
_mod->SPIsetRegValue(0x31, 0b0000000, 7, 7);
_mod->SPIsetRegValue(0x2F, 0x44);
_mod->SPIsetRegValue(0x30, 0x00);
freq += 15.6;
} else if(_bw == 20.8) {
_mod->SPIsetRegValue(0x31, 0b0000000, 7, 7);
_mod->SPIsetRegValue(0x2F, 0x44);
_mod->SPIsetRegValue(0x30, 0x00);
freq += 20.8;
} else if(_bw == 31.25) {
_mod->SPIsetRegValue(0x31, 0b0000000, 7, 7);
_mod->SPIsetRegValue(0x2F, 0x44);
_mod->SPIsetRegValue(0x30, 0x00);
freq += 31.25;
} else if(_bw == 41.7) {
_mod->SPIsetRegValue(0x31, 0b0000000, 7, 7);
_mod->SPIsetRegValue(0x2F, 0x44);
_mod->SPIsetRegValue(0x30, 0x00);
freq += 41.7;
} else if(_bw == 62.5) {
_mod->SPIsetRegValue(0x31, 0b0000000, 7, 7);
_mod->SPIsetRegValue(0x2F, 0x40);
_mod->SPIsetRegValue(0x30, 0x00);
} else if(_bw == 125.0) {
_mod->SPIsetRegValue(0x31, 0b0000000, 7, 7);
_mod->SPIsetRegValue(0x2F, 0x40);
_mod->SPIsetRegValue(0x30, 0x00);
} else if(_bw == 250.0) {
_mod->SPIsetRegValue(0x31, 0b0000000, 7, 7);
_mod->SPIsetRegValue(0x2F, 0x40);
_mod->SPIsetRegValue(0x30, 0x00);
} else if(_bw == 500.0) {
_mod->SPIsetRegValue(0x31, 0b1000000, 7, 7);
}
// set frequency
return(SX1278::setFrequencyRaw(freq));
return(SX127x::setFrequencyRaw(freq));
}
uint8_t SX1278::setBandwidth(float bw) {
@ -70,6 +130,8 @@ uint8_t SX1278::setBandwidth(float bw) {
newBandwidth = SX1278_BW_20_80_KHZ;
} else if(bw == 31.25) {
newBandwidth = SX1278_BW_31_25_KHZ;
} else if(bw == 41.7) {
newBandwidth = SX1278_BW_41_70_KHZ;
} else if(bw == 62.5) {
newBandwidth = SX1278_BW_62_50_KHZ;
} else if(bw == 125.0) {

Wyświetl plik

@ -11,5 +11,5 @@ uint8_t SX1279::setFrequency(float freq) {
}
// set frequency
return(SX1278::setFrequencyRaw(freq));
return(SX127x::setFrequencyRaw(freq));
}