Compare commits

...

15 Commits

Author SHA1 Message Date
phdlee
fb2c9d2cc3 Optimized from Version1.03 2018-03-05 12:51:14 +09:00
phdlee
bf68dd6c26 Change Version Number 2018-02-22 13:27:51 +09:00
phdlee
4a6909f361 Change BFO Cal Step(50 to 5), Change CW Frequency Method 2018-02-22 12:26:18 +09:00
phdlee
e0f9148972 Change RIT tune step (freq tune step) 2018-02-13 19:54:19 +09:00
phdlee
81333e7af4 modified CW Key Logic for AutoKey and reduce cpu use rate, reduce program memory 2018-02-10 15:07:56 +09:00
phdlee
ed767f2e34 CW Start Delay applied New CW Logic 2018-02-10 13:29:30 +09:00
phdlee
1e9576ddc2 fixed cat with cw key (IA, IB) 2018-02-09 01:11:48 +09:00
phdlee
a7684284d2 write eeprom cycle test and reconvery 2018-02-08 12:45:54 +09:00
phdlee
3b4aaa664c version0.35 2018-02-06 16:13:05 +09:00
phdlee
14888bb7d7 change channel name display code 2018-02-05 16:46:37 +09:00
phdlee
57cd385b8a add vfo to channel, channel to vfo 2018-02-05 15:07:25 +09:00
phdlee
60777178a8 TX Check in auto keysend 2018-02-03 17:07:11 +09:00
phdlee
dd68b38454 Optimize codes 2018-02-03 16:35:27 +09:00
phdlee
d229a10092 change tune step size and fixed bug 2018-02-02 20:49:00 +09:00
phdlee
3d019cdd44 change IF Shift Step 1 -> 50Hz 2018-01-31 17:53:20 +09:00
8 changed files with 595 additions and 537 deletions

View File

@@ -109,7 +109,8 @@ void CatSetFreq(byte fromType)
//#define BCD_LEN 9 //#define BCD_LEN 9
//PROTOCOL : 0x03 //PROTOCOL : 0x03
//Computer <-(frequency)-> TRCV CAT_BUFF //Computer <-(frequency)-> TRCV CAT_BUFF
void CatGetFreqMode(unsigned long freq, byte fromType) //void CatGetFreqMode(unsigned long freq, byte fromType)
void CatGetFreqMode(unsigned long freq) //for remove warning messages
{ {
int i; int i;
byte tmpValue; byte tmpValue;
@@ -149,15 +150,21 @@ void CatGetFreqMode(unsigned long freq, byte fromType)
SendCatData(5); SendCatData(5);
} }
void CatSetSplit(boolean isSplit, byte fromType) //void CatSetSplit(boolean isSplit, byte fromType)
void CatSetSplit(boolean isSplit) //for remove warning messages
{ {
if (isSplit)
splitOn = 1;
else
splitOn = 0;
Serial.write(ACK); Serial.write(ACK);
} }
void CatSetPTT(boolean isPTTOn, byte fromType) void CatSetPTT(boolean isPTTOn, byte fromType)
{ {
if (fromType == 2 || fromType == 3) { //
if ((!inTx) && (fromType == 2 || fromType == 3)) {
Serial.write(ACK); Serial.write(ACK);
return; return;
} }
@@ -193,7 +200,7 @@ void CatSetPTT(boolean isPTTOn, byte fromType)
void CatVFOToggle(boolean isSendACK, byte fromType) void CatVFOToggle(boolean isSendACK, byte fromType)
{ {
if (fromType != 2 && fromType != 3) { if (fromType != 2 && fromType != 3) {
menuVfoToggle(1, 0); menuVfoToggle(1);
} }
if (isSendACK) if (isSendACK)
@@ -232,7 +239,8 @@ void CatSetMode(byte tmpMode, byte fromType)
} }
//Read EEProm by uBITX Manager Software //Read EEProm by uBITX Manager Software
void ReadEEPRom(byte fromType) //void ReadEEPRom(byte fromType)
void ReadEEPRom() //for remove warnings.
{ {
//5BYTES //5BYTES
//CAT_BUFF[0] [1] [2] [3] [4] //4 COMMAND //CAT_BUFF[0] [1] [2] [3] [4] //4 COMMAND
@@ -255,7 +263,8 @@ void ReadEEPRom(byte fromType)
} }
//Write just proecess 1byes //Write just proecess 1byes
void WriteEEPRom(byte fromType) //void WriteEEPRom(byte fromType)
void WriteEEPRom(void) //for remove warning
{ {
//5BYTES //5BYTES
uint16_t eepromStartIndex = CAT_BUFF[0] + CAT_BUFF[1] * 256; uint16_t eepromStartIndex = CAT_BUFF[0] + CAT_BUFF[1] * 256;
@@ -275,7 +284,8 @@ void WriteEEPRom(byte fromType)
} }
} }
void ReadEEPRom_FT817(byte fromType) //void ReadEEPRom_FT817(byte fromType)
void ReadEEPRom_FT817(void) //for remove warnings
{ {
byte temp0 = CAT_BUFF[0]; byte temp0 = CAT_BUFF[0];
byte temp1 = CAT_BUFF[1]; byte temp1 = CAT_BUFF[1];
@@ -601,7 +611,8 @@ void WriteEEPRom_FT817(byte fromType)
Serial.write(ACK); Serial.write(ACK);
} }
void CatRxStatus(byte fromType) //void CatRxStatus(byte fromType)
void CatRxStatus(void) //for remove warning
{ {
byte sMeterValue = 1; byte sMeterValue = 1;
@@ -621,7 +632,8 @@ void CatRxStatus(byte fromType)
} }
void CatTxStatus(byte fromType) //void CatTxStatus(byte fromType)
void CatTxStatus(void) //for remove warning
{ {
boolean isHighSWR = false; boolean isHighSWR = false;
boolean isSplitOn = false; boolean isSplitOn = false;
@@ -722,11 +734,11 @@ void Check_Cat(byte fromType)
case 0x02 : //Split On case 0x02 : //Split On
case 0x82: //Split Off case 0x82: //Split Off
CatSetSplit(CAT_BUFF[4] == 0x02, fromType); CatSetSplit(CAT_BUFF[4] == 0x02);
break; break;
case 0x03 : //Read Frequency and mode case 0x03 : //Read Frequency and mode
CatGetFreqMode(frequency, fromType); CatGetFreqMode(frequency);
break; break;
case 0x07 : //Set Operating Mode case 0x07 : //Set Operating Mode
@@ -743,24 +755,24 @@ void Check_Cat(byte fromType)
break; break;
case 0xDB: //Read uBITX EEPROM Data case 0xDB: //Read uBITX EEPROM Data
ReadEEPRom(fromType); //Call by uBITX Manager Program ReadEEPRom(); //Call by uBITX Manager Program
break; break;
case 0xBB: //Read FT-817 EEPROM Data (for comfirtable) case 0xBB: //Read FT-817 EEPROM Data (for comfirtable)
ReadEEPRom_FT817(fromType); ReadEEPRom_FT817();
break; break;
case 0xDC: //Write uBITX EEPROM Data case 0xDC: //Write uBITX EEPROM Data
WriteEEPRom(fromType); //Call by uBITX Manager Program WriteEEPRom(); //Call by uBITX Manager Program
break; break;
case 0xBC: //Write FT-817 EEPROM Data (for comfirtable) case 0xBC: //Write FT-817 EEPROM Data (for comfirtable)
WriteEEPRom_FT817(fromType); WriteEEPRom_FT817(fromType);
break; break;
case 0xE7 : //Read RX Status case 0xE7 : //Read RX Status
CatRxStatus(fromType); CatRxStatus();
break; break;
case 0xF7: //Read TX Status case 0xF7: //Read TX Status
CatTxStatus(fromType); CatTxStatus();
break; break;
default: default:
/* /*

View File

@@ -365,6 +365,11 @@ void controlAutoCW(){
//check interval time, if you want adjust interval between chars, modify below //check interval time, if you want adjust interval between chars, modify below
if (isAutoCWHold == 0 && (millis() - autoCWbeforeTime > cwSpeed * 3)) if (isAutoCWHold == 0 && (millis() - autoCWbeforeTime > cwSpeed * 3))
{ {
if (!inTx){ //if not TX Status, change RX -> TX
keyDown = 0;
startTx(TX_CW, 0); //disable updateDisplay Command for reduce latency time
}
sendCWChar(EEPROM.read(CW_AUTO_DATA + autoCWSendCharIndex++)); sendCWChar(EEPROM.read(CW_AUTO_DATA + autoCWSendCharIndex++));
if (autoCWSendCharIndex > autoCWSendCharEndIndex) { //finish auto cw send if (autoCWSendCharIndex > autoCWSendCharEndIndex) { //finish auto cw send

View File

@@ -160,7 +160,8 @@ int count = 0; //to generally count ticks, loops, etc
#define TX_TUNE_TYPE 261 // #define TX_TUNE_TYPE 261 //
#define HAM_BAND_RANGE 262 //FROM (2BYTE) TO (2BYTE) * 10 = 40byte #define HAM_BAND_RANGE 262 //FROM (2BYTE) TO (2BYTE) * 10 = 40byte
#define HAM_BAND_FREQS 302 //40, 1 BAND = 4Byte most bit is mode #define HAM_BAND_FREQS 302 //40, 1 BAND = 4Byte most bit is mode
#define TUNING_STEP 342 //TUNING STEP * 6 (index 1 + STEPS 5) #define TUNING_STEP 342 //TUNING STEP * 6 (index 1 + STEPS 5) //1STEP :
//for reduce cw key error, eeprom address //for reduce cw key error, eeprom address
#define CW_ADC_MOST_BIT1 348 //most 2bits of DOT_TO , DOT_FROM, ST_TO, ST_FROM #define CW_ADC_MOST_BIT1 348 //most 2bits of DOT_TO , DOT_FROM, ST_TO, ST_FROM
@@ -175,10 +176,18 @@ int count = 0; //to generally count ticks, loops, etc
#define CW_ADC_BOTH_FROM 356 //CW ADC Range BOTH from (Lower 8 bit) #define CW_ADC_BOTH_FROM 356 //CW ADC Range BOTH from (Lower 8 bit)
#define CW_ADC_BOTH_TO 357 //CW ADC Range BOTH to (Lower 8 bit) #define CW_ADC_BOTH_TO 357 //CW ADC Range BOTH to (Lower 8 bit)
#define CW_KEY_TYPE 358 #define CW_KEY_TYPE 358
#define CW_DISPLAY_SHIFT 359 //Transmits on CWL, CWU Mode, LCD Frequency shifts Sidetone Frequency.
//(7:Enable / Disable //0: enable, 1:disable, (default is applied shift)
//6 : 0 : Adjust Pulus, 1 : Adjust Minus
//0~5: Adjust Value : * 10 = Adjust Value (0~300)
#define DISPLAY_OPTION1 361 //Display Option1 #define DISPLAY_OPTION1 361 //Display Option1
#define DISPLAY_OPTION2 362 //Display Option2 #define DISPLAY_OPTION2 362 //Display Option2
#define CHANNEL_FREQ 630 //Channel 1 ~ 20, 1 Channel = 4 bytes
#define CHANNEL_DESC 710 //Channel 1 ~ 20, 1 Channel = 4 bytes
#define RESERVE3 770 //Reserve3 between Channel and Firmware id check
//Check Firmware type and version //Check Firmware type and version
#define FIRMWAR_ID_ADDR 776 //776 : 0x59, 777 :0x58, 778 : 0x68 : Id Number, if not found id, erase eeprom(32~1023) for prevent system error. #define FIRMWAR_ID_ADDR 776 //776 : 0x59, 777 :0x58, 778 : 0x68 : Id Number, if not found id, erase eeprom(32~1023) for prevent system error.
#define VERSION_ADDRESS 779 //check Firmware version #define VERSION_ADDRESS 779 //check Firmware version
@@ -260,7 +269,7 @@ byte sideToneSub = 0;
//DialLock //DialLock
byte isDialLock = 0; //000000[0]vfoB [0]vfoA 0Bit : A, 1Bit : B byte isDialLock = 0; //000000[0]vfoB [0]vfoA 0Bit : A, 1Bit : B
byte isTxType = 0; //000000[0 - isSplit] [0 - isTXStop] byte isTxType = 0; //000000[0 - isSplit] [0 - isTXStop]
byte arTuneStep[5]; long arTuneStep[5];
byte tuneStepIndex; //default Value 0, start Offset is 0 because of check new user byte tuneStepIndex; //default Value 0, start Offset is 0 because of check new user
byte displayOption1 = 0; byte displayOption1 = 0;
@@ -280,6 +289,9 @@ bool Iambic_Key = true;
#define IAMBICB 0x10 // 0 for Iambic A, 1 for Iambic B #define IAMBICB 0x10 // 0 for Iambic A, 1 for Iambic B
unsigned char keyerControl = IAMBICB; unsigned char keyerControl = IAMBICB;
byte isShiftDisplayCWFreq = 1; //Display Frequency
int shiftDisplayAdjustVal = 0; //
//Variables for auto cw mode //Variables for auto cw mode
byte isCWAutoMode = 0; //0 : none, 1 : CW_AutoMode_Menu_Selection, 2 : CW_AutoMode Sending byte isCWAutoMode = 0; //0 : none, 1 : CW_AutoMode_Menu_Selection, 2 : CW_AutoMode Sending
byte cwAutoTextCount = 0; //cwAutoText Count byte cwAutoTextCount = 0; //cwAutoText Count
@@ -381,7 +393,7 @@ void setNextHamBandFreq(unsigned long f, char moveDirection)
resultFreq = (unsigned long)(hamBandRange[(unsigned char)findedIndex][0]) * 1000; resultFreq = (unsigned long)(hamBandRange[(unsigned char)findedIndex][0]) * 1000;
setFrequency(resultFreq); setFrequency(resultFreq);
byteWithFreqToMode(loadMode); byteToMode(loadMode, 1);
} }
void saveBandFreqByIndex(unsigned long f, unsigned long mode, char bandIndex) { void saveBandFreqByIndex(unsigned long f, unsigned long mode, char bandIndex) {
@@ -396,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, 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. so Create a new delay function that can do background processing.
*/ */
unsigned long delayBeforeTime = 0; unsigned long delayBeforeTime = 0;
byte delay_background(unsigned delayTime, byte fromType){ //fromType : 4 autoCWKey -> Check Paddle byte delay_background(unsigned delayTime, byte fromType){ //fromType : 4 autoCWKey -> Check Paddle
delayBeforeTime = millis(); delayBeforeTime = millis();
@@ -514,7 +525,6 @@ void setFrequency(unsigned long f){
* put the uBitx in tx mode. It takes care of rit settings, sideband settings * 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 * Note: In cw mode, doesnt key the radio, only puts it in tx mode
*/ */
void startTx(byte txMode, byte isDisplayUpdate){ void startTx(byte txMode, byte isDisplayUpdate){
//Check Hamband only TX //Not found Hamband index by now frequency //Check Hamband only TX //Not found Hamband index by now frequency
if (tuneTXType >= 100 && getIndexHambanBbyFreq(ritOn ? ritTxFrequency : frequency) == -1) { if (tuneTXType >= 100 && getIndexHambanBbyFreq(ritOn ? ritTxFrequency : frequency) == -1) {
@@ -536,12 +546,12 @@ void startTx(byte txMode, byte isDisplayUpdate){
if (vfoActive == VFO_B) { if (vfoActive == VFO_B) {
vfoActive = VFO_A; vfoActive = VFO_A;
frequency = vfoA; frequency = vfoA;
byteToMode(vfoA_mode); byteToMode(vfoA_mode, 0);
} }
else if (vfoActive == VFO_A){ else if (vfoActive == VFO_A){
vfoActive = VFO_B; vfoActive = VFO_B;
frequency = vfoB; frequency = vfoB;
byteToMode(vfoB_mode); byteToMode(vfoB_mode, 0);
} }
setFrequency(frequency); setFrequency(frequency);
@@ -596,12 +606,12 @@ void stopTx(){
if (vfoActive == VFO_B){ if (vfoActive == VFO_B){
vfoActive = VFO_A; vfoActive = VFO_A;
frequency = vfoA; frequency = vfoA;
byteToMode(vfoA_mode); byteToMode(vfoA_mode, 0);
} }
else if (vfoActive == VFO_A){ else if (vfoActive == VFO_A){
vfoActive = VFO_B; vfoActive = VFO_B;
frequency = vfoB; frequency = vfoB;
byteToMode(vfoB_mode); byteToMode(vfoB_mode, 0);
} }
setFrequency(frequency); setFrequency(frequency);
} //end of else } //end of else
@@ -670,7 +680,7 @@ void checkButton(){
delay(10); delay(10);
Check_Cat(0); Check_Cat(0);
} }
delay(50);//debounce //delay(50);//debounce
} }
@@ -685,13 +695,12 @@ int encodedSumValue = 0;
unsigned long lastTunetime = 0; //if continous moving, skip threshold processing unsigned long lastTunetime = 0; //if continous moving, skip threshold processing
byte lastMovedirection = 0; //0 : stop, 1 : cw, 2 : ccw byte lastMovedirection = 0; //0 : stop, 1 : cw, 2 : ccw
#define skipThresholdTime 100 //#define skipThresholdTime 70
#define encodeTimeOut 1000 #define encodeTimeOut 1000
void doTuningWithThresHold(){ void doTuningWithThresHold(){
int s = 0; int s = 0;
unsigned long prev_freq; unsigned long prev_freq;
long incdecValue = 0;
if ((vfoActive == VFO_A && ((isDialLock & 0x01) == 0x01)) || if ((vfoActive == VFO_A && ((isDialLock & 0x01) == 0x01)) ||
(vfoActive == VFO_B && ((isDialLock & 0x02) == 0x02))) (vfoActive == VFO_B && ((isDialLock & 0x02) == 0x02)))
@@ -715,7 +724,9 @@ void doTuningWithThresHold(){
encodedSumValue += (s > 0 ? 1 : -1); encodedSumValue += (s > 0 ? 1 : -1);
//check threshold and operator actions (hold dial speed = continous moving, skip threshold check) //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; return;
lastTunetime = millis(); lastTunetime = millis();
@@ -725,7 +736,8 @@ void doTuningWithThresHold(){
prev_freq = frequency; prev_freq = frequency;
//incdecValue = tuningStep * s; //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) if (prev_freq < 10000000l && frequency > 10000000l)
isUSB = true; isUSB = true;
@@ -745,9 +757,9 @@ void doRIT(){
unsigned long old_freq = frequency; unsigned long old_freq = frequency;
if (knob < 0) if (knob < 0)
frequency -= 100l; frequency -= (arTuneStep[tuneStepIndex -1]); //
else if (knob > 0) else if (knob > 0)
frequency += 100; frequency += (arTuneStep[tuneStepIndex -1]); //
if (old_freq != frequency){ if (old_freq != frequency){
setFrequency(frequency); setFrequency(frequency);
@@ -756,25 +768,7 @@ void doRIT(){
} }
/* /*
void doIFShift(){ save Frequency and mode to eeprom for Auto Save with protected eeprom cycle, by kd8cec
int knob = enc_read();
unsigned long old_freq = frequency;
if (knob != 0)
{
if (knob < 0)
ifShiftValue -= 1l;
else if (knob > 0)
ifShiftValue += 1;
updateLine2Buffer(1);
setFrequency(frequency);
}
}
*/
/**
save Frequency and mode to eeprom
*/ */
void storeFrequencyAndMode(byte saveType) void storeFrequencyAndMode(byte saveType)
{ {
@@ -806,6 +800,22 @@ void storeFrequencyAndMode(byte saveType)
} }
} }
//calculate step size from 1 byte, compatible uBITX Manager, by KD8CEC
unsigned int byteToSteps(byte srcByte) {
byte powerVal = (byte)(srcByte >> 6);
unsigned int baseVal = srcByte & 0x3F;
if (powerVal == 1)
return baseVal * 10;
else if (powerVal == 2)
return baseVal * 100;
else if (powerVal == 3)
return baseVal * 1000;
else
return baseVal;
}
/** /**
* The settings are read from EEPROM. The first time around, the values may not be * The settings are read from EEPROM. The first time around, the values may not be
* present or out of range, in this case, some intelligent defaults are copied into the * present or out of range, in this case, some intelligent defaults are copied into the
@@ -906,13 +916,13 @@ void initSettings(){
if ((3 < tuneTXType && tuneTXType < 100) || 103 < tuneTXType || useHamBandCount < 1 || findedValidValueCount < 5) if ((3 < tuneTXType && tuneTXType < 100) || 103 < tuneTXType || useHamBandCount < 1 || findedValidValueCount < 5)
{ {
tuneTXType = 2; tuneTXType = 2;
//if empty band Information, auto insert default region 1 frequency range //if empty band Information, auto insert default region 2 frequency range
//This part is made temporary for people who have difficulty setting up, so can remove it when you run out of memory. //This part is made temporary for people who have difficulty setting up, so can remove it when you run out of memory.
useHamBandCount = 10; useHamBandCount = 10;
hamBandRange[0][0] = 1810; hamBandRange[0][1] = 2000; hamBandRange[0][0] = 1810; hamBandRange[0][1] = 2000;
hamBandRange[1][0] = 3500; hamBandRange[1][1] = 3800; hamBandRange[1][0] = 3500; hamBandRange[1][1] = 3800;
hamBandRange[2][0] = 5351; hamBandRange[2][1] = 5367; hamBandRange[2][0] = 5351; hamBandRange[2][1] = 5367;
hamBandRange[3][0] = 7000; hamBandRange[3][1] = 7300; //region 1 hamBandRange[3][0] = 7000; hamBandRange[3][1] = 7300; //region 2
hamBandRange[4][0] = 10100; hamBandRange[4][1] = 10150; hamBandRange[4][0] = 10100; hamBandRange[4][1] = 10150;
hamBandRange[5][0] = 14000; hamBandRange[5][1] = 14350; hamBandRange[5][0] = 14000; hamBandRange[5][1] = 14350;
hamBandRange[6][0] = 18068; hamBandRange[6][1] = 18168; hamBandRange[6][0] = 18068; hamBandRange[6][1] = 18168;
@@ -926,8 +936,8 @@ void initSettings(){
findedValidValueCount = 0; findedValidValueCount = 0;
EEPROM.get(TUNING_STEP, tuneStepIndex); EEPROM.get(TUNING_STEP, tuneStepIndex);
for (byte i = 0; i < 5; i++) { for (byte i = 0; i < 5; i++) {
arTuneStep[i] = EEPROM.read(TUNING_STEP + i + 1); arTuneStep[i] = byteToSteps(EEPROM.read(TUNING_STEP + i + 1));
if (arTuneStep[i] >= 1 && arTuneStep[i] < 251) //Maximum 250 for check valid Value if (arTuneStep[i] >= 1 && arTuneStep[i] <= 60000) //Maximum 650 for check valid Value
findedValidValueCount++; findedValidValueCount++;
} }
@@ -960,6 +970,22 @@ void initSettings(){
cwAdcBothFrom = EEPROM.read(CW_ADC_BOTH_FROM) | ((tmpMostBits & 0x30) << 4); cwAdcBothFrom = EEPROM.read(CW_ADC_BOTH_FROM) | ((tmpMostBits & 0x30) << 4);
cwAdcBothTo = EEPROM.read(CW_ADC_BOTH_TO) | ((tmpMostBits & 0xC0) << 2); cwAdcBothTo = EEPROM.read(CW_ADC_BOTH_TO) | ((tmpMostBits & 0xC0) << 2);
//Display Type for CW mode
isShiftDisplayCWFreq = EEPROM.read(CW_DISPLAY_SHIFT);
//Adjust CW Mode Freq
shiftDisplayAdjustVal = (isShiftDisplayCWFreq & 0x3F) * 10;
//check Minus
if ((isShiftDisplayCWFreq & 0x40) == 0x40)
shiftDisplayAdjustVal = shiftDisplayAdjustVal * -1;
//Shift Display Check (Default : 0)
if ((isShiftDisplayCWFreq & 0x80) == 0) //Enabled
isShiftDisplayCWFreq = 1;
else //Disabled
isShiftDisplayCWFreq = 0;
//default Value (for original hardware) //default Value (for original hardware)
if (cwAdcSTFrom >= cwAdcSTTo) if (cwAdcSTFrom >= cwAdcSTTo)
{ {
@@ -1003,12 +1029,12 @@ void initSettings(){
if (vfoA > 35000000l || 3500000l > vfoA) { if (vfoA > 35000000l || 3500000l > vfoA) {
vfoA = 7150000l; vfoA = 7150000l;
vfoA_mode = 2; vfoA_mode = 2; //LSB
} }
if (vfoB > 35000000l || 3500000l > vfoB) { if (vfoB > 35000000l || 3500000l > vfoB) {
vfoB = 14150000l; vfoB = 14150000l;
vfoB_mode = 3; vfoB_mode = 3; //USB
} }
//end of original code section //end of original code section
@@ -1034,7 +1060,6 @@ void initSettings(){
} }
void initPorts(){ void initPorts(){
analogReference(DEFAULT); analogReference(DEFAULT);
//?? //??
@@ -1084,7 +1109,7 @@ void setup()
//Serial.begin(9600); //Serial.begin(9600);
lcd.begin(16, 2); lcd.begin(16, 2);
printLineF(1, F("CECBT v0.33")); printLineF(1, F("CECBT v1.04"));
Init_Cat(38400, SERIAL_8N1); Init_Cat(38400, SERIAL_8N1);
initMeter(); //not used in this build initMeter(); //not used in this build
@@ -1103,7 +1128,7 @@ void setup()
initPorts(); initPorts();
byteToMode(vfoA_mode); byteToMode(vfoA_mode, 0);
initOscillators(); initOscillators();
frequency = vfoA; frequency = vfoA;
@@ -1115,14 +1140,7 @@ void setup()
factory_alignment(); factory_alignment();
} }
//Auto save Frequency and Mode with Protected eeprom life by KD8CEC
/**
* The loop checks for keydown, ptt, function button and tuning.
*/
//for debug
int dbgCnt = 0;
byte flasher = 0;
void checkAutoSaveFreqMode() void checkAutoSaveFreqMode()
{ {
//when tx or ritOn, disable auto save //when tx or ritOn, disable auto save
@@ -1140,18 +1158,8 @@ void checkAutoSaveFreqMode()
//check time for Frequency auto save //check time for Frequency auto save
if (millis() - saveCheckTime > saveIntervalSec * 1000) if (millis() - saveCheckTime > saveIntervalSec * 1000)
{ {
if (vfoActive == VFO_A) FrequencyToVFO(1);
{ saveCheckTime = 0; //for reduce cpu use rate
vfoA = frequency;
vfoA_mode = modeToByte();
storeFrequencyAndMode(1);
}
else
{
vfoB = frequency;
vfoB_mode = modeToByte();
storeFrequencyAndMode(2);
}
} }
} }
} }
@@ -1178,11 +1186,11 @@ void loop(){
if (isCWAutoMode == 0 && beforeIdle_ProcessTime < millis() - 250) { if (isCWAutoMode == 0 && beforeIdle_ProcessTime < millis() - 250) {
idle_process(); idle_process();
checkAutoSaveFreqMode(); //move here form out scope for reduce cpu use rate
beforeIdle_ProcessTime = millis(); beforeIdle_ProcessTime = millis();
} }
} //end of check TX Status } //end of check TX Status
//we check CAT after the encoder as it might put the radio into TX //we check CAT after the encoder as it might put the radio into TX
Check_Cat(inTx? 1 : 0); Check_Cat(inTx? 1 : 0);
checkAutoSaveFreqMode();
} }

View File

@@ -17,7 +17,7 @@
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
**************************************************************************/ **************************************************************************/
byte line2Buffer[16]; char line2Buffer[16];
//KD8CEC 200Hz ST //KD8CEC 200Hz ST
//L14.150 200Hz ST //L14.150 200Hz ST
//U14.150 +150khz //U14.150 +150khz
@@ -31,12 +31,15 @@ void updateLine2Buffer(char isDirectCall)
{ {
if (ritOn) if (ritOn)
{ {
strcpy(line2Buffer, "RitTX:");
/*
line2Buffer[0] = 'R'; line2Buffer[0] = 'R';
line2Buffer[1] = 'i'; line2Buffer[1] = 'i';
line2Buffer[2] = 't'; line2Buffer[2] = 't';
line2Buffer[3] = 'T'; line2Buffer[3] = 'T';
line2Buffer[4] = 'X'; line2Buffer[4] = 'X';
line2Buffer[5] = ':'; line2Buffer[5] = ':';
*/
//display frequency //display frequency
tmpFreq = ritTxFrequency; tmpFreq = ritTxFrequency;
@@ -53,17 +56,18 @@ void updateLine2Buffer(char isDirectCall)
} }
return; return;
} } //end of ritOn display
//======================================================
//other VFO display
//======================================================
if (vfoActive == VFO_B) if (vfoActive == VFO_B)
{ {
tmpFreq = vfoA; tmpFreq = vfoA;
//line2Buffer[0] = 'A';
} }
else else
{ {
tmpFreq = vfoB; tmpFreq = vfoB;
//line2Buffer[0] = 'B';
} }
// EXAMPLE 1 & 2 // EXAMPLE 1 & 2
@@ -82,18 +86,18 @@ void updateLine2Buffer(char isDirectCall)
} }
//EXAMPLE #1 //EXAMPLE #1
if ((displayOption1 & 0x04) == 0x00) if ((displayOption1 & 0x04) == 0x00) //none scroll display
line2Buffer[6] = 'k'; line2Buffer[6] = 'k';
else else
{ {
//example #2 //example #2
if (freqScrollPosition++ > 18) if (freqScrollPosition++ > 18) //none scroll display time
{ {
line2Buffer[6] = 'k'; line2Buffer[6] = 'k';
if (freqScrollPosition > 25) if (freqScrollPosition > 25)
freqScrollPosition = -1; freqScrollPosition = -1;
} }
else else //scroll frequency
{ {
line2Buffer[10] = 'H'; line2Buffer[10] = 'H';
line2Buffer[11] = 'z'; line2Buffer[11] = 'z';
@@ -115,11 +119,11 @@ void updateLine2Buffer(char isDirectCall)
line2Buffer[i] = ' '; line2Buffer[i] = ' ';
} }
} }
} } //scroll
line2Buffer[7] = ' '; line2Buffer[7] = ' ';
} //check direct call by encoder } //check direct call by encoder
if (isIFShift) if (isIFShift)
{ {
if (isDirectCall == 1) if (isDirectCall == 1)
@@ -130,16 +134,18 @@ void updateLine2Buffer(char isDirectCall)
line2Buffer[8] = 'I'; line2Buffer[8] = 'I';
line2Buffer[9] = 'F'; line2Buffer[9] = 'F';
if (ifShiftValue == 0) //if (ifShiftValue == 0)
{ //{
/*
line2Buffer[10] = 'S'; line2Buffer[10] = 'S';
line2Buffer[11] = ':'; line2Buffer[11] = ':';
line2Buffer[12] = 'O'; line2Buffer[12] = 'O';
line2Buffer[13] = 'F'; line2Buffer[13] = 'F';
line2Buffer[14] = 'F'; line2Buffer[14] = 'F';
} */
else //}
{ //else
//{
line2Buffer[10] = ifShiftValue >= 0 ? '+' : 0; line2Buffer[10] = ifShiftValue >= 0 ? '+' : 0;
line2Buffer[11] = 0; line2Buffer[11] = 0;
line2Buffer[12] = ' '; line2Buffer[12] = ' ';
@@ -148,28 +154,42 @@ void updateLine2Buffer(char isDirectCall)
memset(b, 0, sizeof(b)); memset(b, 0, sizeof(b));
ltoa(ifShiftValue, b, DEC); ltoa(ifShiftValue, b, DEC);
strncat(line2Buffer, b, 5); strncat(line2Buffer, b, 5);
} //}
if (isDirectCall == 1) //if call by encoder (not scheduler), immediate print value if (isDirectCall == 1) //if call by encoder (not scheduler), immediate print value
printLine2(line2Buffer); printLine2(line2Buffer);
} } // end of display IF
else else // step display
{ {
if (isDirectCall != 0) if (isDirectCall != 0)
return; return;
memset(&line2Buffer[8], ' ', 8);
//Step //Step
byte tmpStep = arTuneStep[tuneStepIndex -1]; long tmpStep = arTuneStep[tuneStepIndex -1];
for (int i = 10; i >= 8; i--) {
byte isStepKhz = 0;
if (tmpStep >= 1000)
{
isStepKhz = 2;
}
for (int i = 10; i >= 8 - isStepKhz; i--) {
if (tmpStep > 0) { if (tmpStep > 0) {
line2Buffer[i] = tmpStep % 10 + 0x30; line2Buffer[i + isStepKhz] = tmpStep % 10 + 0x30;
tmpStep /= 10; tmpStep /= 10;
} }
else else
line2Buffer[i] = ' '; line2Buffer[i +isStepKhz] = ' ';
} }
//if (isStepKhz == 1)
// line2Buffer[10] = 'k';
if (isStepKhz == 0)
{
line2Buffer[11] = 'H'; line2Buffer[11] = 'H';
line2Buffer[12] = 'z'; line2Buffer[12] = 'z';
}
line2Buffer[13] = ' '; line2Buffer[13] = ' ';
//if ( //if (
@@ -195,6 +215,8 @@ void updateLine2Buffer(char isDirectCall)
//meterType : 0 = S.Meter, 1 : P.Meter //meterType : 0 = S.Meter, 1 : P.Meter
void DisplayMeter(byte meterType, byte meterValue, char drawPosition) void DisplayMeter(byte meterType, byte meterValue, char drawPosition)
{
if (meterType == 0 || meterType == 1 || meterType == 2)
{ {
drawMeter(meterValue); //call original source code drawMeter(meterValue); //call original source code
int lineNumber = 0; int lineNumber = 0;
@@ -205,7 +227,7 @@ void DisplayMeter(byte meterType, byte meterValue, char drawPosition)
for (int i = 0; i < 6; i++) //meter 5 + +db 1 = 6 for (int i = 0; i < 6; i++) //meter 5 + +db 1 = 6
lcd.write(lcdMeter[i]); lcd.write(lcdMeter[i]);
}
} }
byte testValue = 0; byte testValue = 0;
@@ -215,6 +237,9 @@ void idle_process()
//space for user graphic display //space for user graphic display
if (menuOn == 0) if (menuOn == 0)
{ {
if ((displayOption1 & 0x10) == 0x10) //always empty topline
return;
//if line2DisplayStatus == 0 <-- this condition is clear Line, you can display any message //if line2DisplayStatus == 0 <-- this condition is clear Line, you can display any message
if (line2DisplayStatus == 0 || (((displayOption1 & 0x04) == 0x04) && line2DisplayStatus == 2)) { if (line2DisplayStatus == 0 || (((displayOption1 & 0x04) == 0x04) && line2DisplayStatus == 2)) {
if (checkCount++ > 1) if (checkCount++ > 1)

View File

@@ -90,13 +90,13 @@ void cwKeyUp(){
#define PDLSWAP 0x08 // 0 for normal, 1 for swap #define PDLSWAP 0x08 // 0 for normal, 1 for swap
#define IAMBICB 0x10 // 0 for Iambic A, 1 for Iambic B #define IAMBICB 0x10 // 0 for Iambic A, 1 for Iambic B
enum KSTYPE {IDLE, CHK_DIT, CHK_DAH, KEYED_PREP, KEYED, INTER_ELEMENT }; enum KSTYPE {IDLE, CHK_DIT, CHK_DAH, KEYED_PREP, KEYED, INTER_ELEMENT };
static long ktimer; static unsigned long ktimer;
unsigned char keyerState = IDLE; unsigned char keyerState = IDLE;
//Below is a test to reduce the keying error. do not delete lines //Below is a test to reduce the keying error. do not delete lines
//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; unsigned char tmpKeyerControl = 0;
int paddle = analogRead(ANALOG_KEYER); int paddle = analogRead(ANALOG_KEYER);
if (paddle >= cwAdcDashFrom && paddle <= cwAdcDashTo) if (paddle >= cwAdcDashFrom && paddle <= cwAdcDashTo)
@@ -126,9 +126,7 @@ char update_PaddleLatch(byte isUpdateKeyState) {
// modified by KD8CEC // modified by KD8CEC
******************************************************************************/ ******************************************************************************/
void cwKeyer(void){ void cwKeyer(void){
byte paddle;
lastPaddle = 0; lastPaddle = 0;
int dot,dash;
bool continue_loop = true; bool continue_loop = true;
unsigned tmpKeyControl = 0; unsigned tmpKeyControl = 0;
@@ -174,6 +172,9 @@ void cwKeyer(void){
keyerControl &= ~(DIT_L + DAH_L); // clear both paddle latch bits keyerControl &= ~(DIT_L + DAH_L); // clear both paddle latch bits
keyerState = KEYED; // next state keyerState = KEYED; // next state
if (!inTx){ if (!inTx){
//DelayTime Option
delay_background(delayBeforeCWStartTime * 2, 2);
keyDown = 0; keyDown = 0;
cwTimeout = millis() + cwDelayTime * 10; //+ CW_TIMEOUT; cwTimeout = millis() + cwDelayTime * 10; //+ CW_TIMEOUT;
startTx(TX_CW, 1); startTx(TX_CW, 1);
@@ -206,7 +207,7 @@ void cwKeyer(void){
break; break;
} }
Check_Cat(3); Check_Cat(2);
} //end of while } //end of while
} }
else{ else{
@@ -214,6 +215,9 @@ void cwKeyer(void){
if (update_PaddleLatch(0) == DIT_L) { if (update_PaddleLatch(0) == DIT_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
delay_background(delayBeforeCWStartTime * 2, 2);
keyDown = 0; keyDown = 0;
cwTimeout = millis() + cwDelayTime * 10; //+ CW_TIMEOUT; cwTimeout = millis() + cwDelayTime * 10; //+ CW_TIMEOUT;
startTx(TX_CW, 1); startTx(TX_CW, 1);
@@ -231,13 +235,14 @@ void cwKeyer(void){
keyDown = 0; keyDown = 0;
stopTx(); stopTx();
} }
if (!cwTimeout) //if (!cwTimeout) //removed by KD8CEC
return; // return;
// got back to the beginning of the loop, if no further activity happens on straight key // got back to the beginning of the loop, if no further activity happens on straight key
// we will time out, and return out of this routine // we will time out, and return out of this routine
//delay(5); //delay(5);
delay_background(5, 3); //delay_background(5, 3); //removed by KD8CEC
continue; //continue; //removed by KD8CEC
return; //Tx stop control by Main Loop
} }
Check_Cat(2); Check_Cat(2);

File diff suppressed because it is too large Load Diff

View File

@@ -60,6 +60,7 @@ void i2cWriten(uint8_t reg, uint8_t *vals, uint8_t vcnt) { // write array
Wire.endTransmission(); 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 void si5351bx_init() { // Call once at power-up, start PLLA
uint32_t msxp1; 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(3, si5351bx_clken); // Disable all CLK output drivers
i2cWrite(183, SI5351BX_XTALPF << 6); // Set 25mhz crystal load capacitance i2cWrite(183, SI5351BX_XTALPF << 6); // Set 25mhz crystal load capacitance
msxp1 = 128 * SI5351BX_MSA - 512; // and msxp2=0, msxp3=1, not fractional 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}; //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 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) 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 void si5351bx_setfreq(uint8_t clknum, uint32_t fout) { // Set a CLK to fout Hz

View File

@@ -99,8 +99,6 @@ void initMeter(){
//0 ~ 25 : 30 over : + 10 //0 ~ 25 : 30 over : + 10
void drawMeter(int needle) { void drawMeter(int needle) {
//5Char + O over //5Char + O over
int drawCharLength = needle / 5;
int drawCharLengthLast = needle % 5;
int i; int i;
for (i = 0; i < 5; i++) { for (i = 0; i < 5; i++) {
@@ -235,7 +233,6 @@ char byteToChar(byte srcByte){
void updateDisplay() { void updateDisplay() {
// tks Jack Purdum W8TEE // tks Jack Purdum W8TEE
// replaced fsprint commmands by str commands for code size reduction // replaced fsprint commmands by str commands for code size reduction
// replace code for Frequency numbering error (alignment, point...) by KD8CEC // replace code for Frequency numbering error (alignment, point...) by KD8CEC
int i; int i;
unsigned long tmpFreq = frequency; // unsigned long tmpFreq = frequency; //
@@ -284,6 +281,15 @@ void updateDisplay() {
strcat(c, "B:"); strcat(c, "B:");
} }
//Fixed by Mitani Massaru (JE4SMQ)
if (isShiftDisplayCWFreq == 1)
{
if (cwMode == 1) //CWL
tmpFreq = tmpFreq - sideTone + shiftDisplayAdjustVal;
else if (cwMode == 2) //CWU
tmpFreq = tmpFreq + sideTone + shiftDisplayAdjustVal;
}
//display frequency //display frequency
for (int i = 15; i >= 6; i--) { for (int i = 15; i >= 6; i--) {
if (tmpFreq > 0) { if (tmpFreq > 0) {
@@ -321,22 +327,6 @@ void updateDisplay() {
lcd.setCursor(5,diplayVFOLine); lcd.setCursor(5,diplayVFOLine);
lcd.write(":"); 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; int enc_prev_state = 3;