From 2643d197c6dfe2128ba78be5d626b0717db48fcd Mon Sep 17 00:00:00 2001 From: OneOfEleven Date: Fri, 22 Sep 2023 22:02:03 +0100 Subject: [PATCH] Tidy ups, readme, comments --- README.md | 1 + app/app.c | 72 +++++++++++++++++++++++--------------------- firmware | Bin 166700 -> 166696 bytes firmware.bin | Bin 52132 -> 52132 bytes firmware.packed.bin | Bin 52150 -> 52150 bytes version.c | 2 +- 6 files changed, 39 insertions(+), 36 deletions(-) diff --git a/README.md b/README.md index 09f4a38..bd94fa5 100644 --- a/README.md +++ b/README.md @@ -31,6 +31,7 @@ ENABLE_COMPANDER := 1 compander option (per channel) ENABLE_SHOW_CHARGE_LEVEL := 1 show the charge level when the radio is on charge ENABLE_REVERSE_BAT_SYMBOL := 1 mirror the battery symbol on the status bar (+ pole on the right) ENABLE_AM_FIX := 1 dynamically adjust the front end gains when in AM mode to helo prevent AM demodulator saturation - ignore the on-screen RSSI (for now) +ENABLE_SQUELCH1_LOWER := 1 adjusts squelch setting '1' to be more sensitive - I plan to let user adjust it in the menu ENABLE_AUDIO_BAR := 0 experimental, display an audo bar level when TX'ing #ENABLE_SINGLE_VFO_CHAN := 1 not yet implemented - single VFO on display when possible #ENABLE_BAND_SCOPE := 1 not yet implemented - spectrum/pan-adapter diff --git a/app/app.c b/app/app.c index c228c59..54caaaa 100644 --- a/app/app.c +++ b/app/app.c @@ -67,14 +67,14 @@ const uint16_t orig_lna_short = 3; // 0dB const uint16_t orig_lna = 2; // -14dB const uint16_t orig_mixer = 3; // 0dB const uint16_t orig_pga = 6; // -3dB - + #ifdef ENABLE_AM_FIX // stuff to overcome the AM demodulator saturation problem - + static uint16_t am_lna_short = orig_lna_short; - static uint16_t am_lna = orig_lna; - static uint16_t am_mixer = orig_mixer; - static uint16_t am_pga = orig_pga; + static uint16_t am_lna = orig_lna; + static uint16_t am_mixer = orig_mixer; + static uint16_t am_pga = orig_pga; // moving average RSSI buffer struct { @@ -84,14 +84,14 @@ const uint16_t orig_pga = 6; // -3dB uint16_t sum; // sum of all samples in the buffer } moving_avg_rssi; - unsigned int am_fix_increase_counter = 0; + unsigned int am_gain_hold_counter = 0; void APP_reset_AM_fix(void) { // reset the moving average filter memset(&moving_avg_rssi, 0, sizeof(moving_avg_rssi)); - am_fix_increase_counter = 0; + am_gain_hold_counter = 0; } #endif @@ -513,10 +513,10 @@ void APP_StartListening(FUNCTION_Type_t Function, const bool reset_am_fix) // original setting uint16_t lna_short = orig_lna_short; - uint16_t lna = orig_lna; - uint16_t mixer = orig_mixer; - uint16_t pga = orig_pga; - + uint16_t lna = orig_lna; + uint16_t mixer = orig_mixer; + uint16_t pga = orig_pga; + if (gRxVfo->IsAM) { // AM @@ -1365,7 +1365,7 @@ void APP_CheckKeys(void) case FUNCTION_INCOMING: break; } - + // REG_10 <15:0> 0x0038 Rx AGC Gain Table[0]. (Index Max->Min is 3,2,1,0,-1) // // <9:8> = LNA Gain Short @@ -1403,34 +1403,34 @@ void APP_CheckKeys(void) // -87dBm, any higher and the AM demodulator starts to saturate/clip (distort) const uint16_t desired_rssi = (-87 + 160) * 2; // dBm to ADC sample - // start with current settings + // start with the current gain settings register uint16_t new_lna_short = am_lna_short; register uint16_t new_lna = am_lna; register uint16_t new_mixer = am_mixer; register uint16_t new_pga = am_pga; + // current RX frequency + const uint32_t rx_frequency = gRxVfo->pRX->Frequency; + // max gains to use -// uint16_t max_lna_short = orig_lna_short; +// uint16_t max_lna_short = orig_lna_short; // we're not altering this one uint16_t max_lna = orig_lna; uint16_t max_mixer = orig_mixer; uint16_t max_pga = orig_pga; - - const uint32_t rx_frequency = gRxVfo->pRX->Frequency; - // the RX gain abrutly reduces above this frequency - if (rx_frequency <= 22640000) + if (rx_frequency <= 22640000) // the RX gain abrutly reduces above this frequency { max_pga = 7; } else - { + { // allow a bit more gain // max_lna = 4; max_lna = 7; max_pga = 7; } // sample the current RSSI level - uint16_t rssi = BK4819_GetRSSI(); // 9-bit value (0 .. 511) + uint16_t rssi = BK4819_GetRSSI(); // 9-bit value (0 .. 511) //gCurrentRSSI = rssi; // compute the moving average RSSI @@ -1443,7 +1443,8 @@ void APP_CheckKeys(void) moving_avg_rssi.index = 0; // wrap-a-round rssi = moving_avg_rssi.sum / moving_avg_rssi.count; // compute the average of the past 'n' samples - // the register adjustments below to be more inteligent in order to maintain a good stable setting + // the register adjustments below need to be more intelligent + // in order to maintain a good stable setting if (rssi > desired_rssi) { // decrease gain @@ -1469,39 +1470,40 @@ void APP_CheckKeys(void) // if (new_lna_short > 0) // new_lna_short--; - am_fix_increase_counter = 50; // 500ms + am_gain_hold_counter = 50; // 500ms } - if (am_fix_increase_counter > 0) - am_fix_increase_counter--; - - if (am_fix_increase_counter == 0) - { // increase gain + if (am_gain_hold_counter > 0) + am_gain_hold_counter--; - if (rssi < (desired_rssi - 10)) + if (am_gain_hold_counter == 0) + { // hold has been released, we're now free to increase gain + + if (rssi < (desired_rssi - 10)) // 5dB hysterisis - to help prevent gain hunting { // increase gain + if (new_pga < max_pga) { new_pga++; - am_fix_increase_counter = 10; // 100ms + am_gain_hold_counter = 10; // 100ms } else if (new_mixer < max_mixer) { new_mixer++; - am_fix_increase_counter = 10; // 100ms + am_gain_hold_counter = 10; // 100ms } else if (new_lna < max_lna) { new_lna++; - am_fix_increase_counter = 10; // 100ms + am_gain_hold_counter = 10; // 100ms } // else // if (new_lna_short < max_lna_short) // { // new_lna_short++; -// am_fix_increase_counter = 10; // 100ms +// am_gain_hold_counter = 10; // 100ms // } } } @@ -1511,6 +1513,7 @@ void APP_CheckKeys(void) // apply the new gain settings to the front end + // remember the new gain settings - for the next time this function is called am_lna_short = new_lna_short; am_lna = new_lna; am_mixer = new_mixer; @@ -1519,10 +1522,9 @@ void APP_CheckKeys(void) BK4819_WriteRegister(BK4819_REG_13, (am_lna_short << 8) | (am_lna << 5) | (am_mixer << 3) | (am_pga << 0)); - // TODO: offset the RSSI reading to the rest of the firmware to cancel out the gain adjustments we've made here - - + + } #endif diff --git a/firmware b/firmware index df13c57d78ed4def6605af1cf61c88a365d361cb..03ad3737fa47218e7675c626d428141a5af80974 100644 GIT binary patch delta 5649 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 delta 5656 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 diff --git a/firmware.bin b/firmware.bin index 503327cb2ef5c8b8f9e22b944ad5376707becc0d..bffad23d9406a770facccf6194fb3fd68c50ad14 100644 GIT binary patch delta 37 ncmZ27oq5T0<_)UH#EjFDOf3w}dAS(;UERWUq1?^Z$1+&~HG`N diff --git a/firmware.packed.bin b/firmware.packed.bin index 03bf6a168544aa3e98dfd3df87a304e11a83d294..f74f31081b9f5824adadbfee75a87fe63d34c0e4 100644 GIT binary patch delta 53 zcmV-50LuTimjkw!1F!}l2Yd3FcLEoK delta 53 zcmV-50LuTimjkw!1F!}l2Y&I11Xb+}vkf39rWR>xu9N%<=N2sC0e&el%a#v_+w+qX LvrEQl1p?)oOKBFU diff --git a/version.c b/version.c index af82e76..d94235f 100644 --- a/version.c +++ b/version.c @@ -2,7 +2,7 @@ #ifdef GIT_HASH #define VER GIT_HASH #else - #define VER "230922" + #define VER "230923" #endif const char Version[] = "OEFW-"VER;