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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 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 zcmdlsoq5}I<_&BL?A4zxheo`L*vzY-u}mx{^UI-+yqm>z9x~Qx8lIlabE)g!6!*>E L$1+)&)<*yUcLEoK delta 53 zcmdlsoq5}I<_&BL>~$YISwi3PZ01$aSSFU4wQlksuIFMp4;kw;4Np(w@3{SWvhZf_ LW0|Z>PiFxDOKBFU 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;