[SX126x] Added TCXO control method
This commit is contained in:
parent
2d75670c9c
commit
ccaf51a915
5 changed files with 75 additions and 5 deletions
|
@ -3,7 +3,7 @@
|
||||||
|
|
||||||
This example shows how to change all the properties of LoRa transmission.
|
This example shows how to change all the properties of LoRa transmission.
|
||||||
RadioLib currently supports the following settings:
|
RadioLib currently supports the following settings:
|
||||||
- pins (SPI slave select, digital IO 0, digital IO 1)
|
- pins (SPI slave select, DIO1, DIO2, BUSY pin)
|
||||||
- carrier frequency
|
- carrier frequency
|
||||||
- bandwidth
|
- bandwidth
|
||||||
- spreading factor
|
- spreading factor
|
||||||
|
@ -12,6 +12,7 @@
|
||||||
- output power during transmission
|
- output power during transmission
|
||||||
- CRC
|
- CRC
|
||||||
- preamble length
|
- preamble length
|
||||||
|
- TCXO voltage
|
||||||
|
|
||||||
Other modules from SX126x family can also be used.
|
Other modules from SX126x family can also be used.
|
||||||
*/
|
*/
|
||||||
|
@ -124,11 +125,20 @@ void setup() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// disable CRC
|
// disable CRC
|
||||||
if (loraSX1268.setCRC(false) == ERR_INVALID_CRC) {
|
if (loraSX1268.setCRC(false) == ERR_INVALID_CRC_CONFIGURATION) {
|
||||||
Serial.println(F("Selected CRC is invalid for this module!"));
|
Serial.println(F("Selected CRC is invalid for this module!"));
|
||||||
while (true);
|
while (true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Some SX126x have TCXO (temprature compensated crystal
|
||||||
|
// oscillator). To configure TCXO reference voltage,
|
||||||
|
// the following method can be used.
|
||||||
|
if (loraSX1268.setTCXO(2.4) == ERR_INVALID_TCXO_VOLTAGE) {
|
||||||
|
Serial.println(F("Selected TCXO voltage is invalid for this module!"));
|
||||||
|
while (true);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
Serial.println(F("All settings succesfully changed!"));
|
Serial.println(F("All settings succesfully changed!"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
22
keywords.txt
22
keywords.txt
|
@ -14,11 +14,13 @@ CC1101 KEYWORD1
|
||||||
ESP8266 KEYWORD1
|
ESP8266 KEYWORD1
|
||||||
HC05 KEYWORD1
|
HC05 KEYWORD1
|
||||||
JDY08 KEYWORD1
|
JDY08 KEYWORD1
|
||||||
|
nRF24 KEYWORD1
|
||||||
RF69 KEYWORD1
|
RF69 KEYWORD1
|
||||||
RFM95 KEYWORD1
|
RFM95 KEYWORD1
|
||||||
RFM96 KEYWORD1
|
RFM96 KEYWORD1
|
||||||
RFM97 KEYWORD1
|
RFM97 KEYWORD1
|
||||||
RFM98 KEYWORD1
|
RFM98 KEYWORD1
|
||||||
|
SIM800 KEYWORD1
|
||||||
SX1231 KEYWORD1
|
SX1231 KEYWORD1
|
||||||
SX1261 KEYWORD1
|
SX1261 KEYWORD1
|
||||||
SX1262 KEYWORD1
|
SX1262 KEYWORD1
|
||||||
|
@ -98,6 +100,10 @@ getLQI KEYWORD2
|
||||||
setGdo0Action KEYWORD2
|
setGdo0Action KEYWORD2
|
||||||
setGdo1Action KEYWORD2
|
setGdo1Action KEYWORD2
|
||||||
|
|
||||||
|
# SX126x-specific
|
||||||
|
setDio2Action KEYWORD2
|
||||||
|
setTCXO KEYWORD2
|
||||||
|
|
||||||
# ESP8266
|
# ESP8266
|
||||||
join KEYWORD2
|
join KEYWORD2
|
||||||
reset KEYWORD2
|
reset KEYWORD2
|
||||||
|
@ -108,6 +114,11 @@ setPanId KEYWORD2
|
||||||
getPacketSource KEYWORD2
|
getPacketSource KEYWORD2
|
||||||
getPacketData KEYWORD2
|
getPacketData KEYWORD2
|
||||||
|
|
||||||
|
# nRF24
|
||||||
|
setTransmitAddress KEYWORD2
|
||||||
|
setReceivePipe KEYWORD2
|
||||||
|
disablePipe KEYWORD2
|
||||||
|
|
||||||
# HTTP
|
# HTTP
|
||||||
get KEYWORD2
|
get KEYWORD2
|
||||||
post KEYWORD2
|
post KEYWORD2
|
||||||
|
@ -135,6 +146,10 @@ send KEYWORD2
|
||||||
receive KEYWORD2
|
receive KEYWORD2
|
||||||
getNumBytes KEYWORD2
|
getNumBytes KEYWORD2
|
||||||
|
|
||||||
|
# SIM800
|
||||||
|
sendSMS KEYWORD2
|
||||||
|
shutdown KEYWORD2
|
||||||
|
|
||||||
#######################################
|
#######################################
|
||||||
# Constants (LITERAL1)
|
# Constants (LITERAL1)
|
||||||
#######################################
|
#######################################
|
||||||
|
@ -198,7 +213,12 @@ ITA2 LITERAL1
|
||||||
ERR_INVALID_RTTY_SHIFT LITERAL1
|
ERR_INVALID_RTTY_SHIFT LITERAL1
|
||||||
ERR_UNSUPPORTED_ENCODING LITERAL1
|
ERR_UNSUPPORTED_ENCODING LITERAL1
|
||||||
|
|
||||||
|
ERR_INVALID_DATA_RATE LITERAL1
|
||||||
|
ERR_INVALID_ADDRESS_WIDTH LITERAL1
|
||||||
|
ERR_INVALID_PIPE_NUMBER LITERAL1
|
||||||
|
|
||||||
ERR_INVALID_NUM_BROAD_ADDRS LITERAL1
|
ERR_INVALID_NUM_BROAD_ADDRS LITERAL1
|
||||||
|
|
||||||
ERR_INVALID_CRC LITERAL1
|
ERR_INVALID_CRC_CONFIGURATION LITERAL1
|
||||||
LORA_DETECTED LITERAL1
|
LORA_DETECTED LITERAL1
|
||||||
|
ERR_INVALID_TCXO_VOLTAGE LITERAL1
|
||||||
|
|
|
@ -109,7 +109,8 @@
|
||||||
#define ERR_INVALID_NUM_BROAD_ADDRS -601
|
#define ERR_INVALID_NUM_BROAD_ADDRS -601
|
||||||
|
|
||||||
// SX126x-specific status codes
|
// SX126x-specific status codes
|
||||||
#define ERR_INVALID_CRC -701
|
#define ERR_INVALID_CRC_CONFIGURATION -701
|
||||||
#define LORA_DETECTED -702
|
#define LORA_DETECTED -702
|
||||||
|
#define ERR_INVALID_TCXO_VOLTAGE -703
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -733,7 +733,7 @@ int16_t SX126x::setCRC(uint8_t len, uint16_t initial, uint16_t polynomial, bool
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return(ERR_INVALID_CRC);
|
return(ERR_INVALID_CRC_CONFIGURATION);
|
||||||
}
|
}
|
||||||
setPacketParamsFSK(_preambleLengthFSK, _crcTypeFSK, _syncWordLength, _addrComp);
|
setPacketParamsFSK(_preambleLengthFSK, _crcTypeFSK, _syncWordLength, _addrComp);
|
||||||
|
|
||||||
|
@ -772,6 +772,44 @@ float SX126x::getSNR() {
|
||||||
return(snrPkt/4.0);
|
return(snrPkt/4.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int16_t SX126x::setTCXO(float voltage, uint32_t timeout) {
|
||||||
|
// set mode to standby
|
||||||
|
standby();
|
||||||
|
|
||||||
|
// check alowed voltage values
|
||||||
|
uint8_t data[4];
|
||||||
|
if(abs(voltage - 1.6) <= 0.001) {
|
||||||
|
data[0] = SX126X_DIO3_OUTPUT_1_6;
|
||||||
|
} else if(abs(voltage - 1.7) <= 0.001) {
|
||||||
|
data[0] = SX126X_DIO3_OUTPUT_1_7;
|
||||||
|
} else if(abs(voltage - 1.8) <= 0.001) {
|
||||||
|
data[0] = SX126X_DIO3_OUTPUT_1_8;
|
||||||
|
} else if(abs(voltage - 2.2) <= 0.001) {
|
||||||
|
data[0] = SX126X_DIO3_OUTPUT_2_2;
|
||||||
|
} else if(abs(voltage - 2.4) <= 0.001) {
|
||||||
|
data[0] = SX126X_DIO3_OUTPUT_2_4;
|
||||||
|
} else if(abs(voltage - 2.7) <= 0.001) {
|
||||||
|
data[0] = SX126X_DIO3_OUTPUT_2_7;
|
||||||
|
} else if(abs(voltage - 3.0) <= 0.001) {
|
||||||
|
data[0] = SX126X_DIO3_OUTPUT_3_0;
|
||||||
|
} else if(abs(voltage - 3.3) <= 0.001) {
|
||||||
|
data[0] = SX126X_DIO3_OUTPUT_3_3;
|
||||||
|
} else {
|
||||||
|
return(ERR_INVALID_TCXO_VOLTAGE);
|
||||||
|
}
|
||||||
|
|
||||||
|
// calculate timeout
|
||||||
|
uint32_t timeoutValue = (float)timeout / 15.625;
|
||||||
|
data[1] = (uint8_t)((timeoutValue >> 16) & 0xFF)
|
||||||
|
data[2] = (uint8_t)((timeoutValue >> 8) & 0xFF)
|
||||||
|
data[3] = (uint8_t)(timeoutValue & 0xFF)
|
||||||
|
|
||||||
|
// enable TCXO control on DIO3
|
||||||
|
SPIwriteCommand(SX126X_CMD_SET_DIO3_AS_TCXO_CTRL, data, 4);
|
||||||
|
|
||||||
|
return(ERR_NONE);
|
||||||
|
}
|
||||||
|
|
||||||
void SX126x::setTx(uint32_t timeout) {
|
void SX126x::setTx(uint32_t timeout) {
|
||||||
uint8_t data[3] = {(uint8_t)((timeout >> 16) & 0xFF), (uint8_t)((timeout >> 8) & 0xFF), (uint8_t)(timeout & 0xFF)};
|
uint8_t data[3] = {(uint8_t)((timeout >> 16) & 0xFF), (uint8_t)((timeout >> 8) & 0xFF), (uint8_t)(timeout & 0xFF)};
|
||||||
SPIwriteCommand(SX126X_CMD_SET_TX, data, 3);
|
SPIwriteCommand(SX126X_CMD_SET_TX, data, 3);
|
||||||
|
|
|
@ -359,6 +359,7 @@ class SX126x: public PhysicalLayer {
|
||||||
int16_t disableAddressFiltering();
|
int16_t disableAddressFiltering();
|
||||||
int16_t setCRC(bool enableCRC);
|
int16_t setCRC(bool enableCRC);
|
||||||
int16_t setCRC(uint8_t len, uint16_t initial = 0x1D0F, uint16_t polynomial = 0x1021, bool inverted = true);
|
int16_t setCRC(uint8_t len, uint16_t initial = 0x1D0F, uint16_t polynomial = 0x1021, bool inverted = true);
|
||||||
|
int16_t setTCXO(float voltage, uint32_t timeout = 5000);
|
||||||
float getDataRate();
|
float getDataRate();
|
||||||
float getRSSI();
|
float getRSSI();
|
||||||
float getSNR();
|
float getSNR();
|
||||||
|
|
Loading…
Add table
Reference in a new issue