CALIBRATE.rf_out_power

master
Антон 2021-04-02 16:35:31 +03:00
rodzic 46330d78d1
commit df3efc26ff
5 zmienionych plików z 172 dodań i 26 usunięć

Wyświetl plik

@ -304,23 +304,27 @@ float32_t getMaxTXAmplitudeOnFreq(uint32_t freq)
{
if (freq > MAX_TX_FREQ_HZ)
return 0.0f;
if (freq < 2.5 * 1000000)
return (float32_t)CALIBRATE.rf_out_power_160m / 100.0f * (float32_t)MAX_TX_AMPLITUDE;
if (freq < 5.3 * 1000000)
return (float32_t)CALIBRATE.rf_out_power_80m / 100.0f * (float32_t)MAX_TX_AMPLITUDE;
if (freq < 8.5 * 1000000)
return (float32_t)CALIBRATE.rf_out_power_40m / 100.0f * (float32_t)MAX_TX_AMPLITUDE;
if (freq < 12.0 * 1000000)
return (float32_t)CALIBRATE.rf_out_power_30m / 100.0f * (float32_t)MAX_TX_AMPLITUDE;
if (freq < 16.0 * 1000000)
return (float32_t)CALIBRATE.rf_out_power_20m / 100.0f * (float32_t)MAX_TX_AMPLITUDE;
if (freq < 19.5 * 1000000)
return (float32_t)CALIBRATE.rf_out_power_17m / 100.0f * (float32_t)MAX_TX_AMPLITUDE;
if (freq < 22.5 * 1000000)
return (float32_t)CALIBRATE.rf_out_power_15m / 100.0f * (float32_t)MAX_TX_AMPLITUDE;
if (freq < 26.5 * 1000000)
return (float32_t)CALIBRATE.rf_out_power_12m / 100.0f * (float32_t)MAX_TX_AMPLITUDE;
if (freq < 40.0 * 1000000)
return (float32_t)CALIBRATE.rf_out_power_10m / 100.0f * (float32_t)MAX_TX_AMPLITUDE;
uint8_t nyquist = freq / (DAC_CLOCK / 2);
if (nyquist == 0)
{
if(freq < 2000000)
return (float32_t)CALIBRATE.rf_out_power_lf / 100.0f * (float32_t)MAX_TX_AMPLITUDE;
if(freq < 5000000)
return (float32_t)CALIBRATE.rf_out_power_hf_low / 100.0f * (float32_t)MAX_TX_AMPLITUDE;
if(freq < 30000000)
return (float32_t)CALIBRATE.rf_out_power_hf / 100.0f * (float32_t)MAX_TX_AMPLITUDE;
return (float32_t)CALIBRATE.rf_out_power_hf_high / 100.0f * (float32_t)MAX_TX_AMPLITUDE;
}
if (nyquist == 1)
return (float32_t)CALIBRATE.rf_out_power_vhf / 100.0f * (float32_t)MAX_TX_AMPLITUDE;
return 0.0f;
return (float32_t)CALIBRATE.rf_out_power_40m / 100.0f * (float32_t)MAX_TX_AMPLITUDE;
}
float32_t generateSin(float32_t amplitude, uint32_t index, uint32_t samplerate, uint32_t freq)

Wyświetl plik

@ -11,7 +11,7 @@
#define LAY_TOPBUTTONS_Y1 1
#define LAY_TOPBUTTONS_Y2 50
#define LAY_TOPBUTTONS_WIDTH 62
#define LAY_TOPBUTTONS_HEIGHT 25
#define LAY_TOPBUTTONS_HEIGHT 40
#define LAY_TOPBUTTONS_TB_MARGIN 2
#define LAY_TOPBUTTONS_LR_MARGIN 2
#define LAY_TOPBUTTONS_PRE_X (uint16_t)(LAY_TOPBUTTONS_X1 + LAY_TOPBUTTONS_LR_MARGIN)
@ -40,7 +40,7 @@
#define LAY_FREQ_X_OFFSET_HZ 307
#define LAY_FREQ_HEIGHT 51
#define LAY_FREQ_WIDTH 370
#define LAY_FREQ_TOP_OFFSET 10
#define LAY_FREQ_TOP_OFFSET 15
#define LAY_FREQ_LEFT_MARGIN 37
#define LAY_FREQ_RIGHT_MARGIN (uint16_t)(LCD_WIDTH - LAY_FREQ_LEFT_MARGIN - LAY_FREQ_WIDTH)
#define LAY_FREQ_BOTTOM_OFFSET 8
@ -116,8 +116,8 @@
#define LAY_TEXTBAR_TEXT_T_BOTTOM_OFFESET 30
#define LAY_TEXTBAR_TEXT_X_OFFSET 85
//FFT and waterfall
#define LAY_FFT_HEIGHT 50
#define LAY_WTF_HEIGHT 55
#define LAY_FFT_HEIGHT 70
#define LAY_WTF_HEIGHT 40
#define LAY_FFT_PRINT_SIZE LCD_WIDTH
#define LAY_FFT_CWDECODER_OFFSET 17
#define LAY_FFT_FFTWTF_POS_Y (uint16_t)(LCD_HEIGHT - LAY_FFT_HEIGHT - LAY_WTF_HEIGHT - LAY_TEXTBAR_TEXT_T_BOTTOM_OFFESET)

Wyświetl plik

@ -273,7 +273,17 @@ void LoadCalibration(bool clear)
CALIBRATE.CICFIR_GAINER_val = 35; // Offset from the output of the CIC compensator
CALIBRATE.TXCICFIR_GAINER_val = 27; // Offset from the TX-CIC output of the compensator
CALIBRATE.DAC_GAINER_val = 26; // DAC offset offset
// Calibrate the maximum output power for each band
// Calibrate the maximum output power for each band
CALIBRATE.rf_out_power_160m = 20; //160m
CALIBRATE.rf_out_power_80m = 20; //80m
CALIBRATE.rf_out_power_40m = 21; //40m
CALIBRATE.rf_out_power_30m = 20; //30m
CALIBRATE.rf_out_power_20m = 20; //20m
CALIBRATE.rf_out_power_17m = 20; //17m
CALIBRATE.rf_out_power_15m = 20; //15m
CALIBRATE.rf_out_power_12m = 20; //12m
CALIBRATE.rf_out_power_10m = 20; //10m
CALIBRATE.rf_out_power_lf = 40; // <2mhz
CALIBRATE.rf_out_power_hf_low = 45; // <5mhz
CALIBRATE.rf_out_power_hf = 26; // <30mhz

Wyświetl plik

@ -14,7 +14,7 @@
#define MAX_RX_FREQ_HZ 750000000 // Maximum receive frequency (from the ADC datasheet)
#define MAX_TX_FREQ_HZ (DAC_CLOCK / 2) // Maximum transmission frequency
#define TRX_SAMPLERATE 48000 // audio stream sampling rate during processing
#define MAX_TX_AMPLITUDE 0.6f // Maximum amplitude when transmitting to FPGA
#define MAX_TX_AMPLITUDE 1.0f // Maximum amplitude when transmitting to FPGA
#define AGC_MAX_GAIN 30.0f // Maximum gain in AGC, dB
#define AGC_CLIPPING 6.0f // Limit over target in AGC, dB
#define TUNE_POWER 100 // % of the power selected in the settings when starting TUNE (100 - full)
@ -204,7 +204,16 @@ extern struct TRX_CALIBRATE
int16_t smeter_calibration;
float32_t swr_trans_rate;
float32_t volt_cal_rate;
uint8_t rf_out_power_160m;
uint8_t rf_out_power_80m;
uint8_t rf_out_power_40m;
uint8_t rf_out_power_30m;
uint8_t rf_out_power_20m;
uint8_t rf_out_power_17m;
uint8_t rf_out_power_15m;
uint8_t rf_out_power_12m;
uint8_t rf_out_power_10m;
uint8_t csum; //check sum
uint8_t ENDBit; //end bit
} CALIBRATE;

Wyświetl plik

@ -104,6 +104,15 @@ static void SYSMENU_HANDL_CALIB_S_METER(int8_t direction);
static void SYSMENU_HANDL_CALIB_VOLT(int8_t direction);
static void SYSMENU_HANDL_CALIB_ADC_OFFSET(int8_t direction);
static void SYSMENU_HANDL_CALIB_SWR_TRANS_RATE(int8_t direction);
static void SYSMENU_HANDL_CALIB_RF_GAIN_160M(int8_t direction);
static void SYSMENU_HANDL_CALIB_RF_GAIN_80M(int8_t direction);
static void SYSMENU_HANDL_CALIB_RF_GAIN_40M(int8_t direction);
static void SYSMENU_HANDL_CALIB_RF_GAIN_30M(int8_t direction);
static void SYSMENU_HANDL_CALIB_RF_GAIN_20M(int8_t direction);
static void SYSMENU_HANDL_CALIB_RF_GAIN_17M(int8_t direction);
static void SYSMENU_HANDL_CALIB_RF_GAIN_15M(int8_t direction);
static void SYSMENU_HANDL_CALIB_RF_GAIN_12M(int8_t direction);
static void SYSMENU_HANDL_CALIB_RF_GAIN_10M(int8_t direction);
static void SYSMENU_HANDL_TRXMENU(int8_t direction);
static void SYSMENU_HANDL_AUDIOMENU(int8_t direction);
@ -235,6 +244,15 @@ static const struct sysmenu_item_handler sysmenu_calibration_handlers[] =
{"S METER", SYSMENU_INT16, (uint32_t *)&CALIBRATE.smeter_calibration, SYSMENU_HANDL_CALIB_S_METER},
{"SWR TRANS RATE", SYSMENU_FLOAT32, (uint32_t *)&CALIBRATE.swr_trans_rate, SYSMENU_HANDL_CALIB_SWR_TRANS_RATE},
{"VOLT CALIBR", SYSMENU_FLOAT32, (uint32_t *)&CALIBRATE.volt_cal_rate, SYSMENU_HANDL_CALIB_VOLT},
{"RF GAIN 160m", SYSMENU_UINT8, (uint32_t *)&CALIBRATE.rf_out_power_160m, SYSMENU_HANDL_CALIB_RF_GAIN_160M},
{"RF GAIN 80m", SYSMENU_UINT8, (uint32_t *)&CALIBRATE.rf_out_power_80m, SYSMENU_HANDL_CALIB_RF_GAIN_80M},
{"RF GAIN 40m", SYSMENU_UINT8, (uint32_t *)&CALIBRATE.rf_out_power_40m, SYSMENU_HANDL_CALIB_RF_GAIN_40M},
{"RF GAIN 30m", SYSMENU_UINT8, (uint32_t *)&CALIBRATE.rf_out_power_30m, SYSMENU_HANDL_CALIB_RF_GAIN_30M},
{"RF GAIN 20m", SYSMENU_UINT8, (uint32_t *)&CALIBRATE.rf_out_power_20m, SYSMENU_HANDL_CALIB_RF_GAIN_20M},
{"RF GAIN 17m", SYSMENU_UINT8, (uint32_t *)&CALIBRATE.rf_out_power_17m, SYSMENU_HANDL_CALIB_RF_GAIN_17M},
{"RF GAIN 15m", SYSMENU_UINT8, (uint32_t *)&CALIBRATE.rf_out_power_15m, SYSMENU_HANDL_CALIB_RF_GAIN_15M},
{"RF GAIN 12m", SYSMENU_UINT8, (uint32_t *)&CALIBRATE.rf_out_power_12m, SYSMENU_HANDL_CALIB_RF_GAIN_12M},
{"RF GAIN 10m", SYSMENU_UINT8, (uint32_t *)&CALIBRATE.rf_out_power_10m, SYSMENU_HANDL_CALIB_RF_GAIN_10M},
};
static const uint8_t sysmenu_calibration_item_count = sizeof(sysmenu_calibration_handlers) / sizeof(sysmenu_calibration_handlers[0]);
@ -333,9 +351,8 @@ static void SYSMENU_HANDL_TRX_TWO_SIGNAL_TUNE(int8_t direction)
static void SYSMENU_HANDL_TRX_RFPower(int8_t direction)
{
TRX.RF_Power += direction;
if (TRX.RF_Power < 1)
TRX.RF_Power = 1;
if (direction > 0 || TRX.RF_Power > 0)
TRX.RF_Power += direction;
if (TRX.RF_Power > 100)
TRX.RF_Power = 100;
}
@ -1693,6 +1710,112 @@ static void SYSMENU_HANDL_CALIB_DAC_SHIFT(int8_t direction)
if (CALIBRATE.DAC_GAINER_val > 28)
CALIBRATE.DAC_GAINER_val = 28;
}
static void SYSMENU_HANDL_CALIB_RF_GAIN_160M(int8_t direction)
{
if (CALIBRATE.rf_out_power_160m > 0)
CALIBRATE.rf_out_power_160m += direction;
if (CALIBRATE.rf_out_power_160m == 0 && direction > 0)
CALIBRATE.rf_out_power_160m += direction;
if (CALIBRATE.rf_out_power_160m > 100)
CALIBRATE.rf_out_power_160m = 100;
TRX_MAX_TX_Amplitude = getMaxTXAmplitudeOnFreq(CurrentVFO()->Freq);
}
static void SYSMENU_HANDL_CALIB_RF_GAIN_80M(int8_t direction)
{
if (CALIBRATE.rf_out_power_80m > 0)
CALIBRATE.rf_out_power_80m += direction;
if (CALIBRATE.rf_out_power_80m == 0 && direction > 0)
CALIBRATE.rf_out_power_80m += direction;
if (CALIBRATE.rf_out_power_80m > 100)
CALIBRATE.rf_out_power_80m = 100;
TRX_MAX_TX_Amplitude = getMaxTXAmplitudeOnFreq(CurrentVFO()->Freq);
}
static void SYSMENU_HANDL_CALIB_RF_GAIN_40M(int8_t direction)
{
if (CALIBRATE.rf_out_power_40m > 0)
CALIBRATE.rf_out_power_40m += direction;
if (CALIBRATE.rf_out_power_40m == 0 && direction > 0)
CALIBRATE.rf_out_power_40m += direction;
if (CALIBRATE.rf_out_power_40m > 100)
CALIBRATE.rf_out_power_40m = 100;
TRX_MAX_TX_Amplitude = getMaxTXAmplitudeOnFreq(CurrentVFO()->Freq);
}
static void SYSMENU_HANDL_CALIB_RF_GAIN_30M(int8_t direction)
{
if (CALIBRATE.rf_out_power_30m > 0)
CALIBRATE.rf_out_power_30m += direction;
if (CALIBRATE.rf_out_power_30m == 0 && direction > 0)
CALIBRATE.rf_out_power_30m += direction;
if (CALIBRATE.rf_out_power_30m > 100)
CALIBRATE.rf_out_power_30m = 100;
TRX_MAX_TX_Amplitude = getMaxTXAmplitudeOnFreq(CurrentVFO()->Freq);
}
static void SYSMENU_HANDL_CALIB_RF_GAIN_20M(int8_t direction)
{
if (CALIBRATE.rf_out_power_20m > 0)
CALIBRATE.rf_out_power_20m += direction;
if (CALIBRATE.rf_out_power_20m == 0 && direction > 0)
CALIBRATE.rf_out_power_20m += direction;
if (CALIBRATE.rf_out_power_20m > 100)
CALIBRATE.rf_out_power_20m = 100;
TRX_MAX_TX_Amplitude = getMaxTXAmplitudeOnFreq(CurrentVFO()->Freq);
}
static void SYSMENU_HANDL_CALIB_RF_GAIN_17M(int8_t direction)
{
if (CALIBRATE.rf_out_power_17m > 0)
CALIBRATE.rf_out_power_17m += direction;
if (CALIBRATE.rf_out_power_17m == 0 && direction > 0)
CALIBRATE.rf_out_power_17m += direction;
if (CALIBRATE.rf_out_power_17m > 100)
CALIBRATE.rf_out_power_17m = 100;
TRX_MAX_TX_Amplitude = getMaxTXAmplitudeOnFreq(CurrentVFO()->Freq);
}
static void SYSMENU_HANDL_CALIB_RF_GAIN_15M(int8_t direction)
{
if (CALIBRATE.rf_out_power_15m > 0)
CALIBRATE.rf_out_power_15m += direction;
if (CALIBRATE.rf_out_power_15m == 0 && direction > 0)
CALIBRATE.rf_out_power_15m += direction;
if (CALIBRATE.rf_out_power_15m > 100)
CALIBRATE.rf_out_power_15m = 100;
TRX_MAX_TX_Amplitude = getMaxTXAmplitudeOnFreq(CurrentVFO()->Freq);
}
static void SYSMENU_HANDL_CALIB_RF_GAIN_12M(int8_t direction)
{
if (CALIBRATE.rf_out_power_12m > 0)
CALIBRATE.rf_out_power_12m += direction;
if (CALIBRATE.rf_out_power_12m == 0 && direction > 0)
CALIBRATE.rf_out_power_12m += direction;
if (CALIBRATE.rf_out_power_12m > 100)
CALIBRATE.rf_out_power_12m = 100;
TRX_MAX_TX_Amplitude = getMaxTXAmplitudeOnFreq(CurrentVFO()->Freq);
}
static void SYSMENU_HANDL_CALIB_RF_GAIN_10M(int8_t direction)
{
if (CALIBRATE.rf_out_power_10m > 0)
CALIBRATE.rf_out_power_10m += direction;
if (CALIBRATE.rf_out_power_10m == 0 && direction > 0)
CALIBRATE.rf_out_power_10m += direction;
if (CALIBRATE.rf_out_power_10m > 100)
CALIBRATE.rf_out_power_10m = 100;
TRX_MAX_TX_Amplitude = getMaxTXAmplitudeOnFreq(CurrentVFO()->Freq);
}
static void SYSMENU_HANDL_CALIB_RF_GAIN_LF(int8_t direction)
{