1
0
mirror of https://github.com/sandeepmistry/arduino-LoRa.git synced 2025-04-20 23:47:47 +03:00

sx127x 20dBm support (#153)

This commit is contained in:
Evgeny Dontsov 2018-08-07 02:23:53 +03:00 committed by Sandeep Mistry
parent 4db4095f92
commit 884769e206
3 changed files with 35 additions and 5 deletions

2
API.md
View File

@ -249,7 +249,7 @@ LoRa.setTxPower(txPower, outputPin);
* `txPower` - TX power in dB, defaults to `17` * `txPower` - TX power in dB, defaults to `17`
* `outputPin` - (optional) PA output pin, supported values are `PA_OUTPUT_RFO_PIN` and `PA_OUTPUT_PA_BOOST_PIN`, defaults to `PA_OUTPUT_PA_BOOST_PIN`. * `outputPin` - (optional) PA output pin, supported values are `PA_OUTPUT_RFO_PIN` and `PA_OUTPUT_PA_BOOST_PIN`, defaults to `PA_OUTPUT_PA_BOOST_PIN`.
Supported values are between `2` and `17` for `PA_OUTPUT_PA_BOOST_PIN`, `0` and `14` for `PA_OUTPUT_RFO_PIN`. Supported values are `2` to `20` for `PA_OUTPUT_PA_BOOST_PIN`, and `0` to `14` for `PA_OUTPUT_RFO_PIN`.
Most modules have the PA output pin connected to PA BOOST, Most modules have the PA output pin connected to PA BOOST,

View File

@ -10,6 +10,7 @@
#define REG_FRF_MID 0x07 #define REG_FRF_MID 0x07
#define REG_FRF_LSB 0x08 #define REG_FRF_LSB 0x08
#define REG_PA_CONFIG 0x09 #define REG_PA_CONFIG 0x09
#define REG_OCP 0x0b
#define REG_LNA 0x0c #define REG_LNA 0x0c
#define REG_FIFO_ADDR_PTR 0x0d #define REG_FIFO_ADDR_PTR 0x0d
#define REG_FIFO_TX_BASE_ADDR 0x0e #define REG_FIFO_TX_BASE_ADDR 0x0e
@ -34,6 +35,7 @@
#define REG_SYNC_WORD 0x39 #define REG_SYNC_WORD 0x39
#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
// modes // modes
#define MODE_LONG_RANGE_MODE 0x80 #define MODE_LONG_RANGE_MODE 0x80
@ -372,10 +374,24 @@ void LoRaClass::setTxPower(int level, int outputPin)
writeRegister(REG_PA_CONFIG, 0x70 | level); writeRegister(REG_PA_CONFIG, 0x70 | level);
} else { } else {
// PA BOOST // PA BOOST
if (level > 17) {
if (level > 20) {
level = 20;
}
// subtract 3 from level, so 18 - 20 maps to 15 - 17
level -= 3;
// High Power +20 dBm Operation (Semtech SX1276/77/78/79 5.4.3.)
writeRegister(REG_PA_DAC, 0x87);
setOCP(140);
} else {
if (level < 2) { if (level < 2) {
level = 2; level = 2;
} else if (level > 17) { }
level = 17; //Default value PA_HF/LF or +17dBm
writeRegister(REG_PA_DAC, 0x84);
setOCP(100);
} }
writeRegister(REG_PA_CONFIG, PA_BOOST | (level - 2)); writeRegister(REG_PA_CONFIG, PA_BOOST | (level - 2));
@ -512,6 +528,19 @@ void LoRaClass::disableCrc()
writeRegister(REG_MODEM_CONFIG_2, readRegister(REG_MODEM_CONFIG_2) & 0xfb); writeRegister(REG_MODEM_CONFIG_2, readRegister(REG_MODEM_CONFIG_2) & 0xfb);
} }
void LoRaClass::setOCP(uint8_t mA)
{
uint8_t ocpTrim = 27;
if (mA <= 120) {
ocpTrim = (mA - 45) / 5;
} else if (mA <=240) {
ocpTrim = (mA + 30) / 10;
}
writeRegister(REG_OCP, 0x20 | (0x1F & ocpTrim));
}
byte LoRaClass::random() byte LoRaClass::random()
{ {
return readRegister(REG_RSSI_WIDEBAND); return readRegister(REG_RSSI_WIDEBAND);

View File

@ -66,6 +66,7 @@ public:
void setSyncWord(int sw); void setSyncWord(int sw);
void enableCrc(); void enableCrc();
void disableCrc(); void disableCrc();
void setOCP(uint8_t mA); // Over Current Protection control
// deprecated // deprecated
void crc() { enableCrc(); } void crc() { enableCrc(); }