Add proper tx power control for LoRa1280F27
This commit is contained in:
parent
51139d98fa
commit
c5e84eab6c
59
Radio.cpp
59
Radio.cpp
@ -1623,7 +1623,7 @@ sx128x::sx128x(uint8_t index, SPIClass* spi, bool tcxo, int ss, int sclk, int mo
|
||||
_bw(0x34), _cr(0x01), _packetIndex(0), _implicitHeaderMode(0),
|
||||
_payloadLength(255), _crcMode(0), _fifo_tx_addr_ptr(0), _fifo_rx_addr_ptr(0),
|
||||
_rxPacketLength(0), _preinit_done(false),
|
||||
_tcxo(tcxo)
|
||||
_tcxo(tcxo), _txp_dc(55)
|
||||
{
|
||||
// overide Stream timeout value
|
||||
setTimeout(0);
|
||||
@ -1709,7 +1709,11 @@ uint8_t ISR_VECT sx128x::singleTransfer(uint8_t opcode, uint16_t address, uint8_
|
||||
void sx128x::rxAntEnable()
|
||||
{
|
||||
if (_txen != -1) {
|
||||
#if BOARD_VARIANT == MODEL_13 || BOARD_VARIANT == MODEL_21
|
||||
analogWrite(_txen, 0);
|
||||
#else
|
||||
digitalWrite(_txen, LOW);
|
||||
#endif
|
||||
}
|
||||
if (_rxen != -1) {
|
||||
digitalWrite(_rxen, HIGH);
|
||||
@ -1719,7 +1723,15 @@ void sx128x::rxAntEnable()
|
||||
void sx128x::txAntEnable()
|
||||
{
|
||||
if (_txen != -1) {
|
||||
#if BOARD_VARIANT == MODEL_13 || BOARD_VARIANT == MODEL_21
|
||||
// RAK4631 with WisBlock SX1280 module (LIBSYS002)
|
||||
// This board needs to use a PWM input in order to scale the power of
|
||||
// the PA output. Undocumented by NiceRF, they have been contacted for
|
||||
// comment. (March 2025)
|
||||
analogWrite(_txen, _txp_dc);
|
||||
#else
|
||||
digitalWrite(_txen, HIGH);
|
||||
#endif
|
||||
}
|
||||
if (_rxen != -1) {
|
||||
digitalWrite(_rxen, LOW);
|
||||
@ -2242,7 +2254,13 @@ void sx128x::disableTCXO() {
|
||||
void sx128x::setTxPower(int level, int outputPin) {
|
||||
uint8_t tx_buf[2];
|
||||
#if BOARD_VARIANT == MODEL_13 || BOARD_VARIANT == MODEL_21
|
||||
// RAK4631 with WisBlock SX1280 module (LIBSYS002)
|
||||
// RAK4631 with WisBlock SX1280 module (LIBSYS002) The following duty cycle
|
||||
// values assume a battery is in use which has a maximum voltage supply of
|
||||
// 4.2v (each case assumes 3.7v, except 15-20dBm to ensure legal compliance
|
||||
// at all battery voltages), as per the specification for the RAK19001.
|
||||
// Higher voltage batteries may cause your device to operate illegally due
|
||||
// to the resulting increase in transmission power. Beware!
|
||||
|
||||
if (level > 27) {
|
||||
level = 27;
|
||||
} else if (level < 0) {
|
||||
@ -2256,90 +2274,125 @@ void sx128x::setTxPower(int level, int outputPin) {
|
||||
switch (level) {
|
||||
case 0:
|
||||
reg_value = -18;
|
||||
_txp_dc = 55;
|
||||
break;
|
||||
case 1:
|
||||
reg_value = -16;
|
||||
_txp_dc = 64;
|
||||
break;
|
||||
case 2:
|
||||
reg_value = -15;
|
||||
_txp_dc = 73;
|
||||
break;
|
||||
case 3:
|
||||
reg_value = -14;
|
||||
_txp_dc = 81;
|
||||
break;
|
||||
case 4:
|
||||
reg_value = -13;
|
||||
_txp_dc = 90;
|
||||
break;
|
||||
case 5:
|
||||
reg_value = -12;
|
||||
_txp_dc = 100;
|
||||
break;
|
||||
case 6:
|
||||
reg_value = -11;
|
||||
_txp_dc = 108;
|
||||
break;
|
||||
case 7:
|
||||
reg_value = -9;
|
||||
_txp_dc = 117;
|
||||
break;
|
||||
case 8:
|
||||
reg_value = -8;
|
||||
_txp_dc = 126;
|
||||
break;
|
||||
case 9:
|
||||
reg_value = -7;
|
||||
_txp_dc = 135;
|
||||
break;
|
||||
case 10:
|
||||
reg_value = -6;
|
||||
_txp_dc = 144;
|
||||
break;
|
||||
case 11:
|
||||
reg_value = -5;
|
||||
_txp_dc = 153;
|
||||
break;
|
||||
case 12:
|
||||
reg_value = -4;
|
||||
_txp_dc = 161;
|
||||
break;
|
||||
case 13:
|
||||
reg_value = -3;
|
||||
_txp_dc = 170;
|
||||
break;
|
||||
case 14:
|
||||
reg_value = -2;
|
||||
_txp_dc = 180;
|
||||
break;
|
||||
case 15:
|
||||
reg_value = -1;
|
||||
// Capped to ensure it doesn't exceed 15dBm
|
||||
_txp_dc = 183;
|
||||
break;
|
||||
case 16:
|
||||
reg_value = 0;
|
||||
// Capped to ensure it doesn't exceed 16dBm
|
||||
_txp_dc = 190;
|
||||
break;
|
||||
case 17:
|
||||
reg_value = 1;
|
||||
// Capped to ensure it doesn't exceed 17dBm
|
||||
_txp_dc = 200;
|
||||
break;
|
||||
case 18:
|
||||
reg_value = 2;
|
||||
// Capped to ensure it doesn't exceed 18dBm
|
||||
_txp_dc = 209;
|
||||
break;
|
||||
case 19:
|
||||
reg_value = 3;
|
||||
// Capped to ensure it doesn't exceed 19dBm
|
||||
_txp_dc = 218;
|
||||
break;
|
||||
case 20:
|
||||
reg_value = 4;
|
||||
// Capped to ensure it doesn't exceed 20dBm
|
||||
_txp_dc = 227;
|
||||
break;
|
||||
case 21:
|
||||
reg_value = 5;
|
||||
_txp_dc = 247;
|
||||
break;
|
||||
case 22:
|
||||
reg_value = 6;
|
||||
_txp_dc = 254;
|
||||
break;
|
||||
case 23:
|
||||
reg_value = 7;
|
||||
_txp_dc = 255;
|
||||
break;
|
||||
case 24:
|
||||
reg_value = 8;
|
||||
_txp_dc = 255;
|
||||
break;
|
||||
case 25:
|
||||
reg_value = 9;
|
||||
_txp_dc = 255;
|
||||
break;
|
||||
case 26:
|
||||
reg_value = 12;
|
||||
_txp_dc = 255;
|
||||
break;
|
||||
case 27:
|
||||
reg_value = 13;
|
||||
_txp_dc = 255;
|
||||
break;
|
||||
default:
|
||||
reg_value = 0;
|
||||
reg_value = -18;
|
||||
_txp_dc = 55;
|
||||
break;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user