diff --git a/ubitx_20/ubitx_20.ino b/ubitx_20/ubitx_20.ino index a130eb4..2beacab 100644 --- a/ubitx_20/ubitx_20.ino +++ b/ubitx_20/ubitx_20.ino @@ -408,7 +408,6 @@ void saveBandFreqByIndex(unsigned long f, unsigned long mode, char bandIndex) { When the delay is used, the program will generate an error because it is not communicating, so Create a new delay function that can do background processing. */ - unsigned long delayBeforeTime = 0; byte delay_background(unsigned delayTime, byte fromType){ //fromType : 4 autoCWKey -> Check Paddle delayBeforeTime = millis(); @@ -526,7 +525,6 @@ void setFrequency(unsigned long f){ * put the uBitx in tx mode. It takes care of rit settings, sideband settings * Note: In cw mode, doesnt key the radio, only puts it in tx mode */ - void startTx(byte txMode, byte isDisplayUpdate){ //Check Hamband only TX //Not found Hamband index by now frequency if (tuneTXType >= 100 && getIndexHambanBbyFreq(ritOn ? ritTxFrequency : frequency) == -1) { @@ -682,7 +680,7 @@ void checkButton(){ delay(10); Check_Cat(0); } - delay(50);//debounce + //delay(50);//debounce } @@ -697,7 +695,7 @@ int encodedSumValue = 0; unsigned long lastTunetime = 0; //if continous moving, skip threshold processing byte lastMovedirection = 0; //0 : stop, 1 : cw, 2 : ccw -#define skipThresholdTime 100 +//#define skipThresholdTime 70 #define encodeTimeOut 1000 void doTuningWithThresHold(){ @@ -726,7 +724,9 @@ void doTuningWithThresHold(){ encodedSumValue += (s > 0 ? 1 : -1); //check threshold and operator actions (hold dial speed = continous moving, skip threshold check) - if ((lastTunetime < millis() - skipThresholdTime) && ((encodedSumValue * encodedSumValue) <= (threshold * threshold))) + //not use continues changing by Threshold + //if ((lastTunetime < (millis() - skipThresholdTime)) && ((encodedSumValue * encodedSumValue) <= (threshold * threshold))) + if (((encodedSumValue * encodedSumValue) <= (threshold * threshold))) return; lastTunetime = millis(); @@ -736,7 +736,8 @@ void doTuningWithThresHold(){ prev_freq = frequency; //incdecValue = tuningStep * s; - frequency += (arTuneStep[tuneStepIndex -1] * s * (s * s < 10 ? 1 : 3)); //appield weight (s is speed) + //frequency += (arTuneStep[tuneStepIndex -1] * s * (s * s < 10 ? 1 : 3)); //appield weight (s is speed) + frequency += (arTuneStep[tuneStepIndex -1] * s); //appield weight (s is speed) //if want need more increase size, change step size if (prev_freq < 10000000l && frequency > 10000000l) isUSB = true; @@ -757,16 +758,15 @@ void doRIT(){ if (knob < 0) frequency -= (arTuneStep[tuneStepIndex -1]); // - //frequency -= 100l; else if (knob > 0) frequency += (arTuneStep[tuneStepIndex -1]); // - //frequency += 100; if (old_freq != frequency){ setFrequency(frequency); updateDisplay(); } } + /* save Frequency and mode to eeprom for Auto Save with protected eeprom cycle, by kd8cec */ @@ -1060,7 +1060,6 @@ void initSettings(){ } void initPorts(){ - analogReference(DEFAULT); //?? @@ -1110,7 +1109,7 @@ void setup() //Serial.begin(9600); lcd.begin(16, 2); - printLineF(1, F("CECBT v1.03")); + printLineF(1, F("CECBT v1.04")); Init_Cat(38400, SERIAL_8N1); initMeter(); //not used in this build diff --git a/ubitx_20/ubitx_idle.ino b/ubitx_20/ubitx_idle.ino index 178dcdf..663a291 100644 --- a/ubitx_20/ubitx_idle.ino +++ b/ubitx_20/ubitx_idle.ino @@ -31,12 +31,15 @@ void updateLine2Buffer(char isDirectCall) { if (ritOn) { + strcpy(line2Buffer, "RitTX:"); + /* line2Buffer[0] = 'R'; line2Buffer[1] = 'i'; line2Buffer[2] = 't'; line2Buffer[3] = 'T'; line2Buffer[4] = 'X'; line2Buffer[5] = ':'; + */ //display frequency tmpFreq = ritTxFrequency; @@ -61,12 +64,10 @@ void updateLine2Buffer(char isDirectCall) if (vfoActive == VFO_B) { tmpFreq = vfoA; - //line2Buffer[0] = 'A'; } else { tmpFreq = vfoB; - //line2Buffer[0] = 'B'; } // EXAMPLE 1 & 2 @@ -133,16 +134,18 @@ void updateLine2Buffer(char isDirectCall) line2Buffer[8] = 'I'; line2Buffer[9] = 'F'; - if (ifShiftValue == 0) - { + //if (ifShiftValue == 0) + //{ + /* line2Buffer[10] = 'S'; line2Buffer[11] = ':'; line2Buffer[12] = 'O'; line2Buffer[13] = 'F'; line2Buffer[14] = 'F'; - } - else - { + */ + //} + //else + //{ line2Buffer[10] = ifShiftValue >= 0 ? '+' : 0; line2Buffer[11] = 0; line2Buffer[12] = ' '; @@ -151,7 +154,7 @@ void updateLine2Buffer(char isDirectCall) memset(b, 0, sizeof(b)); ltoa(ifShiftValue, b, DEC); strncat(line2Buffer, b, 5); - } + //} if (isDirectCall == 1) //if call by encoder (not scheduler), immediate print value printLine2(line2Buffer); diff --git a/ubitx_20/ubitx_menu.ino b/ubitx_20/ubitx_menu.ino index d4011a3..c531305 100644 --- a/ubitx_20/ubitx_menu.ino +++ b/ubitx_20/ubitx_menu.ino @@ -56,7 +56,7 @@ void menuBand(int btn){ return; } - printLineF2(F("Press to confirm")); + //printLineF2(F("Press to confirm")); //wait for the button menu select button to be lifted) while (btnDown()) { delay_background(50, 0); @@ -72,9 +72,9 @@ void menuBand(int btn){ } delay_background(1000, 0); printLine2ClearAndUpdate(); - printLineF2(F("Press to confirm")); } } + printLineF2(F("Press to confirm")); char currentBandIndex = -1; //Save Band Information @@ -92,7 +92,6 @@ void menuBand(int btn){ ritDisable(); while(!btnDown()){ - knob = enc_read(); if (knob != 0){ if (tuneTXType == 2 || tuneTXType == 3 || tuneTXType == 102 || tuneTXType == 103) { //only ham band move @@ -127,17 +126,7 @@ void menuBand(int btn){ delay_background(20, 0); } -/* - while(btnDown()) { - delay(50); - Check_Cat(0); //To prevent disconnections - } -*/ FrequencyToVFO(1); - - //printLine2ClearAndUpdate(); - //delay_background(500, 0); - //menuOn = 0; menuClearExit(500); } @@ -181,25 +170,6 @@ void byteToMode(byte modeValue, byte autoSetModebyFreq){ } } -/* -//Convert Number to Mode by KD8CEC -void byteWithFreqToMode(byte modeValue){ - if (modeValue == 4) - cwMode = 1; - else if (modeValue == 5) - cwMode = 2; - else { - cwMode = 0; - if (modeValue == 3) - isUSB = 1; - else if (modeValue == 0) //Not Set - isUSB = (frequency > 10000000l) ? true : false; - else - isUSB = 0; - } -} -*/ - //IF Shift function, BFO Change like RIT, by KD8CEC void menuIFSSetup(int btn){ int knob = 0; @@ -212,11 +182,7 @@ void menuIFSSetup(int btn){ printLineF2(F("IF Shift:Off, On?")); } else { - //if (isIFShift == 0){ - //printLineF2(F("IF Shift is ON")); - //delay_background(500, 0); isIFShift = 1; - //} delay_background(500, 0); updateLine2Buffer(1); @@ -255,7 +221,7 @@ void menuIFSSetup(int btn){ isIFShift = 0; printLineF2(F("IF Shift is OFF")); setFrequency(frequency); - delay_background(500, 0); + delay_background(1500, 0); } //menuOn = 0; @@ -343,17 +309,12 @@ void menuSelectMode(int btn){ si5351bx_setfreq(0, cwmCarrier + (isIFShift ? ifShiftValue : 0)); //set back the carrier oscillator anyway, cw tx switches it off setFrequency(frequency); - - //delay_background(500, 0); - //printLine2ClearAndUpdate(); - //menuOn = 0; menuClearExit(500); } } //Memory to VFO, VFO to Memory by KD8CEC -//select between MtoV and VtoM by isMemoryToVfo void menuCHMemory(int btn, byte isMemoryToVfo){ int knob = 0; int selectChannel = 0; @@ -407,10 +368,6 @@ void menuCHMemory(int btn, byte isMemoryToVfo){ strcat(c, b); //append channel Number; strcat(c, " :"); //append channel Number; } - /* - if (selectChannel < 10) - printLineFromEEPRom(0, 4, 0, userCallsignLength -1); //eeprom to lcd use offset (USER_CALLSIGN_DAT) - */ //display frequency tmpFreq = resultFreq; @@ -624,25 +581,16 @@ void menuVfoToggle(int btn) FrequencyToVFO(1); if (vfoActive == VFO_B){ - //vfoB = frequency; - //vfoB_mode = modeToByte(); - //storeFrequencyAndMode(2); //vfoB -> eeprom - vfoActive = VFO_A; frequency = vfoA; saveCheckFreq = frequency; byteToMode(vfoA_mode, 0); } else { - //vfoA = frequency; - //vfoA_mode = modeToByte(); - //storeFrequencyAndMode(1); //vfoA -> eeprom - vfoActive = VFO_B; frequency = vfoB; saveCheckFreq = frequency; byteToMode(vfoB_mode, 0); - //printLineF2(F("Selected VFO B")); } ritDisable(); @@ -661,12 +609,12 @@ void menuRitToggle(int btn){ } else { if (ritOn == 0){ - printLineF2(F("RIT is ON")); + //printLineF2(F("RIT is ON")); //enable RIT so the current frequency is used at transmit ritEnable(frequency); } else{ - printLineF2(F("RIT is OFF")); + //printLineF2(F("RIT is OFF")); ritDisable(); } @@ -694,9 +642,6 @@ void menuSplitOnOff(int btn){ printLineF2(F("Split On!")); } - //delay_background(500, 0); - //printLine2ClearAndUpdate(); - //menuOn = 0; menuClearExit(500); } } @@ -721,9 +666,6 @@ void menuTxOnOff(int btn, byte optionType){ printLineF2(F("TX ON!")); } - //delay_background(500, 0); - //printLine2ClearAndUpdate(); - //menuOn = 0; menuClearExit(500); } } @@ -751,9 +693,6 @@ void menuSetup(int btn){ } */ - //delay_background(2000, 0); - //printLine2Clear(); - //menuOn = 0; menuClearExit(1000); } } @@ -803,23 +742,18 @@ void menuCWSpeed(int btn){ printLine2(b); } //abort if this button is down - if (btnDown()) - //re-enable the clock1 and clock 2 - break; + //if (btnDown()) + //re-enable the clock1 and clock 2 + // break; Check_Cat(0); //To prevent disconnections } - //save the setting - //if (digitalRead(PTT) == LOW){ - printLineF2(F("CW Speed set!")); - cwSpeed = 1200/wpm; - EEPROM.put(CW_SPEED, cwSpeed); - //} - //delay_background(2000, 0); - //printLine2ClearAndUpdate(); - //menuOn = 0; - menuClearExit(1000); + //save the setting + //printLineF2(F("CW Speed set!")); + cwSpeed = 1200 / wpm; + EEPROM.put(CW_SPEED, cwSpeed); + menuClearExit(1000); } //Builtin CW Keyer Logic by KD8CEC @@ -884,14 +818,9 @@ void menuSetupCwDelay(int btn){ } //save the setting - //if (digitalRead(PTT) == LOW){ - printLineF2(F("CW Delay set!")); - cwDelayTime = tmpCWDelay / 10; - EEPROM.put(CW_DELAY, cwDelayTime); - //delay_background(2000, 0); - //} - //printLine2ClearAndUpdate(); - //menuOn = 0; + //printLineF2(F("CW Delay set!")); + cwDelayTime = tmpCWDelay / 10; + EEPROM.put(CW_DELAY, cwDelayTime); menuClearExit(1000); } @@ -940,21 +869,17 @@ void menuSetupTXCWInterval(int btn){ needDisplayInformation = 1; } //abort if this button is down - if (btnDown()) - break; + //if (btnDown()) + // break; Check_Cat(0); //To prevent disconnections } //save the setting - //if (digitalRead(PTT) == LOW){ - printLineF2(F("CW Start set!")); - delayBeforeCWStartTime = tmpTXCWInterval / 2; - EEPROM.put(CW_START, delayBeforeCWStartTime); - //delay_background(2000, 0); - //} - //printLine2ClearAndUpdate(); - //menuOn = 0; + //printLineF2(F("CW Start set!")); + delayBeforeCWStartTime = tmpTXCWInterval / 2; + EEPROM.put(CW_START, delayBeforeCWStartTime); + menuClearExit(1000); } @@ -1215,8 +1140,6 @@ void menuSetupCWCarrier(int btn){ si5351bx_setfreq(0, cwmCarrier); printCarrierFreq(cwmCarrier); - //Check_Cat(0); //To prevent disconnections - //delay(100); delay_background(100, 0); } @@ -1235,8 +1158,6 @@ void menuSetupCWCarrier(int btn){ si5351bx_setfreq(0, cwmCarrier); //set back the carrier oscillator anyway, cw tx switches it off setFrequency(frequency); - //printLine2ClearAndUpdate(); - //menuOn = 0; menuClearExit(0); } @@ -1284,8 +1205,6 @@ void menuSetupCwTone(int btn){ else sideTone = prev_sideTone; - //printLine2ClearAndUpdate(); - //menuOn = 0; menuClearExit(0); } @@ -1298,15 +1217,7 @@ void setDialLock(byte tmpLock, byte fromMode) { if (fromMode == 2 || fromMode == 3) return; - //for reduce using flash memory - /* - if (tmpLock == 1) - printLineF2(F("Dial Lock ON")); - else - printLineF2(F("Dial Lock OFF")); - */ - - delay_background(1000, 0); + //delay_background(1000, 0); printLine2ClearAndUpdate(); } @@ -1382,8 +1293,6 @@ void doMenu(){ } } //end of while - //printLineF2(F("Changed Step!")); //remarked for reduce program memory by KD8CEC - //SAVE EEPROM EEPROM.put(TUNING_STEP, tuneStepIndex); delay_background(500, 0); printLine2ClearAndUpdate(); @@ -1433,6 +1342,8 @@ void doMenu(){ menuSetup(btnState); else if (select < 120) menuExit(btnState); + + /* else if (select < 130 && modeCalibrate) menuSetupCalibration(btnState); //crystal else if (select < 140 && modeCalibrate) @@ -1453,14 +1364,40 @@ void doMenu(){ menuTxOnOff(btnState, 0x01); //TX OFF / ON else if (select < 220 && modeCalibrate) menuExit(btnState); + */ + + else if (modeCalibrate) + { + if (select < 130) + menuSetupCalibration(btnState); //crystal + else if (select < 140) + menuSetupCarrier(btnState); //lsb + else if (select < 150) + menuSetupCWCarrier(btnState); //lsb + else if (select < 160) + menuSetupCwTone(btnState); + else if (select < 170) + menuSetupCwDelay(btnState); + else if (select < 180) + menuSetupTXCWInterval(btnState); + else if (select < 190) + menuSetupKeyType(btnState); + else if (select < 200) + menuADCMonitor(btnState); + else if (select < 210) + menuTxOnOff(btnState, 0x01); //TX OFF / ON + else if (select < 220) + menuExit(btnState); + } Check_Cat(0); //To prevent disconnections } +/* //debounce the button while(btnDown()){ delay_background(50, 0); //To prevent disconnections } - //delay(50); +*/ } diff --git a/ubitx_20/ubitx_si5351.ino b/ubitx_20/ubitx_si5351.ino index 8098819..6d16af2 100644 --- a/ubitx_20/ubitx_si5351.ino +++ b/ubitx_20/ubitx_si5351.ino @@ -60,6 +60,7 @@ void i2cWriten(uint8_t reg, uint8_t *vals, uint8_t vcnt) { // write array Wire.endTransmission(); } +uint8_t si5351Val[8] = {0, 1, 0, 0, 0, 0, 0, 0}; //for reduce program memory size void si5351bx_init() { // Call once at power-up, start PLLA uint32_t msxp1; @@ -68,11 +69,13 @@ void si5351bx_init() { // Call once at power-up, start PLLA i2cWrite(3, si5351bx_clken); // Disable all CLK output drivers i2cWrite(183, SI5351BX_XTALPF << 6); // Set 25mhz crystal load capacitance msxp1 = 128 * SI5351BX_MSA - 512; // and msxp2=0, msxp3=1, not fractional - uint8_t vals[8] = {0, 1, BB2(msxp1), BB1(msxp1), BB0(msxp1), 0, 0, 0}; - i2cWriten(26, vals, 8); // Write to 8 PLLA msynth regs + //uint8_t vals[8] = {0, 1, BB2(msxp1), BB1(msxp1), BB0(msxp1), 0, 0, 0}; + si5351Val[2] = BB2(msxp1); + si5351Val[3] = BB1(msxp1); + si5351Val[4] = BB0(msxp1); + + i2cWriten(26, si5351Val, 8); // Write to 8 PLLA msynth regs i2cWrite(177, 0x20); // Reset PLLA (0x80 resets PLLB) - // for (reg=16; reg<=23; reg++) i2cWrite(reg, 0x80); // Powerdown CLK's - // i2cWrite(187, 0); // No fannout of clkin, xtal, ms0, ms4 } void si5351bx_setfreq(uint8_t clknum, uint32_t fout) { // Set a CLK to fout Hz diff --git a/ubitx_20/ubitx_ui.ino b/ubitx_20/ubitx_ui.ino index 56ccdbe..ad55426 100644 --- a/ubitx_20/ubitx_ui.ino +++ b/ubitx_20/ubitx_ui.ino @@ -327,22 +327,6 @@ void updateDisplay() { lcd.setCursor(5,diplayVFOLine); lcd.write(":"); } - -/* - //now, the second line - memset(c, 0, sizeof(c)); - memset(b, 0, sizeof(b)); - - if (inTx) - strcat(c, "TX "); - else if (ritOn) - strcpy(c, "RIT"); - - strcpy(c, " \xff"); - drawMeter(meter_reading); - strcat(c, meter); - strcat(c, "\xff"); - printLine2(c);*/ } int enc_prev_state = 3;