From 2c075d52369bb655595f66e1ec46e7d4a277d550 Mon Sep 17 00:00:00 2001 From: phdlee Date: Fri, 15 Feb 2019 19:32:07 +0900 Subject: [PATCH 1/2] for uBITX v5 --- ubitx_20/softserial_tiny.cpp | 2 +- ubitx_20/ubitx.h | 5 +- ubitx_20/ubitx_20.ino | 94 ++++++++++++++++++++-------- ubitx_20/ubitx_factory_alignment.ino | 15 ++++- ubitx_20/ubitx_lcd_nextion.ino | 2 +- ubitx_20/ubitx_menu.ino | 10 ++- ubitx_20/ubitx_si5351.ino | 22 ++++++- 7 files changed, 115 insertions(+), 35 deletions(-) diff --git a/ubitx_20/softserial_tiny.cpp b/ubitx_20/softserial_tiny.cpp index 4738e87..6023c67 100644 --- a/ubitx_20/softserial_tiny.cpp +++ b/ubitx_20/softserial_tiny.cpp @@ -70,7 +70,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA The latest version of this library can always be found at http://arduiniana.org. */ -#include +#include //================================================================ //Public Variable diff --git a/ubitx_20/ubitx.h b/ubitx_20/ubitx.h index de44003..2eb279d 100644 --- a/ubitx_20/ubitx.h +++ b/ubitx_20/ubitx.h @@ -22,6 +22,9 @@ //============================================================================== // Compile Option //============================================================================== +//Ubitx Board Version +#define UBITX_BOARD_VERSION 4 //v1 ~ v4 : 4, v5: 5 + //Depending on the type of LCD mounted on the uBITX, uncomment one of the options below. //You must select only one. //#define UBITX_DISPLAY_LCD1602P //LCD mounted on unmodified uBITX (Parallel) @@ -330,5 +333,3 @@ extern void DisplayVersionInfo(const char* fwVersionInfo); extern int GetI2CSmeterValue(int valueType); //ubitx_ui.ino #endif //end of if header define - - diff --git a/ubitx_20/ubitx_20.ino b/ubitx_20/ubitx_20.ino index 2b23fb0..cdbe69b 100644 --- a/ubitx_20/ubitx_20.ino +++ b/ubitx_20/ubitx_20.ino @@ -6,7 +6,7 @@ // So I put + in the sense that it was improved one by one based on Original Firmware. // This firmware has been gradually changed based on the original firmware created by Farhan, Jack, Jerry and others. -#define FIRMWARE_VERSION_INFO F("+v1.110") +#define FIRMWARE_VERSION_INFO F("+v1.120") #define FIRMWARE_VERSION_NUM 0x04 //1st Complete Project : 1 (Version 1.061), 2st Project : 2, 1.08: 3, 1.09 : 4 /** @@ -72,10 +72,19 @@ // the second oscillator should ideally be at 57 MHz, however, the crystal filter's center frequency // is shifted down a little due to the loading from the impedance matching L-networks on either sides -#define SECOND_OSC_USB (56995000l) -#define SECOND_OSC_LSB (32995000l) -//these are the two default USB and LSB frequencies. The best frequencies depend upon your individual taste and filter shape -#define INIT_USB_FREQ (11996500l) + +#if UBITX_BOARD_VERSION == 5 + #define SECOND_OSC_USB (56064200l) + #define SECOND_OSC_LSB (33945800l) + #define INIT_USB_FREQ (11059200l) +#else + #define SECOND_OSC_USB (56995000l) + #define SECOND_OSC_LSB (32995000l) + //these are the two default USB and LSB frequencies. The best frequencies depend upon your individual taste and filter shape + #define INIT_USB_FREQ (11996500l) +#endif + + // limits the tuning and working range of the ubitx between 3 MHz and 30 MHz #define LOWEST_FREQ (3000000l) #define HIGHEST_FREQ (30000000l) @@ -345,26 +354,51 @@ void setTXFilters(unsigned long freq){ } } //end of for #else - if (freq > 21000000L){ // the default filter is with 35 MHz cut-off - digitalWrite(TX_LPF_A, 0); - digitalWrite(TX_LPF_B, 0); - digitalWrite(TX_LPF_C, 0); - } - else if (freq >= 14000000L){ //thrown the KT1 relay on, the 30 MHz LPF is bypassed and the 14-18 MHz LPF is allowd to go through - digitalWrite(TX_LPF_A, 1); - digitalWrite(TX_LPF_B, 0); - digitalWrite(TX_LPF_C, 0); - } - else if (freq > 7000000L){ - digitalWrite(TX_LPF_A, 1); - digitalWrite(TX_LPF_B, 1); - digitalWrite(TX_LPF_C, 0); - } - else { - digitalWrite(TX_LPF_A, 1); - digitalWrite(TX_LPF_B, 1); - digitalWrite(TX_LPF_C, 1); - } + + #if UBITX_BOARD_VERSION == 5 + if (freq > 21000000L){ // the default filter is with 35 MHz cut-off + digitalWrite(TX_LPF_A, 0); + digitalWrite(TX_LPF_B, 0); + digitalWrite(TX_LPF_C, 0); + } + else if (freq >= 14000000L){ //thrown the KT1 relay on, the 30 MHz LPF is bypassed and the 14-18 MHz LPF is allowd to go through + digitalWrite(TX_LPF_A, 1); + digitalWrite(TX_LPF_B, 0); + digitalWrite(TX_LPF_C, 0); + } + else if (freq > 7000000L){ + digitalWrite(TX_LPF_A, 0); + digitalWrite(TX_LPF_B, 1); + digitalWrite(TX_LPF_C, 0); + } + else { + digitalWrite(TX_LPF_A, 0); + digitalWrite(TX_LPF_B, 0); + digitalWrite(TX_LPF_C, 1); + } + #else + if (freq > 21000000L){ // the default filter is with 35 MHz cut-off + digitalWrite(TX_LPF_A, 0); + digitalWrite(TX_LPF_B, 0); + digitalWrite(TX_LPF_C, 0); + } + else if (freq >= 14000000L){ //thrown the KT1 relay on, the 30 MHz LPF is bypassed and the 14-18 MHz LPF is allowd to go through + digitalWrite(TX_LPF_A, 1); + digitalWrite(TX_LPF_B, 0); + digitalWrite(TX_LPF_C, 0); + } + else if (freq > 7000000L){ + digitalWrite(TX_LPF_A, 1); + digitalWrite(TX_LPF_B, 1); + digitalWrite(TX_LPF_C, 0); + } + else { + digitalWrite(TX_LPF_A, 1); + digitalWrite(TX_LPF_B, 1); + digitalWrite(TX_LPF_C, 1); + } + #endif + #endif } @@ -1159,12 +1193,22 @@ void initSettings(){ if (vfoB_mode < 2) vfoB_mode = 3; + +#if UBITX_BOARD_VERSION == 5 + //original code with modified by kd8cec + if (usbCarrier > 11060000l || usbCarrier < 11048000l) + usbCarrier = 11052000l; + + if (cwmCarrier > 11060000l || cwmCarrier < 11048000l) + cwmCarrier = 11052000l; +#else //original code with modified by kd8cec if (usbCarrier > 12010000l || usbCarrier < 11990000l) usbCarrier = 11997000l; if (cwmCarrier > 12010000l || cwmCarrier < 11990000l) cwmCarrier = 11997000l; +#endif if (vfoA > 35000000l || 3500000l > vfoA) { vfoA = 7150000l; diff --git a/ubitx_20/ubitx_factory_alignment.ino b/ubitx_20/ubitx_factory_alignment.ino index 8178a20..4f3e504 100644 --- a/ubitx_20/ubitx_factory_alignment.ino +++ b/ubitx_20/ubitx_factory_alignment.ino @@ -1,3 +1,4 @@ +#include "ubitx.h" /** * This procedure is only for those who have a signal generator/transceiver tuned to exactly 7.150 and a dummy load @@ -27,14 +28,25 @@ void factory_alignment(){ printLine2("#2 BFO"); delay(1000); +#if UBITX_BOARD_VERSION == 5 + usbCarrier = 11053000l; + menuSetupCarrier(1); + if (usbCarrier == 11053000l){ + printLine2("Setup Aborted"); + return; + } + +#else usbCarrier = 11994999l; menuSetupCarrier(1); - if (usbCarrier == 11994999l){ printLine2("Setup Aborted"); return; } +#endif + + printLine2("#3:Test 3.5MHz"); cwMode = 0; @@ -88,4 +100,3 @@ void factory_alignment(){ updateDisplay(); } - diff --git a/ubitx_20/ubitx_lcd_nextion.ino b/ubitx_20/ubitx_lcd_nextion.ino index fdec271..786708e 100644 --- a/ubitx_20/ubitx_lcd_nextion.ino +++ b/ubitx_20/ubitx_lcd_nextion.ino @@ -1041,7 +1041,7 @@ void SendUbitxData(void) EEPROM.get(EXTERNAL_DEVICE_OPT1, nextionDisplayOption); SendCommandUL(CMD_DISP_OPTION2, nextionDisplayOption); - SendCommandStr(CMD_VERSION, (char *)("+v1.110")); //Version + SendCommandStr(CMD_VERSION, (char *)("+v1.120")); //Version SendEEPromData(CMD_CALLSIGN, 0, userCallsignLength -1, 0); /* diff --git a/ubitx_20/ubitx_menu.ino b/ubitx_20/ubitx_menu.ino index 9bcd126..502bd94 100644 --- a/ubitx_20/ubitx_menu.ino +++ b/ubitx_20/ubitx_menu.ino @@ -1662,6 +1662,15 @@ void menuSetupCarrier(int btn){ delay_background(1000, 0); //usbCarrier = 11995000l; //Remarked by KD8CEC, Suggest from many user, if entry routine factoryrest + /* + //for uBITX V5.0, but not used by KD8CEC, if you want default value of carrier on Calibration, delete remark symbols +#if UBITX_BOARD_VERSION == 5 + usbCarrier = 11053000l; +#else + usbCarrier = 11995000l; +#endif + */ + si5351bx_setfreq(0, usbCarrier); printCarrierFreq(usbCarrier); @@ -1705,4 +1714,3 @@ void menuSetupCarrier(int btn){ //menuOn = 0; menuClearExit(0); } - diff --git a/ubitx_20/ubitx_si5351.ino b/ubitx_20/ubitx_si5351.ino index 049cf0b..e230bfd 100644 --- a/ubitx_20/ubitx_si5351.ino +++ b/ubitx_20/ubitx_si5351.ino @@ -13,6 +13,7 @@ * The output clock channel that controls the frequency is connected to the PLL-B. * The WSPR protocol is generated by changing the clock of the PLL-B. ************************************************************************************/ +#include "ubitx.h" // ************* SI5315 routines - tks Jerry Gaffke, KE7ER *********************** // An minimalist standalone set of Si5351 routines. @@ -58,7 +59,13 @@ uint8_t SI5351BX_ADDR; // I2C address of Si5351 (variable f // User program may have reason to poke new values into these 3 RAM variables uint32_t si5351bx_vcoa = (SI5351BX_XTAL*SI5351BX_MSA); // 25mhzXtal calibrate uint8_t si5351bx_rdiv = 0; // 0-7, CLK pin sees fout/(2**rdiv) + +#if UBITX_BOARD_VERSION == 5 +uint8_t si5351bx_drive[3] = {3, 3, 3}; // 0=2ma 1=4ma 2=6ma 3=8ma for CLK 0,1,2 +#else uint8_t si5351bx_drive[3] = {1, 1, 1}; // 0=2ma 1=4ma 2=6ma 3=8ma for CLK 0,1,2 +#endif + uint8_t si5351bx_clken = 0xFF; // Private, all CLK output drivers off int32_t calibration = 0; @@ -92,6 +99,18 @@ void si5351bx_init() { // Call once at power-up, start PLLA i2cWriten(26, si5351Val, 8); // Write to 8 PLLA msynth regs i2cWrite(177, 0x20); // Reset PLLA (0x80 resets PLLB) + + +#if UBITX_BOARD_VERSION == 5 + //why? TODO : CHECK by KD8CEC + //initializing the ppl2 as well + i2cWriten(34, si5351Val, 8); // Write to 8 PLLA msynth regs + i2cWrite(177, 0xa0); // Reset PLLA & PPLB (0x80 resets PLLB) +#else + // +#endif + + } void si5351bx_setfreq(uint8_t clknum, uint32_t fout) { // Set a CLK to fout Hz @@ -169,6 +188,3 @@ void TXSubFreq(unsigned long P2) i2cWrite(40, (P2 & 65280) >> 8); i2cWrite(41, P2 & 255); } - - - From 05de66a038a752e17e8b58d1cf971e93f0204f7b Mon Sep 17 00:00:00 2001 From: phdlee Date: Tue, 2 Apr 2019 23:09:18 +0900 Subject: [PATCH 2/2] uBITX V5 suppoort and SDR Frequency Change --- ubitx_20/ubitx.h | 8 +++---- ubitx_20/ubitx_20.ino | 44 ++++++++++++++++++++++++++++++---- ubitx_20/ubitx_lcd_nextion.ino | 2 +- 3 files changed, 44 insertions(+), 10 deletions(-) diff --git a/ubitx_20/ubitx.h b/ubitx_20/ubitx.h index 2eb279d..958e4c4 100644 --- a/ubitx_20/ubitx.h +++ b/ubitx_20/ubitx.h @@ -23,23 +23,23 @@ // Compile Option //============================================================================== //Ubitx Board Version -#define UBITX_BOARD_VERSION 4 //v1 ~ v4 : 4, v5: 5 +#define UBITX_BOARD_VERSION 5 //v1 ~ v4 : 4, v5: 5 //Depending on the type of LCD mounted on the uBITX, uncomment one of the options below. //You must select only one. -//#define UBITX_DISPLAY_LCD1602P //LCD mounted on unmodified uBITX (Parallel) +#define UBITX_DISPLAY_LCD1602P //LCD mounted on unmodified uBITX (Parallel) //#define UBITX_DISPLAY_LCD1602I //I2C type 16 x 02 LCD //#define UBITX_DISPLAY_LCD1602I_DUAL //I2C type 16 x02 LCD Dual //#define UBITX_DISPLAY_LCD2004P //24 x 04 LCD (Parallel) //#define UBITX_DISPLAY_LCD2004I //I2C type 24 x 04 LCD -#define UBITX_DISPLAY_NEXTION //NEXTION LCD +//#define UBITX_DISPLAY_NEXTION //NEXTION LCD //#define UBITX_DISPLAY_NEXTION_SAFE //Only EEProm Write 770~775 #define I2C_LCD_MASTER_ADDRESS_DEFAULT 0x27 //0x27 //DEFAULT, if Set I2C Address by uBITX Manager, read from EEProm #define I2C_LCD_SECOND_ADDRESS_DEFAULT 0x3F //0x27 //only using Dual LCD Mode //Select betwen Analog S-Meter and DSP (I2C) Meter -//#define USE_I2CSMETER +#define USE_I2CSMETER #define EXTEND_KEY_GROUP1 //MODE, BAND(-), BAND(+), STEP //#define EXTEND_KEY_GROUP2 //Numeric (0~9), Point(.), Enter //Not supported in Version 1.0x diff --git a/ubitx_20/ubitx_20.ino b/ubitx_20/ubitx_20.ino index cdbe69b..2066939 100644 --- a/ubitx_20/ubitx_20.ino +++ b/ubitx_20/ubitx_20.ino @@ -6,7 +6,7 @@ // So I put + in the sense that it was improved one by one based on Original Firmware. // This firmware has been gradually changed based on the original firmware created by Farhan, Jack, Jerry and others. -#define FIRMWARE_VERSION_INFO F("+v1.120") +#define FIRMWARE_VERSION_INFO F("+v1.200") #define FIRMWARE_VERSION_NUM 0x04 //1st Complete Project : 1 (Version 1.061), 2st Project : 2, 1.08: 3, 1.09 : 4 /** @@ -74,13 +74,37 @@ // is shifted down a little due to the loading from the impedance matching L-networks on either sides #if UBITX_BOARD_VERSION == 5 - #define SECOND_OSC_USB (56064200l) +//For Test //45005000 + //#define SECOND_OSC_USB (56064200l) + //#define SECOND_OSC_LSB (33945800l) + +/* + //For Test //4500000 + #define SECOND_OSC_USB (56059200l) + #define SECOND_OSC_LSB (33940800l) +*/ + +/* + //For Test // V1.121 44991500(LSB), 44998500 (USB), abs : 7k + #define SECOND_OSC_USB (56057700l) + #define SECOND_OSC_LSB (33932300l) +*/ + + //============================================================================================================================== + //For Test // V1.200 V1.122 45002500 (LSB), 45002000 (USB) (Change Default BFO Frequency 11056xxx, adjust bfo and ifshift ), abs: 0.5k + //Best, Test 3 uBITX V5 + //Last Value, If more data is collected, it can be changed to a better value. + #define SECOND_OSC_USB (56058700l) #define SECOND_OSC_LSB (33945800l) - #define INIT_USB_FREQ (11059200l) + + //Not used, Just comment (Default) + #define INIT_USB_FREQ (11056500l) + //----------------------------------------------------------------------------------------------------------------------------- #else #define SECOND_OSC_USB (56995000l) #define SECOND_OSC_LSB (32995000l) //these are the two default USB and LSB frequencies. The best frequencies depend upon your individual taste and filter shape + //Not used, Just comment (Default) #define INIT_USB_FREQ (11996500l) #endif @@ -479,13 +503,23 @@ void setFrequency(unsigned long f){ moveFrequency = (f % 1000000); } +#if UBITX_BOARD_VERSION == 5 + si5351bx_setfreq(2, 45002000 + if1AdjustValue + f); + si5351bx_setfreq(1, 45002000 + + if1AdjustValue + + SDR_Center_Freq + //+ ((advancedFreqOption1 & 0x04) == 0x00 ? 0 : (f % 10000000)) + + moveFrequency); + // + 2390); //RTL-SDR Frequency Error, Do not add another SDR because the error is different. V1.3 +#else si5351bx_setfreq(2, 44991500 + if1AdjustValue + f); si5351bx_setfreq(1, 44991500 + if1AdjustValue + SDR_Center_Freq //+ ((advancedFreqOption1 & 0x04) == 0x00 ? 0 : (f % 10000000)) - + moveFrequency - + 2390); + + moveFrequency ); + //+ 2390); Do not add another SDR because the error is different. V1.3 +#endif } else { diff --git a/ubitx_20/ubitx_lcd_nextion.ino b/ubitx_20/ubitx_lcd_nextion.ino index 786708e..4c0a91a 100644 --- a/ubitx_20/ubitx_lcd_nextion.ino +++ b/ubitx_20/ubitx_lcd_nextion.ino @@ -1041,7 +1041,7 @@ void SendUbitxData(void) EEPROM.get(EXTERNAL_DEVICE_OPT1, nextionDisplayOption); SendCommandUL(CMD_DISP_OPTION2, nextionDisplayOption); - SendCommandStr(CMD_VERSION, (char *)("+v1.120")); //Version + SendCommandStr(CMD_VERSION, (char *)("+v1.122")); //Version SendEEPromData(CMD_CALLSIGN, 0, userCallsignLength -1, 0); /*