8 Commits
1.1 ... v1.20

Author SHA1 Message Date
phdlee
395dd42459 Update README.md 2019-04-02 23:20:04 +09:00
phdlee
f25bf57556 Update README.md 2019-04-02 23:18:54 +09:00
phdlee
171f889f4a Merge pull request #45 from phdlee/version1.20
Version1.20
2019-04-02 23:16:03 +09:00
phdlee
05de66a038 uBITX V5 suppoort and SDR Frequency Change 2019-04-02 23:09:18 +09:00
phdlee
2c075d5236 for uBITX v5 2019-02-15 19:32:07 +09:00
phdlee
37fcc5975a Merge pull request #44 from phdlee/version1.11
Added Custom LPF Control
2018-09-22 19:14:22 +09:00
phdlee
450f57ae0f Added Custom LPF Control 2018-09-22 18:56:23 +09:00
phdlee
c34e798313 Update README.md 2018-09-11 18:09:22 +09:00
8 changed files with 197 additions and 45 deletions

View File

@@ -1,6 +1,6 @@
#NOTICE #NOTICE
---------------------------------------------------------------------------- ----------------------------------------------------------------------------
- Now Release Version 1.08 on my blog (http://www.hamskey.com) - Now Release Version 1.20 on my blog (http://www.hamskey.com)
- You can download and compiled hex file and uBITX Manager application on release section (https://github.com/phdlee/ubitx/releases) - You can download and compiled hex file and uBITX Manager application on release section (https://github.com/phdlee/ubitx/releases)
- For more information, see my blog (http://www.hamskey.com) - For more information, see my blog (http://www.hamskey.com)
@@ -17,13 +17,38 @@ The copyright information of the original is below.
KD8CEC KD8CEC
---------------------------------------------------------------------------- ----------------------------------------------------------------------------
Prepared or finished tasks for the next version Prepared or finished tasks for the next version
- Nextion LCD
- Add TTS module - Add TTS module
- Remote control on another MCU
- Direct control for Student - Direct control for Student
---------------------------------------------------------------------------- ----------------------------------------------------------------------------
## REVISION RECORD ## REVISION RECORD
1.20
- Support uBITX V5
- Change to SDR Frequency (Remove just RTL-SDR's error Frequency (2390Hz))
1.12
- Support Custom LPF Control
- Other Minor Bugs
1.1
- Support Nextion LCD, TJC LCD
- Read & Backup uBITX, ADC Monitoring, ATT, IF-Shift and more on Nextion LCD (TJC LCD)
- Factory Reset (Both Character LCD and Nextion LCD are applicable)
- Support Signal Meter using ADC (A7 Port)
- Supoort I2C Signal Meter
- Spectrum
- Band Scan
- Memory Control on Nextion LCD (TJC LCD)
- Speed Change CW-Option on Nextion LCD
- Fixed Band Change Bug (Both Character LCD and Nextion LCD are applicable)
- uBITX Manager removed the Encode and Decode buttons. The procedure has become a bit easier.
- I2C Device Scan on uBITX Manager ( Both Character LCD and Nextion LCD are applicable)
- Si5351 I2C Address can be changed
- Recovery using QR-Code Data from Server
- Nextion LCD and TJC LCD can display Spectrum and CW Decode (using Stand alone S-Meter)
- Other Minor Bugs
1.09 (Beta)
- include 1.094 beta, 1.095 beta, 1.097 beta
1.08 1.08
- Receive performance is improved compared to the original firmware or version 1.061 - Receive performance is improved compared to the original firmware or version 1.061
- ATT function has been added to reduce RF gain (Shift 45Mhz IF) - ATT function has been added to reduce RF gain (Shift 45Mhz IF)

View File

@@ -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 The latest version of this library can always be found at
http://arduiniana.org. http://arduiniana.org.
*/ */
#include <arduino.h> #include <Arduino.h>
//================================================================ //================================================================
//Public Variable //Public Variable

View File

@@ -22,21 +22,24 @@
//============================================================================== //==============================================================================
// Compile Option // Compile Option
//============================================================================== //==============================================================================
//Ubitx Board Version
#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. //Depending on the type of LCD mounted on the uBITX, uncomment one of the options below.
//You must select only one. //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 //I2C type 16 x 02 LCD
//#define UBITX_DISPLAY_LCD1602I_DUAL //I2C type 16 x02 LCD Dual //#define UBITX_DISPLAY_LCD1602I_DUAL //I2C type 16 x02 LCD Dual
//#define UBITX_DISPLAY_LCD2004P //24 x 04 LCD (Parallel) //#define UBITX_DISPLAY_LCD2004P //24 x 04 LCD (Parallel)
//#define UBITX_DISPLAY_LCD2004I //I2C type 24 x 04 LCD //#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 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_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 #define I2C_LCD_SECOND_ADDRESS_DEFAULT 0x3F //0x27 //only using Dual LCD Mode
//Select betwen Analog S-Meter and DSP (I2C) Meter //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_GROUP1 //MODE, BAND(-), BAND(+), STEP
//#define EXTEND_KEY_GROUP2 //Numeric (0~9), Point(.), Enter //Not supported in Version 1.0x //#define EXTEND_KEY_GROUP2 //Numeric (0~9), Point(.), Enter //Not supported in Version 1.0x
@@ -330,5 +333,3 @@ extern void DisplayVersionInfo(const char* fwVersionInfo);
extern int GetI2CSmeterValue(int valueType); //ubitx_ui.ino extern int GetI2CSmeterValue(int valueType); //ubitx_ui.ino
#endif //end of if header define #endif //end of if header define

View File

@@ -6,7 +6,7 @@
// So I put + in the sense that it was improved one by one based on Original Firmware. // 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. // This firmware has been gradually changed based on the original firmware created by Farhan, Jack, Jerry and others.
#define FIRMWARE_VERSION_INFO F("+v1.100") #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 #define FIRMWARE_VERSION_NUM 0x04 //1st Complete Project : 1 (Version 1.061), 2st Project : 2, 1.08: 3, 1.09 : 4
/** /**
@@ -72,10 +72,43 @@
// the second oscillator should ideally be at 57 MHz, however, the crystal filter's center frequency // 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 // 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) #if UBITX_BOARD_VERSION == 5
//these are the two default USB and LSB frequencies. The best frequencies depend upon your individual taste and filter shape //For Test //45005000
#define INIT_USB_FREQ (11996500l) //#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)
//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
// limits the tuning and working range of the ubitx between 3 MHz and 30 MHz // limits the tuning and working range of the ubitx between 3 MHz and 30 MHz
#define LOWEST_FREQ (3000000l) #define LOWEST_FREQ (3000000l)
#define HIGHEST_FREQ (30000000l) #define HIGHEST_FREQ (30000000l)
@@ -327,7 +360,7 @@ void setTXFilters(unsigned long freq){
#ifdef USE_CUSTOM_LPF_FILTER #ifdef USE_CUSTOM_LPF_FILTER
freq = freq / 1000000UL; freq = freq / 1000000UL;
for (byte i = 0; i < 7; i++) { for (byte i = 0; i < 7; i++) {
if (freq > CustFilters[i][0]) if (freq >= CustFilters[i][0])
{ {
char aIn = CustFilters[i][1]; char aIn = CustFilters[i][1];
digitalWrite(TX_LPF_A, aIn & 0x01); digitalWrite(TX_LPF_A, aIn & 0x01);
@@ -336,32 +369,60 @@ void setTXFilters(unsigned long freq){
if (isCustomFilter_A7 == 1) if (isCustomFilter_A7 == 1)
{ {
digitalWrite(A7, aIn & 0x08); digitalWrite(10, aIn & 0x08);
digitalWrite(11, aIn & 0x10);
digitalWrite(12, aIn & 0x20);
digitalWrite(13, aIn & 0x40);
} }
return; return;
} }
} //end of for } //end of for
#else #else
if (freq > 21000000L){ // the default filter is with 35 MHz cut-off
digitalWrite(TX_LPF_A, 0); #if UBITX_BOARD_VERSION == 5
digitalWrite(TX_LPF_B, 0); if (freq > 21000000L){ // the default filter is with 35 MHz cut-off
digitalWrite(TX_LPF_C, 0); digitalWrite(TX_LPF_A, 0);
} digitalWrite(TX_LPF_B, 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_C, 0);
digitalWrite(TX_LPF_A, 1); }
digitalWrite(TX_LPF_B, 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_C, 0); digitalWrite(TX_LPF_A, 1);
} digitalWrite(TX_LPF_B, 0);
else if (freq > 7000000L){ digitalWrite(TX_LPF_C, 0);
digitalWrite(TX_LPF_A, 1); }
digitalWrite(TX_LPF_B, 1); else if (freq > 7000000L){
digitalWrite(TX_LPF_C, 0); digitalWrite(TX_LPF_A, 0);
} digitalWrite(TX_LPF_B, 1);
else { digitalWrite(TX_LPF_C, 0);
digitalWrite(TX_LPF_A, 1); }
digitalWrite(TX_LPF_B, 1); else {
digitalWrite(TX_LPF_C, 1); 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 #endif
} }
@@ -442,13 +503,23 @@ void setFrequency(unsigned long f){
moveFrequency = (f % 1000000); 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(2, 44991500 + if1AdjustValue + f);
si5351bx_setfreq(1, 44991500 si5351bx_setfreq(1, 44991500
+ if1AdjustValue + if1AdjustValue
+ SDR_Center_Freq + SDR_Center_Freq
//+ ((advancedFreqOption1 & 0x04) == 0x00 ? 0 : (f % 10000000)) //+ ((advancedFreqOption1 & 0x04) == 0x00 ? 0 : (f % 10000000))
+ moveFrequency + moveFrequency );
+ 2390); //+ 2390); Do not add another SDR because the error is different. V1.3
#endif
} }
else else
{ {
@@ -1156,12 +1227,22 @@ void initSettings(){
if (vfoB_mode < 2) if (vfoB_mode < 2)
vfoB_mode = 3; 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 //original code with modified by kd8cec
if (usbCarrier > 12010000l || usbCarrier < 11990000l) if (usbCarrier > 12010000l || usbCarrier < 11990000l)
usbCarrier = 11997000l; usbCarrier = 11997000l;
if (cwmCarrier > 12010000l || cwmCarrier < 11990000l) if (cwmCarrier > 12010000l || cwmCarrier < 11990000l)
cwmCarrier = 11997000l; cwmCarrier = 11997000l;
#endif
if (vfoA > 35000000l || 3500000l > vfoA) { if (vfoA > 35000000l || 3500000l > vfoA) {
vfoA = 7150000l; vfoA = 7150000l;
@@ -1211,6 +1292,16 @@ void initPorts(){
pinMode(ANALOG_KEYER, INPUT_PULLUP); pinMode(ANALOG_KEYER, INPUT_PULLUP);
pinMode(ANALOG_SMETER, INPUT); //by KD8CEC pinMode(ANALOG_SMETER, INPUT); //by KD8CEC
#ifdef USE_CUSTOM_LPF_FILTER
if (isCustomFilter_A7)
{
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
}
#endif
pinMode(CW_TONE, OUTPUT); pinMode(CW_TONE, OUTPUT);
digitalWrite(CW_TONE, 0); digitalWrite(CW_TONE, 0);

View File

@@ -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 * 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"); printLine2("#2 BFO");
delay(1000); delay(1000);
#if UBITX_BOARD_VERSION == 5
usbCarrier = 11053000l;
menuSetupCarrier(1);
if (usbCarrier == 11053000l){
printLine2("Setup Aborted");
return;
}
#else
usbCarrier = 11994999l; usbCarrier = 11994999l;
menuSetupCarrier(1); menuSetupCarrier(1);
if (usbCarrier == 11994999l){ if (usbCarrier == 11994999l){
printLine2("Setup Aborted"); printLine2("Setup Aborted");
return; return;
} }
#endif
printLine2("#3:Test 3.5MHz"); printLine2("#3:Test 3.5MHz");
cwMode = 0; cwMode = 0;
@@ -88,4 +100,3 @@ void factory_alignment(){
updateDisplay(); updateDisplay();
} }

View File

@@ -1041,7 +1041,7 @@ void SendUbitxData(void)
EEPROM.get(EXTERNAL_DEVICE_OPT1, nextionDisplayOption); EEPROM.get(EXTERNAL_DEVICE_OPT1, nextionDisplayOption);
SendCommandUL(CMD_DISP_OPTION2, nextionDisplayOption); SendCommandUL(CMD_DISP_OPTION2, nextionDisplayOption);
SendCommandStr(CMD_VERSION, (char *)("+v1.100")); //Version SendCommandStr(CMD_VERSION, (char *)("+v1.122")); //Version
SendEEPromData(CMD_CALLSIGN, 0, userCallsignLength -1, 0); SendEEPromData(CMD_CALLSIGN, 0, userCallsignLength -1, 0);
/* /*

View File

@@ -1662,6 +1662,15 @@ void menuSetupCarrier(int btn){
delay_background(1000, 0); delay_background(1000, 0);
//usbCarrier = 11995000l; //Remarked by KD8CEC, Suggest from many user, if entry routine factoryrest //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); si5351bx_setfreq(0, usbCarrier);
printCarrierFreq(usbCarrier); printCarrierFreq(usbCarrier);
@@ -1705,4 +1714,3 @@ void menuSetupCarrier(int btn){
//menuOn = 0; //menuOn = 0;
menuClearExit(0); menuClearExit(0);
} }

View File

@@ -13,6 +13,7 @@
* The output clock channel that controls the frequency is connected to the PLL-B. * 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. * The WSPR protocol is generated by changing the clock of the PLL-B.
************************************************************************************/ ************************************************************************************/
#include "ubitx.h"
// ************* SI5315 routines - tks Jerry Gaffke, KE7ER *********************** // ************* SI5315 routines - tks Jerry Gaffke, KE7ER ***********************
// An minimalist standalone set of Si5351 routines. // 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 // User program may have reason to poke new values into these 3 RAM variables
uint32_t si5351bx_vcoa = (SI5351BX_XTAL*SI5351BX_MSA); // 25mhzXtal calibrate uint32_t si5351bx_vcoa = (SI5351BX_XTAL*SI5351BX_MSA); // 25mhzXtal calibrate
uint8_t si5351bx_rdiv = 0; // 0-7, CLK pin sees fout/(2**rdiv) 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 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 uint8_t si5351bx_clken = 0xFF; // Private, all CLK output drivers off
int32_t calibration = 0; 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 i2cWriten(26, si5351Val, 8); // Write to 8 PLLA msynth regs
i2cWrite(177, 0x20); // Reset PLLA (0x80 resets PLLB) 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 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(40, (P2 & 65280) >> 8);
i2cWrite(41, P2 & 255); i2cWrite(41, P2 & 255);
} }