Compare commits

..

13 Commits

Author SHA1 Message Date
4fd35aea4f Fixed an existing issue with the CEC codebase. Specifically, if using a Nextion display, if EXTEND_KEY_GROUP1 was not set, then the checkButton() function that is compiled did not support the on-screen menu display for legacy uBITX options. The menus would still get activated, but would not display on the Nextion display. Added the #ifdef/#else for USE_SW_SERIAL to the "NOT" EXTEND_KEY_GROUP1 version of checkButton().
Note that there's nothing about this function that requires the keyer implementation.
2022-03-20 09:27:03 -05:00
295b158662 Cleaned up te code a little for the non-analog keyer. Needs to be tested. 2022-03-19 22:19:53 -05:00
89af919e42 fix for something or other. 2022-03-17 17:28:58 -05:00
4765ab5a22 Modified to use two digital lines (11, 12) for dot/dash keyer inputs, instead of using analogRead() on a shared pin. Compiles; haven't tested. 2022-03-14 23:46:50 -05:00
53c3f0e0bf quick checkin so I can look at another branch 2022-03-14 17:15:13 -05:00
Rob French
295c49969f Updated the README.md with a KC4UPR note. I will now be creating a kc4upr branch. 2020-10-28 13:50:39 -05:00
phdlee
262ef3947a Merge pull request #46 from phdlee/version1.20
changed version number for nextion lcd protocol
2019-04-06 16:38:44 +09:00
phdlee
a4d9f6e6c5 changed version number for nextion lcd protocol 2019-04-06 16:35:46 +09:00
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
9 changed files with 239 additions and 57 deletions

View File

@@ -1,6 +1,15 @@
#KC4UPR'S NOTE
----------------------------------------------------------------------------
This is a fork of the KD8CEC firmware that will be specific to my uBITX V5
installation. My intent is to remove unnecessary code, as well as make some
GPIO changes based on my use of the Nextion LCD. Specifically, I'd like to
eliminate the use of analog I/O for reading the CW keys, and possibly enable
control of accessories such as filters using the extra GPIO pins that are
now available.
#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 +26,17 @@ 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 1.1
- Support Nextion LCD, TJC LCD - Support Nextion LCD, TJC LCD
- Read & Backup uBITX, ADC Monitoring, ATT, IF-Shift and more on Nextion LCD (TJC LCD) - Read & Backup uBITX, ADC Monitoring, ATT, IF-Shift and more on Nextion LCD (TJC LCD)

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,6 +22,9 @@
//============================================================================== //==============================================================================
// 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)
@@ -38,7 +41,10 @@
//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 // Use alternate keyer?
#define USE_ALTKEYER
//#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
//Custom LPF Filter Mod //Custom LPF Filter Mod
@@ -55,6 +61,7 @@ extern byte I2C_LCD_SECOND_ADDRESS; //only using Dual LCD Mode
//============================================================================== //==============================================================================
// User Select feather list // User Select feather list
//============================================================================== //==============================================================================
/*
//Enable all features //Enable all features
#define FN_BAND 1 //592 #define FN_BAND 1 //592
#define FN_VFO_TOGGLE 1 //78 #define FN_VFO_TOGGLE 1 //78
@@ -78,7 +85,7 @@ extern byte I2C_LCD_SECOND_ADDRESS; //only using Dual LCD Mode
#define FN_KEYTYPE 1 //168 #define FN_KEYTYPE 1 //168
#define FN_ADCMONITOR 1 //516 #define FN_ADCMONITOR 1 //516
#define FN_TXONOFF 1 //58 #define FN_TXONOFF 1 //58
*/
/* /*
//Test Configuration (88%) //Test Configuration (88%)
#define FN_BAND 0 //592 #define FN_BAND 0 //592
@@ -104,7 +111,6 @@ extern byte I2C_LCD_SECOND_ADDRESS; //only using Dual LCD Mode
#define FN_ADCMONITOR 1 //516 #define FN_ADCMONITOR 1 //516
#define FN_TXONOFF 1 //58 #define FN_TXONOFF 1 //58
*/ */
/* /*
//Recommended Character LCD Developer 87% //Recommended Character LCD Developer 87%
#define FN_BAND 1 //592 #define FN_BAND 1 //592
@@ -131,7 +137,6 @@ extern byte I2C_LCD_SECOND_ADDRESS; //only using Dual LCD Mode
#define FN_TXONOFF 1 //58 #define FN_TXONOFF 1 //58
*/ */
/*
//Recommended for Nextion, TJC LCD 88% //Recommended for Nextion, TJC LCD 88%
#define FN_BAND 1 //600 #define FN_BAND 1 //600
#define FN_VFO_TOGGLE 1 //90 #define FN_VFO_TOGGLE 1 //90
@@ -155,7 +160,7 @@ extern byte I2C_LCD_SECOND_ADDRESS; //only using Dual LCD Mode
#define FN_KEYTYPE 0 //294 #define FN_KEYTYPE 0 //294
#define FN_ADCMONITOR 0 //526 //not available with Nextion or Serial UI #define FN_ADCMONITOR 0 //526 //not available with Nextion or Serial UI
#define FN_TXONOFF 1 //70 #define FN_TXONOFF 1 //70
*/
//============================================================================== //==============================================================================
// End of User Select Mode and Compil options // End of User Select Mode and Compil options
//============================================================================== //==============================================================================
@@ -216,6 +221,12 @@ extern byte I2C_LCD_SECOND_ADDRESS; //only using Dual LCD Mode
#define ANALOG_SPARE (A7) #define ANALOG_SPARE (A7)
#define ANALOG_SMETER (A7) //by KD8CEC #define ANALOG_SMETER (A7) //by KD8CEC
#ifdef USE_ALTKEYER
#define DIGITAL_DOT (12)
#define DIGITAL_DASH (11)
#define DIGITAL_KEY (A3)
#endif
/** /**
* The second set of 16 pins on the Raduino's bottom connector are have the three clock outputs and the digital lines to control the rig. * The second set of 16 pins on the Raduino's bottom connector are have the three clock outputs and the digital lines to control the rig.
* This assignment is as follows : * This assignment is as follows :
@@ -330,5 +341,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.110") #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)
@@ -345,26 +378,51 @@ void setTXFilters(unsigned long freq){
} }
} //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
} }
@@ -445,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
{ {
@@ -735,8 +803,16 @@ void checkButton(){
delay(50); delay(50);
if (!btnDown()) //debounce if (!btnDown()) //debounce
return; return;
//for touch screen
#ifdef USE_SW_SERIAL
SetSWActivePage(1);
doMenu();
if (isCWAutoMode == 0)
SetSWActivePage(0);
#else
doMenu(); doMenu();
#endif
//wait for the button to go up again //wait for the button to go up again
while(btnDown()) { while(btnDown()) {
@@ -1159,12 +1235,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;
@@ -1214,6 +1300,12 @@ 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_ALTKEYER
pinMode(DIGITAL_DOT, INPUT_PULLUP);
pinMode(DIGITAL_DASH, INPUT_PULLUP);
if (DIGITAL_KEY != PTT) pinMode(DIGITAL_KEY, INPUT_PULLUP);
#endif
#ifdef USE_CUSTOM_LPF_FILTER #ifdef USE_CUSTOM_LPF_FILTER
if (isCustomFilter_A7) if (isCustomFilter_A7)
{ {
@@ -1382,6 +1474,13 @@ void checkAutoSaveFreqMode()
void loop(){ void loop(){
if (isCWAutoMode == 0){ //when CW AutoKey Mode, disable this process if (isCWAutoMode == 0){ //when CW AutoKey Mode, disable this process
#ifdef USE_ALTKEYER
// when using the alternate keyer, don't check the PTT if we're in CW mode--assuming the pin is the same as PTT
if (DIGITAL_KEY == PTT) {
if (!txCAT && (cwMode == 0))
checkPTT();
} else
#endif
if (!txCAT) if (!txCAT)
checkPTT(); checkPTT();
checkButton(); checkButton();

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

@@ -38,7 +38,21 @@
char lastPaddle = 0; char lastPaddle = 0;
//reads the analog keyer pin and reports the paddle //reads the analog keyer pin and reports the paddle
byte getPaddle(){ byte getPaddle() {
#ifdef USE_ALTKEYER
// Alternate keyer
if ((DIGITAL_KEY != PTT) || ((DIGITAL_KEY == PTT) && (cwMode > 0))) {
if (digitalRead(DIGITAL_KEY) == LOW) {
return PADDLE_STRAIGHT;
}
}
// paddles work whether or not CW mode is actually selected
int rv = 0;
rv |= digitalRead(DIGITAL_DOT) == LOW ? PADDLE_DOT : 0;
rv |= digitalRead(DIGITAL_DASH) == LOW ? PADDLE_DASH : 0;
return rv;
#else
int paddle = analogRead(ANALOG_KEYER); int paddle = analogRead(ANALOG_KEYER);
if (paddle > 800) // above 4v is up if (paddle > 800) // above 4v is up
@@ -52,6 +66,7 @@ byte getPaddle(){
return PADDLE_BOTH; //both are between 1 and 2v return PADDLE_BOTH; //both are between 1 and 2v
else else
return PADDLE_STRAIGHT; //less than 1v is the straight key return PADDLE_STRAIGHT; //less than 1v is the straight key
#endif
} }
/** /**
@@ -97,8 +112,21 @@ unsigned char keyerState = IDLE;
//create by KD8CEC for compatible with new CW Logic //create by KD8CEC for compatible with new CW Logic
char update_PaddleLatch(byte isUpdateKeyState) { char update_PaddleLatch(byte isUpdateKeyState) {
unsigned char tmpKeyerControl = 0; unsigned char tmpKeyerControl = 0;
int paddle = analogRead(ANALOG_KEYER);
#ifdef USE_ALTKEYER
// One big note... I have no idea how debounce does or doesn't affect this... but there is no debounce right now. It's conceivable
// that the normal uBITX use of an analog input for this masks bouncing...
if ((digitalRead(DIGITAL_DASH) == LOW)) tmpKeyerControl |= DAH_L;
if (Iambic_Key) {
if (digitalRead(DIGITAL_DOT) == LOW) tmpKeyerControl |= DIT_L;
} else {
// I really would like to have the PTT (during CW mode) just result in key down regardless of Iambic, but this doesn't do that yet...
if ((DIGITAL_KEY != PTT) || ((DIGITAL_KEY == PTT) && (cwMode > 0))) {
if (digitalRead(DIGITAL_KEY) == LOW) tmpKeyerControl |= DAH_L;
}
}
#else
int paddle = analogRead(ANALOG_KEYER);
if (paddle >= cwAdcDashFrom && paddle <= cwAdcDashTo) if (paddle >= cwAdcDashFrom && paddle <= cwAdcDashTo)
tmpKeyerControl |= DAH_L; tmpKeyerControl |= DAH_L;
else if (paddle >= cwAdcDotFrom && paddle <= cwAdcDotTo) else if (paddle >= cwAdcDotFrom && paddle <= cwAdcDotTo)
@@ -111,9 +139,10 @@ char update_PaddleLatch(byte isUpdateKeyState) {
tmpKeyerControl = 0 ; tmpKeyerControl = 0 ;
else if (paddle >= cwAdcSTFrom && paddle <= cwAdcSTTo) else if (paddle >= cwAdcSTFrom && paddle <= cwAdcSTTo)
tmpKeyerControl = DIT_L ; tmpKeyerControl = DIT_L ;
else else
tmpKeyerControl = 0 ; tmpKeyerControl = 0 ;
} }
#endif
if (isUpdateKeyState == 1) if (isUpdateKeyState == 1)
keyerControl |= tmpKeyerControl; keyerControl |= tmpKeyerControl;
@@ -224,10 +253,9 @@ void cwKeyer(void){
Check_Cat(2); Check_Cat(2);
} //end of while } //end of while
} } else {
else{
while(1){ while(1){
if (update_PaddleLatch(0) == DIT_L) { if (update_PaddleLatch(0) == DAH_L) {
// if we are here, it is only because the key is pressed // if we are here, it is only because the key is pressed
if (!inTx){ if (!inTx){
//DelayTime Option //DelayTime Option
@@ -239,7 +267,7 @@ void cwKeyer(void){
} }
cwKeydown(); cwKeydown();
while ( update_PaddleLatch(0) == DIT_L ) while ( update_PaddleLatch(0) == DAH_L )
delay_background(1, 3); delay_background(1, 3);
cwKeyUp(); cwKeyUp();
@@ -365,5 +393,3 @@ void cwKeyer(){
} }
} }
*/ */

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.110")); //Version SendCommandStr(CMD_VERSION, (char *)("+v1.200")); //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);
} }