Compare commits
6 Commits
version0.2
...
version0.3
Author | SHA1 | Date | |
---|---|---|---|
|
0d9ec08bd7 | ||
|
98c26730c6 | ||
|
3a306429ea | ||
|
4f634a8277 | ||
|
a49d5e85b8 | ||
|
282c196f63 |
@@ -130,10 +130,21 @@ void CatGetFreqMode(unsigned long freq, byte fromType)
|
||||
}
|
||||
|
||||
//Mode Check
|
||||
if (isUSB)
|
||||
CAT_BUFF[4] = CAT_MODE_USB;
|
||||
if (cwMode == 0)
|
||||
{
|
||||
if (isUSB)
|
||||
CAT_BUFF[4] = CAT_MODE_USB;
|
||||
else
|
||||
CAT_BUFF[4] = CAT_MODE_LSB;
|
||||
}
|
||||
else if (cwMode == 1)
|
||||
{
|
||||
CAT_BUFF[4] = CAT_MODE_CW;
|
||||
}
|
||||
else
|
||||
CAT_BUFF[4] = CAT_MODE_LSB;
|
||||
{
|
||||
CAT_BUFF[4] = CAT_MODE_CW;
|
||||
}
|
||||
|
||||
SendCatData(5);
|
||||
}
|
||||
@@ -198,12 +209,18 @@ void CatSetMode(byte tmpMode, byte fromType)
|
||||
|
||||
if (!inTx)
|
||||
{
|
||||
if (tmpMode == CAT_MODE_USB)
|
||||
if (tmpMode == CAT_MODE_CW)
|
||||
{
|
||||
cwMode = 1;
|
||||
}
|
||||
else if (tmpMode == CAT_MODE_USB)
|
||||
{
|
||||
cwMode = 0;
|
||||
isUSB = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
cwMode = 0;
|
||||
isUSB = false;
|
||||
}
|
||||
|
||||
@@ -358,10 +375,21 @@ void ReadEEPRom_FT817(byte fromType)
|
||||
CAT_BUFF[1] = 0xB2;
|
||||
break; case 0x69 : //FM Mic (#29) Contains 0-100 (decimal) as displayed
|
||||
case 0x78 :
|
||||
if (isUSB)
|
||||
CAT_BUFF[0] = CAT_MODE_USB;
|
||||
else
|
||||
CAT_BUFF[0] = CAT_MODE_LSB;
|
||||
if (cwMode == 0)
|
||||
{
|
||||
if (isUSB)
|
||||
CAT_BUFF[0] = CAT_MODE_USB;
|
||||
else
|
||||
CAT_BUFF[0] = CAT_MODE_LSB;
|
||||
}
|
||||
else if (cwMode == 1)
|
||||
{
|
||||
CAT_BUFF[0] = CAT_MODE_CW;
|
||||
}
|
||||
else if (cwMode == 2)
|
||||
{
|
||||
CAT_BUFF[0] = CAT_MODE_CW;
|
||||
}
|
||||
|
||||
if (CAT_BUFF[0] != 0) CAT_BUFF[0] = 1 << 5;
|
||||
break;
|
||||
@@ -384,7 +412,7 @@ void ReadEEPRom_FT817(byte fromType)
|
||||
//7A 6 ? ?
|
||||
//7A 7 SPL On/Off 0 = Off, 1 = On
|
||||
|
||||
CAT_BUFF[0] = (isSplitOn ? 0xFF : 0x7F);
|
||||
CAT_BUFF[0] = (splitOn ? 0xFF : 0x7F);
|
||||
break;
|
||||
case 0xB3 : //
|
||||
CAT_BUFF[0] = 0x00;
|
||||
@@ -472,7 +500,7 @@ void WriteEEPRom_FT817(byte fromType)
|
||||
printLineF2(F("Sidetone set! CAT"));
|
||||
EEPROM.put(CW_SIDETONE, sideTone);
|
||||
delay(300); //If timeout errors occur in the calling software, remove them
|
||||
printLine2(""); //Ham radio deluxe is the only one that supports this feature yet. and ham radio deluxe has wait time as greater than 500ms
|
||||
clearLine2();
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -484,7 +512,8 @@ void WriteEEPRom_FT817(byte fromType)
|
||||
printLineF2(F("Sidetone set! CAT"));
|
||||
EEPROM.put(CW_SIDETONE, sideTone);
|
||||
delay(300); //If timeout errors occur in the calling software, remove them
|
||||
printLine2(""); //Ham radio deluxe is the only one that supports this feature yet. and ham radio deluxe has wait time as greater than 500ms
|
||||
clearLine2();
|
||||
line2DisplayStatus = 0;
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -504,7 +533,7 @@ void WriteEEPRom_FT817(byte fromType)
|
||||
printLineF2(F("CW Speed set!"));
|
||||
EEPROM.put(CW_DELAY, cwDelayTime);
|
||||
delay(300);
|
||||
printLine2("");
|
||||
clearLine2();
|
||||
break;
|
||||
case 0x62 : //
|
||||
//5-0 CW Speed (4-60 WPM) (#21) From 0 to 38 (HEX) with 0 = 4 WPM and 38 = 60 WPM (1 WPM steps)
|
||||
@@ -513,7 +542,7 @@ void WriteEEPRom_FT817(byte fromType)
|
||||
printLineF2(F("CW Speed set!"));
|
||||
EEPROM.put(CW_SPEED, cwSpeed);
|
||||
delay(300);
|
||||
printLine2("");
|
||||
clearLine2();
|
||||
|
||||
break;
|
||||
/*
|
||||
|
@@ -298,8 +298,12 @@ void controlAutoCW(){
|
||||
}
|
||||
|
||||
printLineFromEEPRom(0, 2, cwStartIndex + displayScrolStep + CW_DATA_OFSTADJ, cwEndIndex + CW_DATA_OFSTADJ);
|
||||
|
||||
byte diplayAutoCWLine = 0;
|
||||
if ((displayOption1 & 0x01) == 0x01)
|
||||
diplayAutoCWLine = 1;
|
||||
|
||||
lcd.setCursor(0,0);
|
||||
lcd.setCursor(0, diplayAutoCWLine);
|
||||
lcd.write(byteToChar(selectedCWTextIndex));
|
||||
lcd.write(':');
|
||||
isNeedScroll = (cwEndIndex - cwStartIndex) > 14 ? 1 : 0;
|
||||
|
@@ -84,6 +84,7 @@
|
||||
#define PTT (A3)
|
||||
#define ANALOG_KEYER (A6)
|
||||
#define ANALOG_SPARE (A7)
|
||||
#define ANALOG_SMETER (A7) //by KD8CEC
|
||||
|
||||
/**
|
||||
* The Raduino board is the size of a standard 16x2 LCD panel. It has three connectors:
|
||||
@@ -150,6 +151,7 @@ int count = 0; //to generally count ticks, loops, etc
|
||||
#define CW_SPEED 28
|
||||
|
||||
//AT328 has 1KBytes EEPROM
|
||||
#define CW_CAL 252
|
||||
#define VFO_A_MODE 256
|
||||
#define VFO_B_MODE 257
|
||||
#define CW_DELAY 258
|
||||
@@ -172,6 +174,10 @@ int count = 0; //to generally count ticks, loops, etc
|
||||
#define CW_ADC_DASH_TO 355 //CW ADC Range DASH to (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_KEY_TYPE 358
|
||||
|
||||
#define DISPLAY_OPTION1 361 //Display Option1
|
||||
#define DISPLAY_OPTION2 362 //Display Option2
|
||||
|
||||
//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.
|
||||
@@ -227,7 +233,7 @@ int count = 0; //to generally count ticks, loops, etc
|
||||
char ritOn = 0;
|
||||
char vfoActive = VFO_A;
|
||||
int8_t meter_reading = 0; // a -1 on meter makes it invisible
|
||||
unsigned long vfoA=7150000L, vfoB=14200000L, sideTone=800, usbCarrier;
|
||||
unsigned long vfoA=7150000L, vfoB=14200000L, sideTone=800, usbCarrier, cwmCarrier;
|
||||
unsigned long vfoA_eeprom, vfoB_eeprom; //for protect eeprom life
|
||||
unsigned long frequency, ritRxFrequency, ritTxFrequency; //frequency is the current frequency on the dial
|
||||
|
||||
@@ -244,7 +250,6 @@ byte saveIntervalSec = 10; //second
|
||||
unsigned long saveCheckTime = 0;
|
||||
unsigned long saveCheckFreq = 0;
|
||||
|
||||
bool isSplitOn = false;
|
||||
byte cwDelayTime = 60;
|
||||
byte delayBeforeCWStartTime = 50;
|
||||
|
||||
@@ -258,6 +263,9 @@ byte isTxType = 0; //000000[0 - isSplit] [0 - isTXStop]
|
||||
byte arTuneStep[5];
|
||||
byte tuneStepIndex; //default Value 0, start Offset is 0 because of check new user
|
||||
|
||||
byte displayOption1 = 0;
|
||||
byte displayOption2 = 0;
|
||||
|
||||
//CW ADC Range
|
||||
int cwAdcSTFrom = 0;
|
||||
int cwAdcSTTo = 0;
|
||||
@@ -267,6 +275,10 @@ int cwAdcDashFrom = 0;
|
||||
int cwAdcDashTo = 0;
|
||||
int cwAdcBothFrom = 0;
|
||||
int cwAdcBothTo = 0;
|
||||
byte cwKeyType = 0; //0: straight, 1 : iambica, 2: iambicb
|
||||
bool Iambic_Key = true;
|
||||
#define IAMBICB 0x10 // 0 for Iambic A, 1 for Iambic B
|
||||
unsigned char keyerControl = IAMBICB;
|
||||
|
||||
//Variables for auto cw mode
|
||||
byte isCWAutoMode = 0; //0 : none, 1 : CW_AutoMode_Menu_Selection, 2 : CW_AutoMode Sending
|
||||
@@ -286,9 +298,13 @@ byte userCallsignLength = 0; //7 : display callsign at system startup, 6~0 :
|
||||
*/
|
||||
boolean txCAT = false; //turned on if the transmitting due to a CAT command
|
||||
char inTx = 0; //it is set to 1 if in transmit mode (whatever the reason : cw, ptt or cat)
|
||||
char splitOn = 0; //working split, uses VFO B as the transmit frequency, (NOT IMPLEMENTED YET)
|
||||
char splitOn = 0; //working split, uses VFO B as the transmit frequency
|
||||
char keyDown = 0; //in cw mode, denotes the carrier is being transmitted
|
||||
char isUSB = 0; //upper sideband was selected, this is reset to the default for the
|
||||
|
||||
char cwMode = 0; //compatible original source, and extend mode //if cwMode == 0, mode check : isUSB, cwMode > 0, mode Check : cwMode
|
||||
//iscwMode = 0 : ssbmode, 1 :cwl, 2 : cwu, 3 : cwn (none tx)
|
||||
|
||||
//frequency when it crosses the frequency border of 10 MHz
|
||||
byte menuOn = 0; //set to 1 when the menu is being displayed, if a menu item sets it to zero, the menu is exited
|
||||
unsigned long cwTimeout = 0; //milliseconds to go before the cw transmit line is released and the radio goes back to rx mode
|
||||
@@ -296,6 +312,10 @@ unsigned long dbgCount = 0; //not used now
|
||||
unsigned char txFilter = 0; //which of the four transmit filters are in use
|
||||
boolean modeCalibrate = false;//this mode of menus shows extended menus to calibrate the oscillators and choose the proper
|
||||
//beat frequency
|
||||
|
||||
unsigned long beforeIdle_ProcessTime = 0; //for check Idle time
|
||||
byte line2DisplayStatus = 0; //0:Clear, 1 : menu, 1: DisplayFrom Idle,
|
||||
|
||||
/**
|
||||
* Below are the basic functions that control the uBitx. Understanding the functions before
|
||||
* you start hacking around
|
||||
@@ -348,8 +368,10 @@ void setNextHamBandFreq(unsigned long f, char moveDirection)
|
||||
|
||||
EEPROM.get(HAM_BAND_FREQS + 4 * findedIndex, resultFreq);
|
||||
|
||||
loadMode = (byte)(resultFreq >> 30);
|
||||
resultFreq = resultFreq & 0x3FFFFFFF;
|
||||
//loadMode = (byte)(resultFreq >> 30);
|
||||
//resultFreq = resultFreq & 0x3FFFFFFF;
|
||||
loadMode = (byte)(resultFreq >> 29);
|
||||
resultFreq = resultFreq & 0x1FFFFFFF;
|
||||
|
||||
if ((resultFreq / 1000) < hamBandRange[(unsigned char)findedIndex][0] || (resultFreq / 1000) > hamBandRange[(unsigned char)findedIndex][1])
|
||||
resultFreq = (unsigned long)(hamBandRange[(unsigned char)findedIndex][0]) * 1000;
|
||||
@@ -360,10 +382,10 @@ void setNextHamBandFreq(unsigned long f, char moveDirection)
|
||||
|
||||
void saveBandFreqByIndex(unsigned long f, unsigned long mode, char bandIndex) {
|
||||
if (bandIndex >= 0)
|
||||
EEPROM.put(HAM_BAND_FREQS + 4 * bandIndex, (f & 0x3FFFFFFF) | (mode << 30) );
|
||||
//EEPROM.put(HAM_BAND_FREQS + 4 * bandIndex, (f & 0x3FFFFFFF) | (mode << 30) );
|
||||
EEPROM.put(HAM_BAND_FREQS + 4 * bandIndex, (f & 0x1FFFFFFF) | (mode << 29) );
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
KD8CEC
|
||||
When using the basic delay of the Arduino, the program freezes.
|
||||
@@ -457,13 +479,27 @@ void setFrequency(unsigned long f){
|
||||
|
||||
setTXFilters(f);
|
||||
|
||||
if (isUSB){
|
||||
si5351bx_setfreq(2, SECOND_OSC_USB - usbCarrier + f);
|
||||
si5351bx_setfreq(1, SECOND_OSC_USB);
|
||||
if (cwMode == 0)
|
||||
{
|
||||
if (isUSB){
|
||||
si5351bx_setfreq(2, SECOND_OSC_USB - usbCarrier + f);
|
||||
si5351bx_setfreq(1, SECOND_OSC_USB);
|
||||
}
|
||||
else{
|
||||
si5351bx_setfreq(2, SECOND_OSC_LSB + usbCarrier + f);
|
||||
si5351bx_setfreq(1, SECOND_OSC_LSB);
|
||||
}
|
||||
}
|
||||
else{
|
||||
si5351bx_setfreq(2, SECOND_OSC_LSB + usbCarrier + f);
|
||||
si5351bx_setfreq(1, SECOND_OSC_LSB);
|
||||
else
|
||||
{
|
||||
if (cwMode == 1){ //CWL
|
||||
si5351bx_setfreq(2, SECOND_OSC_LSB + cwmCarrier + f);
|
||||
si5351bx_setfreq(1, SECOND_OSC_LSB);
|
||||
}
|
||||
else{ //CWU
|
||||
si5351bx_setfreq(2, SECOND_OSC_USB - cwmCarrier + f);
|
||||
si5351bx_setfreq(1, SECOND_OSC_USB);
|
||||
}
|
||||
}
|
||||
|
||||
frequency = f;
|
||||
@@ -492,6 +528,21 @@ void startTx(byte txMode, byte isDisplayUpdate){
|
||||
ritRxFrequency = frequency;
|
||||
setFrequency(ritTxFrequency);
|
||||
}
|
||||
else if (splitOn == 1) {
|
||||
if (vfoActive == VFO_B) {
|
||||
vfoActive = VFO_A;
|
||||
frequency = vfoA;
|
||||
byteToMode(vfoA_mode);
|
||||
}
|
||||
else if (vfoActive == VFO_A){
|
||||
vfoActive = VFO_B;
|
||||
frequency = vfoB;
|
||||
byteToMode(vfoB_mode);
|
||||
}
|
||||
|
||||
setFrequency(frequency);
|
||||
} //end of else
|
||||
|
||||
|
||||
if (txMode == TX_CW){
|
||||
//turn off the second local oscillator and the bfo
|
||||
@@ -501,10 +552,22 @@ void startTx(byte txMode, byte isDisplayUpdate){
|
||||
//shif the first oscillator to the tx frequency directly
|
||||
//the key up and key down will toggle the carrier unbalancing
|
||||
//the exact cw frequency is the tuned frequency + sidetone
|
||||
if (isUSB)
|
||||
si5351bx_setfreq(2, frequency + sideTone);
|
||||
else
|
||||
si5351bx_setfreq(2, frequency - sideTone);
|
||||
|
||||
if (cwMode == 0)
|
||||
{
|
||||
if (isUSB)
|
||||
si5351bx_setfreq(2, frequency + sideTone);
|
||||
else
|
||||
si5351bx_setfreq(2, frequency - sideTone);
|
||||
}
|
||||
else if (cwMode == 1) //CWL
|
||||
{
|
||||
si5351bx_setfreq(2, frequency - sideTone);
|
||||
}
|
||||
else //CWU
|
||||
{
|
||||
si5351bx_setfreq(2, frequency + sideTone);
|
||||
}
|
||||
}
|
||||
|
||||
//reduce latency time when begin of CW mode
|
||||
@@ -516,10 +579,28 @@ void stopTx(){
|
||||
inTx = 0;
|
||||
|
||||
digitalWrite(TX_RX, 0); //turn off the tx
|
||||
si5351bx_setfreq(0, usbCarrier); //set back the carrier oscillator anyway, cw tx switches it off
|
||||
|
||||
if (cwMode == 0)
|
||||
si5351bx_setfreq(0, usbCarrier); //set back the carrier oscillator anyway, cw tx switches it off
|
||||
else
|
||||
si5351bx_setfreq(0, cwmCarrier); //set back the carrier oscillator anyway, cw tx switches it off
|
||||
|
||||
if (ritOn)
|
||||
setFrequency(ritRxFrequency);
|
||||
else if (splitOn == 1) {
|
||||
//vfo Change
|
||||
if (vfoActive == VFO_B){
|
||||
vfoActive = VFO_A;
|
||||
frequency = vfoA;
|
||||
byteToMode(vfoA_mode);
|
||||
}
|
||||
else if (vfoActive == VFO_A){
|
||||
vfoActive = VFO_B;
|
||||
frequency = vfoB;
|
||||
byteToMode(vfoB_mode);
|
||||
}
|
||||
setFrequency(frequency);
|
||||
} //end of else
|
||||
else
|
||||
setFrequency(frequency);
|
||||
|
||||
@@ -745,6 +826,7 @@ void initSettings(){
|
||||
if (EEPROM.read(VERSION_ADDRESS) != VERSION_NUM)
|
||||
EEPROM.write(VERSION_ADDRESS, VERSION_NUM);
|
||||
|
||||
EEPROM.get(CW_CAL, cwmCarrier);
|
||||
|
||||
//for Save VFO_A_MODE to eeprom
|
||||
//0: default, 1:not use, 2:LSB, 3:USB, 4:CW, 5:AM, 6:FM
|
||||
@@ -756,6 +838,24 @@ void initSettings(){
|
||||
|
||||
//CW interval between TX and CW Start
|
||||
EEPROM.get(CW_START, delayBeforeCWStartTime);
|
||||
EEPROM.get(CW_KEY_TYPE, cwKeyType);
|
||||
if (cwKeyType > 2)
|
||||
cwKeyType = 0;
|
||||
|
||||
if (cwKeyType == 0)
|
||||
Iambic_Key = false;
|
||||
else
|
||||
{
|
||||
Iambic_Key = true;
|
||||
if (cwKeyType = 1)
|
||||
keyerControl &= ~IAMBICB;
|
||||
else
|
||||
keyerControl |= IAMBICB;
|
||||
}
|
||||
|
||||
|
||||
EEPROM.get(DISPLAY_OPTION1, displayOption1);
|
||||
EEPROM.get(DISPLAY_OPTION2, displayOption2);
|
||||
|
||||
//User callsign information
|
||||
if (EEPROM.read(USER_CALLSIGN_KEY) == 0x59)
|
||||
@@ -790,7 +890,7 @@ void initSettings(){
|
||||
hamBandRange[0][0] = 1810; hamBandRange[0][1] = 2000;
|
||||
hamBandRange[1][0] = 3500; hamBandRange[1][1] = 3800;
|
||||
hamBandRange[2][0] = 5351; hamBandRange[2][1] = 5367;
|
||||
hamBandRange[3][0] = 7000; hamBandRange[3][1] = 7200;
|
||||
hamBandRange[3][0] = 7000; hamBandRange[3][1] = 7300; //region 1
|
||||
hamBandRange[4][0] = 10100; hamBandRange[4][1] = 10150;
|
||||
hamBandRange[5][0] = 14000; hamBandRange[5][1] = 14350;
|
||||
hamBandRange[6][0] = 18068; hamBandRange[6][1] = 18168;
|
||||
@@ -875,6 +975,9 @@ void initSettings(){
|
||||
//original code with modified by kd8cec
|
||||
if (usbCarrier > 12010000l || usbCarrier < 11990000l)
|
||||
usbCarrier = 11995000l;
|
||||
|
||||
if (cwmCarrier > 12010000l || cwmCarrier < 11990000l)
|
||||
cwmCarrier = 11995000l;
|
||||
|
||||
if (vfoA > 35000000l || 3500000l > vfoA) {
|
||||
vfoA = 7150000l;
|
||||
@@ -923,6 +1026,7 @@ void initPorts(){
|
||||
|
||||
pinMode(PTT, INPUT_PULLUP);
|
||||
pinMode(ANALOG_KEYER, INPUT_PULLUP);
|
||||
pinMode(ANALOG_SMETER, INPUT); //by KD8CEC
|
||||
|
||||
pinMode(CW_TONE, OUTPUT);
|
||||
digitalWrite(CW_TONE, 0);
|
||||
@@ -958,7 +1062,7 @@ void setup()
|
||||
|
||||
//Serial.begin(9600);
|
||||
lcd.begin(16, 2);
|
||||
printLineF(1, F("CECBT v0.30"));
|
||||
printLineF(1, F("CECBT v0.33"));
|
||||
|
||||
Init_Cat(38400, SERIAL_8N1);
|
||||
initMeter(); //not used in this build
|
||||
@@ -972,15 +1076,16 @@ void setup()
|
||||
else {
|
||||
printLineF(0, F("uBITX v0.20"));
|
||||
delay(500);
|
||||
printLine2("");
|
||||
clearLine2();
|
||||
}
|
||||
|
||||
initPorts();
|
||||
|
||||
byteToMode(vfoA_mode);
|
||||
initOscillators();
|
||||
|
||||
frequency = vfoA;
|
||||
saveCheckFreq = frequency; //for auto save frequency
|
||||
byteToMode(vfoA_mode);
|
||||
setFrequency(vfoA);
|
||||
updateDisplay();
|
||||
|
||||
@@ -1046,7 +1151,12 @@ void loop(){
|
||||
doRIT();
|
||||
else
|
||||
doTuningWithThresHold();
|
||||
}
|
||||
|
||||
if (isCWAutoMode == 0 && beforeIdle_ProcessTime < millis() - 500) {
|
||||
idle_process();
|
||||
beforeIdle_ProcessTime = millis();
|
||||
}
|
||||
} //end of check TX Status
|
||||
|
||||
//we check CAT after the encoder as it might put the radio into TX
|
||||
Check_Cat(inTx? 1 : 0);
|
||||
|
@@ -14,6 +14,7 @@ void btnWaitForClick(){
|
||||
void factory_alignment(){
|
||||
|
||||
factoryCalibration(1);
|
||||
line2DisplayStatus = 1;
|
||||
|
||||
if (calibration == 0){
|
||||
printLine2("Setup Aborted");
|
||||
@@ -36,6 +37,7 @@ void factory_alignment(){
|
||||
|
||||
|
||||
printLine2("#3:Test 3.5MHz");
|
||||
cwMode = 0;
|
||||
isUSB = false;
|
||||
setFrequency(3500000l);
|
||||
updateDisplay();
|
||||
@@ -58,6 +60,7 @@ void factory_alignment(){
|
||||
btnWaitForClick();
|
||||
printLine2("#5:Test 14MHz");
|
||||
|
||||
cwMode = 0;
|
||||
isUSB = true;
|
||||
setFrequency(14000000l);
|
||||
updateDisplay();
|
||||
@@ -79,6 +82,7 @@ void factory_alignment(){
|
||||
printLine2("Alignment done");
|
||||
delay(1000);
|
||||
|
||||
cwMode = 0;
|
||||
isUSB = false;
|
||||
setFrequency(7150000l);
|
||||
updateDisplay();
|
||||
|
165
ubitx_20/ubitx_idle.ino
Normal file
165
ubitx_20/ubitx_idle.ino
Normal file
@@ -0,0 +1,165 @@
|
||||
/*************************************************************************
|
||||
KD8CEC's uBITX Idle time Processing
|
||||
Functions that run at times that do not affect TX, CW, and CAT
|
||||
It is called in 1/10 time unit.
|
||||
-----------------------------------------------------------------------------
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
**************************************************************************/
|
||||
byte line2Buffer[16];
|
||||
//KD8CEC 200Hz ST
|
||||
//L14.150 200Hz ST
|
||||
//U14.150 +150khz
|
||||
int freqScrollPosition = 0;
|
||||
//Example Line2 Optinal Display
|
||||
void updateLine2Buffer()
|
||||
{
|
||||
unsigned long tmpFreq = 0;
|
||||
|
||||
if (ritOn)
|
||||
{
|
||||
line2Buffer[0] = 'R';
|
||||
line2Buffer[1] = 'i';
|
||||
line2Buffer[2] = 't';
|
||||
line2Buffer[3] = 'T';
|
||||
line2Buffer[4] = 'X';
|
||||
line2Buffer[5] = ':';
|
||||
|
||||
//display frequency
|
||||
tmpFreq = ritTxFrequency;
|
||||
for (int i = 15; i >= 6; i--) {
|
||||
if (tmpFreq > 0) {
|
||||
if (i == 12 || i == 8) line2Buffer[i] = '.';
|
||||
else {
|
||||
line2Buffer[i] = tmpFreq % 10 + 0x30;
|
||||
tmpFreq /= 10;
|
||||
}
|
||||
}
|
||||
else
|
||||
line2Buffer[i] = ' ';
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (vfoActive == VFO_B)
|
||||
{
|
||||
tmpFreq = vfoA;
|
||||
//line2Buffer[0] = 'A';
|
||||
}
|
||||
else
|
||||
{
|
||||
tmpFreq = vfoB;
|
||||
//line2Buffer[0] = 'B';
|
||||
}
|
||||
|
||||
// EXAMPLE 1 & 2
|
||||
//U14.150.100
|
||||
//display frequency
|
||||
for (int i = 9; i >= 0; i--) {
|
||||
if (tmpFreq > 0) {
|
||||
if (i == 2 || i == 6) line2Buffer[i] = '.';
|
||||
else {
|
||||
line2Buffer[i] = tmpFreq % 10 + 0x30;
|
||||
tmpFreq /= 10;
|
||||
}
|
||||
}
|
||||
else
|
||||
line2Buffer[i] = ' ';
|
||||
}
|
||||
|
||||
//EXAMPLE #1
|
||||
if ((displayOption1 & 0x04) == 0x00)
|
||||
line2Buffer[6] = 'k';
|
||||
else
|
||||
{
|
||||
//example #2
|
||||
if (freqScrollPosition++ > 18)
|
||||
{
|
||||
line2Buffer[6] = 'k';
|
||||
if (freqScrollPosition > 25)
|
||||
freqScrollPosition = -1;
|
||||
}
|
||||
else
|
||||
{
|
||||
line2Buffer[10] = 'H';
|
||||
line2Buffer[11] = 'z';
|
||||
|
||||
if (freqScrollPosition < 7)
|
||||
{
|
||||
for (int i = 11; i >= 0; i--)
|
||||
if (i - (7 - freqScrollPosition) >= 0)
|
||||
line2Buffer[i] = line2Buffer[i - (7 - freqScrollPosition)];
|
||||
else
|
||||
line2Buffer[i] = ' ';
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int i = 0; i < 11; i++)
|
||||
if (i + (freqScrollPosition - 7) <= 11)
|
||||
line2Buffer[i] = line2Buffer[i + (freqScrollPosition - 7)];
|
||||
else
|
||||
line2Buffer[i] = ' ';
|
||||
}
|
||||
}
|
||||
}
|
||||
line2Buffer[7] = ' ';
|
||||
|
||||
//Step
|
||||
byte tmpStep = arTuneStep[tuneStepIndex -1];
|
||||
for (int i = 10; i >= 8; i--) {
|
||||
if (tmpStep > 0) {
|
||||
line2Buffer[i] = tmpStep % 10 + 0x30;
|
||||
tmpStep /= 10;
|
||||
}
|
||||
else
|
||||
line2Buffer[i] = ' ';
|
||||
}
|
||||
line2Buffer[11] = 'H';
|
||||
line2Buffer[12] = 'z';
|
||||
|
||||
line2Buffer[13] = ' ';
|
||||
//if (
|
||||
//Check CW Key cwKeyType = 0; //0: straight, 1 : iambica, 2: iambicb
|
||||
if (cwKeyType == 0)
|
||||
{
|
||||
line2Buffer[14] = 'S';
|
||||
line2Buffer[15] = 'T';
|
||||
}
|
||||
else if (cwKeyType == 1)
|
||||
{
|
||||
line2Buffer[14] = 'I';
|
||||
line2Buffer[15] = 'A';
|
||||
}
|
||||
else
|
||||
{
|
||||
line2Buffer[14] = 'I';
|
||||
line2Buffer[15] = 'B';
|
||||
}
|
||||
}
|
||||
|
||||
void idle_process()
|
||||
{
|
||||
//space for user graphic display
|
||||
if (menuOn == 0)
|
||||
{
|
||||
//if line2DisplayStatus == 0 <-- this condition is clear Line, you can display any message
|
||||
if (line2DisplayStatus == 0 || (((displayOption1 & 0x04) == 0x04) && line2DisplayStatus == 2)) {
|
||||
updateLine2Buffer();
|
||||
printLine2(line2Buffer);
|
||||
line2DisplayStatus = 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -91,8 +91,6 @@ void cwKeyUp(){
|
||||
#define IAMBICB 0x10 // 0 for Iambic A, 1 for Iambic B
|
||||
enum KSTYPE {IDLE, CHK_DIT, CHK_DAH, KEYED_PREP, KEYED, INTER_ELEMENT };
|
||||
static long ktimer;
|
||||
bool Iambic_Key = true;
|
||||
unsigned char keyerControl = IAMBICB;
|
||||
unsigned char keyerState = IDLE;
|
||||
|
||||
//Below is a test to reduce the keying error. do not delete lines
|
||||
@@ -101,17 +99,17 @@ char update_PaddleLatch(byte isUpdateKeyState) {
|
||||
unsigned char tmpKeyerControl;
|
||||
int paddle = analogRead(ANALOG_KEYER);
|
||||
|
||||
if (paddle > cwAdcDashFrom && paddle < cwAdcDashTo)
|
||||
if (paddle >= cwAdcDashFrom && paddle <= cwAdcDashTo)
|
||||
tmpKeyerControl |= DAH_L;
|
||||
else if (paddle > cwAdcDotFrom && paddle < cwAdcDotTo)
|
||||
else if (paddle >= cwAdcDotFrom && paddle <= cwAdcDotTo)
|
||||
tmpKeyerControl |= DIT_L;
|
||||
else if (paddle > cwAdcBothFrom && paddle < cwAdcBothTo)
|
||||
else if (paddle >= cwAdcBothFrom && paddle <= cwAdcBothTo)
|
||||
tmpKeyerControl |= (DAH_L | DIT_L) ;
|
||||
else
|
||||
{
|
||||
if (Iambic_Key)
|
||||
tmpKeyerControl = 0 ;
|
||||
else if (paddle > cwAdcSTFrom && paddle < cwAdcSTTo)
|
||||
else if (paddle >= cwAdcSTFrom && paddle <= cwAdcSTTo)
|
||||
tmpKeyerControl = DIT_L ;
|
||||
else
|
||||
tmpKeyerControl = 0 ;
|
||||
|
@@ -119,30 +119,56 @@ void menuBand(int btn){
|
||||
}
|
||||
|
||||
//Convert Mode, Number by KD8CEC
|
||||
//0: default, 1:not use, 2:LSB, 3:USB, 4:CW, 5:AM, 6:FM
|
||||
//0: default, 1:not use, 2:LSB, 3:USB, 4:CWL, 5:CWU, 6:FM
|
||||
byte modeToByte(){
|
||||
if (isUSB)
|
||||
return 3;
|
||||
if (cwMode == 0)
|
||||
{
|
||||
if (isUSB)
|
||||
return 3;
|
||||
else
|
||||
return 2;
|
||||
}
|
||||
else if (cwMode == 1)
|
||||
{
|
||||
return 4;
|
||||
}
|
||||
else
|
||||
return 2;
|
||||
{
|
||||
return 5;
|
||||
}
|
||||
}
|
||||
|
||||
//Convert Number to Mode by KD8CEC
|
||||
void byteToMode(byte modeValue){
|
||||
if (modeValue == 3)
|
||||
isUSB = 1;
|
||||
if (modeValue == 4)
|
||||
cwMode = 1;
|
||||
else if (modeValue == 5)
|
||||
cwMode = 2;
|
||||
else
|
||||
isUSB = 0;
|
||||
{
|
||||
cwMode = 0;
|
||||
if (modeValue == 3)
|
||||
isUSB = 1;
|
||||
else
|
||||
isUSB = 0;
|
||||
}
|
||||
}
|
||||
|
||||
//Convert Number to Mode by KD8CEC
|
||||
void byteWithFreqToMode(byte modeValue){
|
||||
if (modeValue == 3)
|
||||
isUSB = 1;
|
||||
else if (modeValue == 0) //Not Set
|
||||
isUSB = (frequency > 10000000l) ? true : false;
|
||||
else
|
||||
isUSB = 0;
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
//VFO Toggle and save VFO Information, modified by KD8CEC
|
||||
@@ -212,6 +238,7 @@ void menuRitToggle(int btn){
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
void menuSidebandToggle(int btn){
|
||||
if (!btn){
|
||||
if (isUSB == true)
|
||||
@@ -220,6 +247,7 @@ void menuSidebandToggle(int btn){
|
||||
printLineF2(F("Select USB?"));
|
||||
}
|
||||
else {
|
||||
cwMode = 0;
|
||||
if (isUSB == true){
|
||||
isUSB = false;
|
||||
printLineF2(F("LSB Selected"));
|
||||
@@ -234,7 +262,136 @@ void menuSidebandToggle(int btn){
|
||||
menuOn = 0;
|
||||
}
|
||||
}
|
||||
*/
|
||||
void menuSelectMode(int btn){
|
||||
int knob = 0;
|
||||
int selectModeType = 0;
|
||||
int beforeMode = 0;
|
||||
int moveStep = 0;
|
||||
|
||||
if (!btn){
|
||||
printLineF2(F("Select Mode?"));
|
||||
}
|
||||
else {
|
||||
delay_background(500, 0);
|
||||
|
||||
//LSB, USB, CWL, CWU
|
||||
if (cwMode == 0 && isUSB == 0)
|
||||
selectModeType = 0;
|
||||
else if (cwMode == 0 && isUSB == 1)
|
||||
selectModeType = 1;
|
||||
else if (cwMode == 1)
|
||||
selectModeType = 2;
|
||||
else
|
||||
selectModeType = 3;
|
||||
|
||||
beforeMode = selectModeType;
|
||||
|
||||
while(!btnDown() && digitalRead(PTT) == HIGH){
|
||||
//Display Mode Name
|
||||
if (selectModeType == 0)
|
||||
printLineF1(F("LSB"));
|
||||
else if (selectModeType == 1)
|
||||
printLineF1(F("USB"));
|
||||
else if (selectModeType == 2)
|
||||
printLineF1(F("CWL"));
|
||||
else if (selectModeType == 3)
|
||||
printLineF1(F("CWU"));
|
||||
|
||||
knob = enc_read();
|
||||
|
||||
if (knob != 0)
|
||||
{
|
||||
moveStep += (knob > 0 ? 1 : -1);
|
||||
if (moveStep < -3) {
|
||||
if (selectModeType > 0)
|
||||
selectModeType--;
|
||||
|
||||
moveStep = 0;
|
||||
}
|
||||
else if (moveStep > 3) {
|
||||
if (selectModeType < 3)
|
||||
selectModeType++;
|
||||
|
||||
moveStep = 0;
|
||||
}
|
||||
}
|
||||
|
||||
Check_Cat(0); //To prevent disconnections
|
||||
}
|
||||
|
||||
if (beforeMode != selectModeType) {
|
||||
printLineF1(F("Changed Mode"));
|
||||
|
||||
if (selectModeType == 0) {
|
||||
cwMode = 0; isUSB = 0;
|
||||
}
|
||||
else if (selectModeType == 1) {
|
||||
cwMode = 0; isUSB = 1;
|
||||
}
|
||||
else if (selectModeType == 2) {
|
||||
cwMode = 1;
|
||||
}
|
||||
else if (selectModeType == 3) {
|
||||
cwMode = 2;
|
||||
}
|
||||
|
||||
//Save Frequency & Mode Information
|
||||
if (vfoActive == VFO_A)
|
||||
{
|
||||
vfoA = frequency;
|
||||
vfoA_mode = modeToByte();
|
||||
storeFrequencyAndMode(1);
|
||||
}
|
||||
else
|
||||
{
|
||||
vfoB = frequency;
|
||||
vfoB_mode = modeToByte();
|
||||
storeFrequencyAndMode(2);
|
||||
}
|
||||
}
|
||||
|
||||
if (cwMode == 0)
|
||||
si5351bx_setfreq(0, usbCarrier); //set back the carrier oscillator anyway, cw tx switches it off
|
||||
else
|
||||
si5351bx_setfreq(0, cwmCarrier); //set back the carrier oscillator anyway, cw tx switches it off
|
||||
|
||||
setFrequency(frequency);
|
||||
delay_background(500, 0);
|
||||
printLine2ClearAndUpdate();
|
||||
menuOn = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void menuSplitOnOff(int btn){
|
||||
if (!btn){
|
||||
if (splitOn == 0)
|
||||
printLineF2(F("Split On?"));
|
||||
else
|
||||
printLineF2(F("Split Off?"));
|
||||
}
|
||||
else {
|
||||
if (splitOn == 1){
|
||||
splitOn = 0;
|
||||
printLineF2(F("Split Off!"));
|
||||
}
|
||||
else {
|
||||
splitOn = 1;
|
||||
if (ritOn == 1)
|
||||
ritOn = 0;
|
||||
printLineF2(F("Split On!"));
|
||||
}
|
||||
delay_background(500, 0);
|
||||
printLine2ClearAndUpdate();
|
||||
menuOn = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
//Select CW Key Type by KD8CEC
|
||||
void menuSetupKeyType(int btn){
|
||||
if (!btn && digitalRead(PTT) == HIGH){
|
||||
@@ -269,6 +426,73 @@ void menuSetupKeyType(int btn){
|
||||
menuOn = 0;
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
//Select CW Key Type by KD8CEC
|
||||
void menuSetupKeyType(int btn){
|
||||
int knob = 0;
|
||||
int selectedKeyType = 0;
|
||||
int moveStep = 0;
|
||||
if (!btn && digitalRead(PTT) == HIGH){
|
||||
printLineF2(F("Change Key Type?"));
|
||||
}
|
||||
else {
|
||||
printLineF2(F("Press PTT to set"));
|
||||
delay_background(500, 0);
|
||||
selectedKeyType = cwKeyType;
|
||||
while(!btnDown() && digitalRead(PTT) == HIGH){
|
||||
|
||||
//Display Key Type
|
||||
if (selectedKeyType == 0)
|
||||
printLineF1(F("Straight"));
|
||||
else if (selectedKeyType == 1)
|
||||
printLineF1(F("IAMBICA"));
|
||||
else if (selectedKeyType == 2)
|
||||
printLineF1(F("IAMBICB"));
|
||||
|
||||
knob = enc_read();
|
||||
|
||||
if (knob != 0)
|
||||
{
|
||||
moveStep += (knob > 0 ? 1 : -1);
|
||||
if (moveStep < -3) {
|
||||
if (selectedKeyType > 0)
|
||||
selectedKeyType--;
|
||||
moveStep = 0;
|
||||
}
|
||||
else if (moveStep > 3) {
|
||||
if (selectedKeyType < 2)
|
||||
selectedKeyType++;
|
||||
moveStep = 0;
|
||||
}
|
||||
}
|
||||
|
||||
Check_Cat(0); //To prevent disconnections
|
||||
}
|
||||
|
||||
//save the setting
|
||||
if (digitalRead(PTT) == LOW){
|
||||
printLineF2(F("CW Key Type set!"));
|
||||
cwKeyType = selectedKeyType;
|
||||
EEPROM.put(CW_KEY_TYPE, cwKeyType);
|
||||
|
||||
if (cwKeyType == 0)
|
||||
Iambic_Key = false;
|
||||
else
|
||||
{
|
||||
Iambic_Key = true;
|
||||
if (cwKeyType = 1)
|
||||
keyerControl &= ~IAMBICB;
|
||||
else
|
||||
keyerControl |= IAMBICB;
|
||||
}
|
||||
delay_background(2000, 0);
|
||||
}
|
||||
|
||||
printLine2ClearAndUpdate();
|
||||
menuOn = 0;
|
||||
}
|
||||
}
|
||||
|
||||
//Analog pin monitoring with CW Key and function keys connected.
|
||||
//by KD8CEC
|
||||
@@ -617,6 +841,7 @@ void factoryCalibration(int btn){
|
||||
|
||||
calibration = 0;
|
||||
|
||||
cwMode = 0;
|
||||
isUSB = true;
|
||||
|
||||
//turn off the second local oscillator and the bfo
|
||||
@@ -734,7 +959,6 @@ void menuSetupCalibration(int btn){
|
||||
menuOn = 0;
|
||||
}
|
||||
|
||||
|
||||
void printCarrierFreq(unsigned long freq){
|
||||
|
||||
memset(c, 0, sizeof(c));
|
||||
@@ -746,7 +970,7 @@ void printCarrierFreq(unsigned long freq){
|
||||
strcat(c, ".");
|
||||
strncat(c, &b[2], 3);
|
||||
strcat(c, ".");
|
||||
strncat(c, &b[5], 1);
|
||||
strncat(c, &b[5], 3);
|
||||
printLine2(c);
|
||||
}
|
||||
|
||||
@@ -798,12 +1022,71 @@ void menuSetupCarrier(int btn){
|
||||
else
|
||||
usbCarrier = prevCarrier;
|
||||
|
||||
si5351bx_setfreq(0, usbCarrier);
|
||||
//si5351bx_setfreq(0, usbCarrier);
|
||||
if (cwMode == 0)
|
||||
si5351bx_setfreq(0, usbCarrier); //set back the carrier oscillator anyway, cw tx switches it off
|
||||
else
|
||||
si5351bx_setfreq(0, cwmCarrier); //set back the carrier oscillator anyway, cw tx switches it off
|
||||
|
||||
setFrequency(frequency);
|
||||
printLine2ClearAndUpdate();
|
||||
menuOn = 0;
|
||||
}
|
||||
|
||||
//Append by KD8CEC
|
||||
void menuSetupCWCarrier(int btn){
|
||||
int knob = 0;
|
||||
unsigned long prevCarrier;
|
||||
|
||||
if (!btn){
|
||||
printLineF2(F("Set CW RX BFO"));
|
||||
return;
|
||||
}
|
||||
|
||||
prevCarrier = cwmCarrier;
|
||||
printLineF1(F("PTT to confirm. "));
|
||||
delay_background(1000, 0);
|
||||
|
||||
si5351bx_setfreq(0, cwmCarrier);
|
||||
printCarrierFreq(cwmCarrier);
|
||||
|
||||
//disable all clock 1 and clock 2
|
||||
while (digitalRead(PTT) == HIGH && !btnDown())
|
||||
{
|
||||
knob = enc_read();
|
||||
|
||||
if (knob > 0)
|
||||
cwmCarrier -= 5;
|
||||
else if (knob < 0)
|
||||
cwmCarrier += 5;
|
||||
else
|
||||
continue; //don't update the frequency or the display
|
||||
|
||||
si5351bx_setfreq(0, cwmCarrier);
|
||||
printCarrierFreq(cwmCarrier);
|
||||
|
||||
Check_Cat(0); //To prevent disconnections
|
||||
delay(100);
|
||||
}
|
||||
|
||||
//save the setting
|
||||
if (digitalRead(PTT) == LOW){
|
||||
printLineF2(F("Carrier set!"));
|
||||
EEPROM.put(CW_CAL, cwmCarrier);
|
||||
delay_background(1000, 0);
|
||||
}
|
||||
else
|
||||
cwmCarrier = prevCarrier;
|
||||
|
||||
if (cwMode == 0)
|
||||
si5351bx_setfreq(0, usbCarrier); //set back the carrier oscillator anyway, cw tx switches it off
|
||||
else
|
||||
si5351bx_setfreq(0, cwmCarrier); //set back the carrier oscillator anyway, cw tx switches it off
|
||||
|
||||
setFrequency(frequency);
|
||||
printLine2ClearAndUpdate();
|
||||
menuOn = 0;
|
||||
}
|
||||
//Modified by KD8CEC
|
||||
void menuSetupCwTone(int btn){
|
||||
int knob = 0;
|
||||
@@ -960,7 +1243,7 @@ void doMenu(){
|
||||
btnState = btnDown();
|
||||
|
||||
if (i > 0){
|
||||
if (modeCalibrate && select + i < 170)
|
||||
if (modeCalibrate && select + i < 190)
|
||||
select += i;
|
||||
if (!modeCalibrate && select + i < 80)
|
||||
select += i;
|
||||
@@ -978,7 +1261,7 @@ void doMenu(){
|
||||
else if (select < 30)
|
||||
menuVfoToggle(btnState, 1);
|
||||
else if (select < 40)
|
||||
menuSidebandToggle(btnState);
|
||||
menuSelectMode(btnState);
|
||||
else if (select < 50)
|
||||
menuCWSpeed(btnState);
|
||||
else if (select < 60)
|
||||
@@ -992,18 +1275,22 @@ void doMenu(){
|
||||
else if (select < 100 && modeCalibrate)
|
||||
menuSetupCarrier(btnState); //lsb
|
||||
else if (select < 110 && modeCalibrate)
|
||||
menuSetupCwTone(btnState);
|
||||
menuSetupCWCarrier(btnState); //lsb
|
||||
else if (select < 120 && modeCalibrate)
|
||||
menuSetupCwDelay(btnState);
|
||||
menuSetupCwTone(btnState);
|
||||
else if (select < 130 && modeCalibrate)
|
||||
menuSetupTXCWInterval(btnState);
|
||||
menuSetupCwDelay(btnState);
|
||||
else if (select < 140 && modeCalibrate)
|
||||
menuSetupKeyType(btnState);
|
||||
menuSetupTXCWInterval(btnState);
|
||||
else if (select < 150 && modeCalibrate)
|
||||
menuADCMonitor(btnState);
|
||||
menuSetupKeyType(btnState);
|
||||
else if (select < 160 && modeCalibrate)
|
||||
menuTxOnOff(btnState, 0x01); //TX OFF / ON
|
||||
menuADCMonitor(btnState);
|
||||
else if (select < 170 && modeCalibrate)
|
||||
menuSplitOnOff(btnState); //SplitOn / off
|
||||
else if (select < 180 && modeCalibrate)
|
||||
menuTxOnOff(btnState, 0x01); //TX OFF / ON
|
||||
else if (select < 190 && modeCalibrate)
|
||||
menuExit(btnState);
|
||||
|
||||
Check_Cat(0); //To prevent disconnections
|
||||
|
@@ -109,7 +109,11 @@ void initOscillators(){
|
||||
//initialize the SI5351
|
||||
si5351bx_init();
|
||||
si5351bx_vcoa = (SI5351BX_XTAL * SI5351BX_MSA) + calibration; // apply the calibration correction factor
|
||||
si5351bx_setfreq(0, usbCarrier);
|
||||
|
||||
if (cwMode == 0)
|
||||
si5351bx_setfreq(0, usbCarrier);
|
||||
else
|
||||
si5351bx_setfreq(0, cwmCarrier);
|
||||
}
|
||||
|
||||
|
||||
|
@@ -116,6 +116,9 @@ void drawMeter(int8_t needle){
|
||||
|
||||
// The generic routine to display one line on the LCD
|
||||
void printLine(unsigned char linenmbr, const char *c) {
|
||||
if ((displayOption1 & 0x01) == 0x01)
|
||||
linenmbr = (linenmbr == 0 ? 1 : 0); //Line Toggle
|
||||
|
||||
if (strcmp(c, printBuff[linenmbr])) { // only refresh the display when there was a change
|
||||
lcd.setCursor(0, linenmbr); // place the cursor at the beginning of the selected line
|
||||
lcd.print(c);
|
||||
@@ -145,6 +148,9 @@ void printLineF(char linenmbr, const __FlashStringHelper *c)
|
||||
|
||||
#define LCD_MAX_COLUMN 16
|
||||
void printLineFromEEPRom(char linenmbr, char lcdColumn, byte eepromStartIndex, byte eepromEndIndex) {
|
||||
if ((displayOption1 & 0x01) == 0x01)
|
||||
linenmbr = (linenmbr == 0 ? 1 : 0); //Line Toggle
|
||||
|
||||
lcd.setCursor(lcdColumn, linenmbr);
|
||||
|
||||
for (byte i = eepromStartIndex; i <= eepromEndIndex; i++)
|
||||
@@ -168,6 +174,12 @@ void printLine2(const char *c){
|
||||
printLine(0,c);
|
||||
}
|
||||
|
||||
void clearLine2()
|
||||
{
|
||||
printLine2("");
|
||||
line2DisplayStatus = 0;
|
||||
}
|
||||
|
||||
// short cut to print to the first line
|
||||
void printLine1Clear(){
|
||||
printLine(1,"");
|
||||
@@ -179,6 +191,7 @@ void printLine2Clear(){
|
||||
|
||||
void printLine2ClearAndUpdate(){
|
||||
printLine(0, "");
|
||||
line2DisplayStatus = 0;
|
||||
updateDisplay();
|
||||
}
|
||||
|
||||
@@ -221,10 +234,21 @@ void updateDisplay() {
|
||||
if (ritOn)
|
||||
strcpy(c, "RIT ");
|
||||
else {
|
||||
if (isUSB)
|
||||
strcpy(c, "USB ");
|
||||
if (cwMode == 0)
|
||||
{
|
||||
if (isUSB)
|
||||
strcpy(c, "USB ");
|
||||
else
|
||||
strcpy(c, "LSB ");
|
||||
}
|
||||
else if (cwMode == 1)
|
||||
{
|
||||
strcpy(c, "CWL ");
|
||||
}
|
||||
else
|
||||
strcpy(c, "LSB ");
|
||||
{
|
||||
strcpy(c, "CWU ");
|
||||
}
|
||||
}
|
||||
if (vfoActive == VFO_A) // VFO A is active
|
||||
strcat(c, "A:");
|
||||
@@ -251,18 +275,22 @@ void updateDisplay() {
|
||||
// strcat(c, " TX");
|
||||
printLine(1, c);
|
||||
|
||||
byte diplayVFOLine = 1;
|
||||
if ((displayOption1 & 0x01) == 0x01)
|
||||
diplayVFOLine = 0;
|
||||
|
||||
if ((vfoActive == VFO_A && ((isDialLock & 0x01) == 0x01)) ||
|
||||
(vfoActive == VFO_B && ((isDialLock & 0x02) == 0x02))) {
|
||||
lcd.setCursor(5,1);
|
||||
lcd.setCursor(5,diplayVFOLine);
|
||||
lcd.write((uint8_t)0);
|
||||
}
|
||||
else if (isCWAutoMode == 2){
|
||||
lcd.setCursor(5,1);
|
||||
lcd.setCursor(5,diplayVFOLine);
|
||||
lcd.write(0x7E);
|
||||
}
|
||||
else
|
||||
{
|
||||
lcd.setCursor(5,1);
|
||||
lcd.setCursor(5,diplayVFOLine);
|
||||
lcd.write(":");
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user