[CC1101] Fixed incorrect PA configuration in OOK mode

This commit is contained in:
jgromes 2020-02-16 12:33:57 +01:00
parent ec9f1a835f
commit 4f9b72f7f6

View file

@ -321,7 +321,7 @@ int16_t CC1101::setFrequency(float freq) {
} }
// Update the TX power accordingly to new freq. (PA values depend on chosen freq) // Update the TX power accordingly to new freq. (PA values depend on chosen freq)
return setOutputPower(_power); return(setOutputPower(_power));
} }
int16_t CC1101::setBitRate(float br) { int16_t CC1101::setBitRate(float br) {
@ -395,9 +395,6 @@ int16_t CC1101::setFrequencyDeviation(float freqDev) {
} }
int16_t CC1101::setOutputPower(int8_t power) { int16_t CC1101::setOutputPower(int8_t power) {
// Store the value.
_power = power;
// round to the known frequency settings // round to the known frequency settings
uint8_t f; uint8_t f;
if(_freq < 374.0) { if(_freq < 374.0) {
@ -454,16 +451,19 @@ int16_t CC1101::setOutputPower(int8_t power) {
return(ERR_INVALID_OUTPUT_POWER); return(ERR_INVALID_OUTPUT_POWER);
} }
if (_modulation == CC1101_MOD_FORMAT_ASK_OOK){ // store the value
_power = power;
if(_modulation == CC1101_MOD_FORMAT_ASK_OOK){
// Amplitude modulation: // Amplitude modulation:
// PA_TABLE[0] is the power to be used when transmitting a 0 (no power) // PA_TABLE[0] is the power to be used when transmitting a 0 (no power)
// PA_TABLE[1] is the power to be used when transmitting a 1 (full power) // PA_TABLE[1] is the power to be used when transmitting a 1 (full power)
byte paValues[2] = {0x00, powerRaw}; uint8_t paValues[2] = {0x00, powerRaw};
SPIwriteRegisterBurst(CC1101_REG_PATABLE, paValues, 2); SPIwriteRegisterBurst(CC1101_REG_PATABLE, paValues, 2);
return ERR_NONE; return(ERR_NONE);
}else{ } else {
// Freq modulation: // Freq modulation:
// PA_TABLE[0] is the power to be used when transmitting. // PA_TABLE[0] is the power to be used when transmitting.
return(SPIsetRegValue(CC1101_REG_PATABLE, powerRaw)); return(SPIsetRegValue(CC1101_REG_PATABLE, powerRaw));
@ -566,6 +566,9 @@ int16_t CC1101::setOOK(bool enableOOK) {
int16_t state = SPIsetRegValue(CC1101_REG_MDMCFG2, CC1101_MOD_FORMAT_ASK_OOK, 6, 4); int16_t state = SPIsetRegValue(CC1101_REG_MDMCFG2, CC1101_MOD_FORMAT_ASK_OOK, 6, 4);
RADIOLIB_ASSERT(state); RADIOLIB_ASSERT(state);
// update current modulation
_modulation = CC1101_MOD_FORMAT_ASK_OOK;
// PA_TABLE[0] is (by default) the power value used when transmitting a "0L". // PA_TABLE[0] is (by default) the power value used when transmitting a "0L".
// Set PA_TABLE[1] to be used when transmitting a "1L". // Set PA_TABLE[1] to be used when transmitting a "1L".
state = SPIsetRegValue(CC1101_REG_FREND0, 1, 2, 0); state = SPIsetRegValue(CC1101_REG_FREND0, 1, 2, 0);
@ -575,6 +578,9 @@ int16_t CC1101::setOOK(bool enableOOK) {
int16_t state = SPIsetRegValue(CC1101_REG_MDMCFG2, CC1101_MOD_FORMAT_2_FSK, 6, 4); int16_t state = SPIsetRegValue(CC1101_REG_MDMCFG2, CC1101_MOD_FORMAT_2_FSK, 6, 4);
RADIOLIB_ASSERT(state); RADIOLIB_ASSERT(state);
// update current modulation
_modulation = CC1101_MOD_FORMAT_2_FSK;
// Reset FREND0 to default value. // Reset FREND0 to default value.
state = SPIsetRegValue(CC1101_REG_FREND0, 0, 2, 0); state = SPIsetRegValue(CC1101_REG_FREND0, 0, 2, 0);
RADIOLIB_ASSERT(state); RADIOLIB_ASSERT(state);