usdx-kamocat/code/radio/calibration.h

37 wiersze
1.7 KiB
C

#ifdef QCX
#define CAL_IQ 1
#ifdef CAL_IQ
int16_t cal_iq_dummy = 0;
// RX I/Q calibration procedure: terminate with 50 ohm, enable CW filter, adjust R27, R24, R17 subsequently to its minimum side-band rejection value in dB
void calibrate_iq()
{
smode = 1;
lcd.setCursor(0, 0); lcd.print(blanks); lcd.print(blanks);
digitalWrite(SIG_OUT, true); // loopback on
si5351.freq(freq, 0, 90); // RX in USB
si5351.SendRegister(SI_CLK_OE, 0b11111000); // CLK2_EN=0, CLK1_EN,CLK0_EN=1
float dbc;
si5351.freq_calc_fast(+700); si5351.SendPLLBRegisterBulk(); delay(100);
dbc = smeter();
si5351.freq_calc_fast(-700); si5351.SendPLLBRegisterBulk(); delay(100);
lcd.setCursor(0, 1); lcd.print("I-Q bal. 700Hz"); lcd.print(blanks);
for(; !digitalRead(BUTTONS);){ wdt_reset(); smeter(dbc); } for(; digitalRead(BUTTONS);) wdt_reset();
si5351.freq_calc_fast(+600); si5351.SendPLLBRegisterBulk(); delay(100);
dbc = smeter();
si5351.freq_calc_fast(-600); si5351.SendPLLBRegisterBulk(); delay(100);
lcd.setCursor(0, 1); lcd.print("Phase Lo 600Hz"); lcd.print(blanks);
for(; !digitalRead(BUTTONS);){ wdt_reset(); smeter(dbc); } for(; digitalRead(BUTTONS);) wdt_reset();
si5351.freq_calc_fast(+800); si5351.SendPLLBRegisterBulk(); delay(100);
dbc = smeter();
si5351.freq_calc_fast(-800); si5351.SendPLLBRegisterBulk(); delay(100);
lcd.setCursor(0, 1); lcd.print("Phase Hi 800Hz"); lcd.print(blanks);
for(; !digitalRead(BUTTONS);){ wdt_reset(); smeter(dbc); } for(; digitalRead(BUTTONS);) wdt_reset();
lcd.setCursor(9, 0); lcd.print(blanks); // cleanup dbmeter
digitalWrite(SIG_OUT, false); // loopback off
si5351.SendRegister(SI_CLK_OE, 0b11111100); // CLK2_EN=0, CLK1_EN,CLK0_EN=1
change = true; //restore original frequency setting
}
#endif
#endif //QCX