From 12984486a6cc4d3d663f4cd5b970c3fd1fe37b1c Mon Sep 17 00:00:00 2001 From: phdlee Date: Thu, 3 May 2018 16:20:09 +0900 Subject: [PATCH 1/3] Modfied SMeter and CAT --- VersionInfo.txt | 27 +++++++++++ ubitx_20/cat_libs.ino | 33 +++++++++++-- ubitx_20/ubitx.h | 7 ++- ubitx_20/ubitx_20.ino | 6 ++- ubitx_20/ubitx_lcd_1602.ino | 22 +++------ ubitx_20/ubitx_lcd_1602Dual.ino | 13 ++---- ubitx_20/ubitx_lcd_2004.ino | 82 ++------------------------------- ubitx_20/ubitx_ui.ino | 22 +++++++-- 8 files changed, 100 insertions(+), 112 deletions(-) create mode 100644 VersionInfo.txt diff --git a/VersionInfo.txt b/VersionInfo.txt new file mode 100644 index 0000000..7167345 --- /dev/null +++ b/VersionInfo.txt @@ -0,0 +1,27 @@ +This file will guide you to change the source code file. +For Windows-based Arduino IDE users, the directory name and the Main source file name must be the same. +You do not need to learn github to download .hex files or source code that I release. +However, if you want to see what I'm doing right now, you should use the github homepage. + +You do not need to learn git to suggest source code. If you give me an e-mail, I will correct it at any time. +If you have not joined the BITX Group, join group. There will be discussions on various topics every day. +I am getting a lot of hints from the group. + +Ian KD8CEC +kd8cec@gmail.com +================================================================== +Files modified in Version1.074 Beta + +1.Delted Files. + +2.Added Files + +3.Modified Files + - ubitx_20.ino + - ubitx_ui.ino + - cat_libs.ino + - ubitx.h + - ubitx_eemap.h + + + \ No newline at end of file diff --git a/ubitx_20/cat_libs.ino b/ubitx_20/cat_libs.ino index 3ae0844..3e71855 100644 --- a/ubitx_20/cat_libs.ino +++ b/ubitx_20/cat_libs.ino @@ -31,8 +31,8 @@ along with this program. If not, see . **************************************************************************/ -#define printLineF1(x) (printLineF(1, x)) -#define printLineF2(x) (printLineF(0, x)) + +#include "ubitx.h" //for broken protocol #define CAT_RECEIVE_TIMEOUT 500 @@ -654,7 +654,7 @@ void SetIFSValue(void) //void CatRxStatus(byte fromType) void CatRxStatus(void) //for remove warning { - byte sMeterValue = 1; + byte sMeterValue = 0; /* http://www.ka7oei.com/ft817_meow.html @@ -667,6 +667,33 @@ void CatRxStatus(void) //for remove warning Bit 7 is 0 if there is a signal present, or 1 if the receiver is squelched. */ // The lower 4 bits (0-3) of this byte indicate the current S-meter reading. 00 refers to an S-Zero reading, 04 = S4, 09 = S9, 0A = "10 over," 0B = "20 over" and so on up to 0F. + //0~8 + switch (scaledSMeter) + { + case 8 : sMeterValue = 0x0B; + break; + case 7 : sMeterValue = 0x0A; + break; + case 6 : sMeterValue = 0x09; + break; + case 5 : sMeterValue = 0x07; + break; + case 4 : sMeterValue = 0x05; + break; + case 3 : sMeterValue = 0x04; + break; + case 2 : sMeterValue = 0x02; + break; + case 1 : sMeterValue = 0x01; + break; + } + +/* + sMeterValue = (scaledSMeter * 2) -1; + if (sMeterValue > 0) + sMeterValue--; +*/ + CAT_BUFF[0] = sMeterValue & 0b00001111; SendCatData(1); } diff --git a/ubitx_20/ubitx.h b/ubitx_20/ubitx.h index d1ca476..09334e5 100644 --- a/ubitx_20/ubitx.h +++ b/ubitx_20/ubitx.h @@ -36,8 +36,8 @@ #define EXTEND_KEY_GROUP1 //MODE, BAND(-), BAND(+), STEP //#define EXTEND_KEY_GROUP2 //Numeric (0~9), Point(.), Enter //Not supported in Version 1.0x -#define ENABLE_FACTORYALIGN -//#define ENABLE_ADCMONITOR //Starting with Version 1.07, you can read ADC values directly from uBITX Manager. So this function is not necessary. +//#define ENABLE_FACTORYALIGN +#define ENABLE_ADCMONITOR //Starting with Version 1.07, you can read ADC values directly from uBITX Manager. So this function is not necessary. extern byte I2C_LCD_MASTER_ADDRESS; //0x27 //if Set I2C Address by uBITX Manager, read from EEProm extern byte I2C_LCD_SECOND_ADDRESS; //only using Dual LCD Mode @@ -149,6 +149,9 @@ extern byte I2C_LCD_SECOND_ADDRESS; //only using Dual LCD Mode extern unsigned long frequency; extern byte WsprMSGCount; extern byte sMeterLevels[9]; +extern int currentSMeter; //ADC Value for S.Meter +extern byte scaledSMeter; //Calculated S.Meter Level + extern byte KeyValues[16][3]; //Set : Start Value, End Value, Key Type, 16 Set (3 * 16 = 48) extern void printLine1(const char *c); diff --git a/ubitx_20/ubitx_20.ino b/ubitx_20/ubitx_20.ino index 00d509d..764e52d 100644 --- a/ubitx_20/ubitx_20.ino +++ b/ubitx_20/ubitx_20.ino @@ -6,7 +6,7 @@ // 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. -#define FIRMWARE_VERSION_INFO F("+v1.073") +#define FIRMWARE_VERSION_INFO F("+v1.074") #define FIRMWARE_VERSION_NUM 0x02 //1st Complete Project : 1 (Version 1.061), 2st Project : 2 /** @@ -182,6 +182,10 @@ byte line2DisplayStatus = 0; //0:Clear, 1 : menu, 1: DisplayFrom Idle, char lcdMeter[17]; byte sMeterLevels[9]; +//Current ADC Value for S.Meter, and S Meter Level +int currentSMeter = 0; +byte scaledSMeter = 0; + byte I2C_LCD_MASTER_ADDRESS; //0x27 //if Set I2C Address by uBITX Manager, read from EEProm byte I2C_LCD_SECOND_ADDRESS; //only using Dual LCD Mode diff --git a/ubitx_20/ubitx_lcd_1602.ino b/ubitx_20/ubitx_lcd_1602.ino index 4315da4..a6c1c3a 100644 --- a/ubitx_20/ubitx_lcd_1602.ino +++ b/ubitx_20/ubitx_lcd_1602.ino @@ -708,19 +708,15 @@ void DisplayMeter(byte meterType, byte meterValue, char drawPosition) LCD_SetCursor(drawPosition, lineNumber); - //for (int i = 0; i <26; i++) //meter 5 + +db 1 = 6 LCD_Write(lcdMeter[0]); LCD_Write(lcdMeter[1]); + LCD_Write(lcdMeter[2]); } } -byte testValue = 0; char checkCount = 0; char checkCountSMeter = 0; -int currentSMeter = 0; -byte scaledSMeter = 0; - void idle_process() { //space for user graphic display @@ -740,24 +736,18 @@ void idle_process() } } - //EX for Meters - /* - DisplayMeter(0, testValue++, 7); - if (testValue > 30) - testValue = 0; - */ - //S-Meter Display if (((displayOption1 & 0x08) == 0x08 && (sdrModeOn == 0)) && (++checkCountSMeter > SMeterLatency)) { int newSMeter; //VK2ETA S-Meter from MAX9814 TC pin / divide 4 by KD8CEC for reduce EEPromSize - newSMeter = analogRead(ANALOG_SMETER); + newSMeter = analogRead(ANALOG_SMETER) / 4; //Faster attack, Slower release - currentSMeter = (newSMeter > currentSMeter ? ((currentSMeter * 3 + newSMeter * 7) + 5) / 10 : ((currentSMeter * 7 + newSMeter * 3) + 5) / 10) / 4; - + //currentSMeter = (newSMeter > currentSMeter ? ((currentSMeter * 3 + newSMeter * 7) + 5) / 10 : ((currentSMeter * 7 + newSMeter * 3) + 5) / 10) / 4; + currentSMeter = newSMeter; + scaledSMeter = 0; for (byte s = 8; s >= 1; s--) { if (currentSMeter > sMeterLevels[s]) { @@ -766,7 +756,7 @@ void idle_process() } } - DisplayMeter(0, scaledSMeter, 14); + DisplayMeter(0, scaledSMeter, 13); checkCountSMeter = 0; //Reset Latency time } //end of S-Meter diff --git a/ubitx_20/ubitx_lcd_1602Dual.ino b/ubitx_20/ubitx_lcd_1602Dual.ino index e06a0cc..478f031 100644 --- a/ubitx_20/ubitx_lcd_1602Dual.ino +++ b/ubitx_20/ubitx_lcd_1602Dual.ino @@ -583,17 +583,13 @@ void DisplayMeter(byte meterType, byte meterValue, char drawPosition) LCD_Write('S'); LCD_Write(':'); - for (int i = 0; i < 6; i++) //meter 5 + +db 1 = 6 + for (int i = 0; i < 7; i++) LCD_Write(lcdMeter[i]); } } -byte testValue = 0; char checkCount = 0; - -int currentSMeter = 0; -byte scaledSMeter = 0; char checkCountSMeter = 0; char beforeKeyType = -1; @@ -676,12 +672,13 @@ void idle_process() int newSMeter; displaySDRON = 0; - //VK2ETA S-Meter from MAX9814 TC pin - newSMeter = analogRead(ANALOG_SMETER); + //VK2ETA S-Meter from MAX9814 TC pin / divide 4 by KD8CEC for reduce EEPromSize + newSMeter = analogRead(ANALOG_SMETER) / 4; //Faster attack, Slower release //currentSMeter = (newSMeter > currentSMeter ? ((currentSMeter * 3 + newSMeter * 7) + 5) / 10 : ((currentSMeter * 7 + newSMeter * 3) + 5) / 10); - currentSMeter = (currentSMeter * 3 + newSMeter * 7) / 10; //remarked becaused of have already Latency time + //currentSMeter = (currentSMeter * 3 + newSMeter * 7) / 10; //remarked becaused of have already Latency time + currentSMeter = newSMeter; scaledSMeter = 0; for (byte s = 8; s >= 1; s--) { diff --git a/ubitx_20/ubitx_lcd_2004.ino b/ubitx_20/ubitx_lcd_2004.ino index d470db7..5a0aa0d 100644 --- a/ubitx_20/ubitx_lcd_2004.ino +++ b/ubitx_20/ubitx_lcd_2004.ino @@ -642,90 +642,16 @@ void DisplayMeter(byte meterType, byte meterValue, char drawPosition) if (meterType == 0 || meterType == 1 || meterType == 2) { drawMeter(meterValue); - //int lineNumber = 0; - //if ((displayOption1 & 0x01) == 0x01) - //lineNumber = 1; LCD_SetCursor(drawPosition, 2); LCD_Write('S'); LCD_Write(':'); - for (int i = 0; i < 6; i++) //meter 5 + +db 1 = 6 + for (int i = 0; i < 7; i++) //meter 5 + +db 1 = 6 LCD_Write(lcdMeter[i]); } } - -//meterType : 0 = S.Meter, 1 = Forward Power Meter, 2 = SWR Meter -void DisplayMeter(byte meterType, int meterValue, char drawPosition) -{ - -#ifdef OPTION_SKINNYBARS //We want skinny meter bars with more text/numbers - memcpy(&(line2Buffer[drawPosition]), " ", 8); //Blank that section of 8 characters first - if (meterType == 0) { //SWR meter - drawMeter(meterValue); //Only 2 characters - line2Buffer[drawPosition] = 'S'; - byte sValue = round((float)meterValue * 1.5); //6 bars available only to show 9 S values - sValue = sValue > 9 ? 9 : sValue; //Max S9 - line2Buffer[drawPosition + 1] = '0' + sValue; //0 to 9 - memcpy(&(line2Buffer[drawPosition + 2]), lcdMeter, 2); //Copy the S-Meter bars - //Add the +10, +20, etc... - if (meterValue > 6) { - //We are over S9 - line2Buffer[drawPosition + 4] = '+'; - line2Buffer[drawPosition + 5] = '0' + meterValue - 6; //1,2,3 etc... - line2Buffer[drawPosition + 6] = '0'; - } - } else if (meterType == 1) { //Forward Power - drawMeter(round((float)meterValue / 40)); //4 watts per bar - //meterValue contains power value x 10 (one decimal point) - line2Buffer[drawPosition] = 'P'; - meterValue = meterValue > 999 ? 999 : meterValue; //Limit to 99.9 watts!!!! - //Remove decimal value and divide by 10 - meterValue = round((float)meterValue / 10); - if (meterValue < 10) { - line2Buffer[drawPosition + 1] = ' '; - line2Buffer[drawPosition + 2] = '0' + meterValue; //0 to 9 - } else { - line2Buffer[drawPosition + 1] = '0' + meterValue / 10; - line2Buffer[drawPosition + 2] = '0' + (meterValue - ((meterValue / 10) * 10)); - } - line2Buffer[drawPosition + 3] = 'W'; - memcpy(&(line2Buffer[drawPosition + 4]), lcdMeter, 2); //Copy the S-Meter bars - } else { //SWR - drawMeter((int)(((float)meterValue - 21) / 100)); //no bar = < 1.2, then 1 bar = 1.2 to 2.2, 2 bars = 2.2 to 3.2, etc... - //meterValue contains SWR x 100 (two decimal point) - memcpy(&(line2Buffer[drawPosition]), "SWR", 3); - meterValue = round((float)meterValue / 10); //We now have swr x 10 (1 decimal point) - if (meterValue < 100) { //10 to 99, no decimal point - //Draw the decimal value - line2Buffer[drawPosition + 3] = '0' + meterValue / 10; - line2Buffer[drawPosition + 4] = '.'; - line2Buffer[drawPosition + 5] = '0' + (meterValue - ((meterValue / 10) * 10)); - } else { - memcpy(&(line2Buffer[drawPosition + 3]), "10+", 3); //over 10 - } - memcpy(&(line2Buffer[drawPosition + 6]), lcdMeter, 2); //Copy the S-Meter bars - } -#else //We want fat bars, easy to read, with less text/numbers - //Serial.print("In displaymeter, meterValue: "); Serial.println(meterValue); - drawMeter(meterValue); - //Always line 2 - char sym = 'S'; - if (meterType == 1) sym = 'P'; - else if (meterType == 2) sym = 'R'; //For SWR - line2Buffer[drawPosition] = sym; - memcpy(&(line2Buffer[drawPosition + 1]), lcdMeter, 7); -#endif //OPTION_SKINNYBARS - -} - - -byte testValue = 0; char checkCount = 0; - -int currentSMeter = 0; -//int sMeterLevels[] = {0, 5, 17, 41, 74, 140, 255, 365, 470}; -byte scaledSMeter = 0; char checkCountSMeter = 0; //execute interval : 0.25sec @@ -769,10 +695,12 @@ void idle_process() int newSMeter; //VK2ETA S-Meter from MAX9814 TC pin - newSMeter = analogRead(ANALOG_SMETER); + newSMeter = analogRead(ANALOG_SMETER) / 4; //Faster attack, Slower release - currentSMeter = (newSMeter > currentSMeter ? ((currentSMeter * 3 + newSMeter * 7) + 5) / 10 : ((currentSMeter * 7 + newSMeter * 3) + 5) / 10); + //currentSMeter = (newSMeter > currentSMeter ? ((currentSMeter * 3 + newSMeter * 7) + 5) / 10 : ((currentSMeter * 7 + newSMeter * 3) + 5) / 10); + //currentSMeter = ((currentSMeter * 7 + newSMeter * 3) + 5) / 10; + currentSMeter = newSMeter; scaledSMeter = 0; for (byte s = 8; s >= 1; s--) { diff --git a/ubitx_20/ubitx_ui.ino b/ubitx_20/ubitx_ui.ino index c303daa..cf52eb0 100644 --- a/ubitx_20/ubitx_ui.ino +++ b/ubitx_20/ubitx_ui.ino @@ -95,7 +95,7 @@ void initMeter(){ for (i = 0; i < 8; i++) tmpbytes[i] = pgm_read_byte(p_metes_bitmap + i + 48); - LCD_CreateChar(6, tmpbytes); + LCD_CreateChar(7, tmpbytes); } @@ -128,13 +128,23 @@ void drawMeter(int needle) { #ifdef OPTION_SKINNYBARS //Fill buffer with growing set of bars, up to needle value + lcdMeter[0] = 0x20; + lcdMeter[1] = 0x20; for (int i = 0; i < 6; i++) { if (needle > i) lcdMeter[i / 3] = byte(i + 1); //Custom characters above - else if (i == 1 || i == 4) { - lcdMeter[i / 3] = 0x20; //blank - } + //else if (i == 1 || i == 4) { + // lcdMeter[i / 3] = 0x20; //blank + //} } + + if (needle > 7) { + lcdMeter[2] = byte(7); //Custom character "++" + } else if (needle > 6) { + lcdMeter[2] = '+'; //"+" + } else lcdMeter[2] = 0x20; + + #else //Must be "fat" bars //Fill buffer with growing set of bars, up to needle value for (int i = 0; i < 6; i++) { @@ -143,11 +153,13 @@ void drawMeter(int needle) else lcdMeter[i] = 0x20; //blank } + if (needle > 7) { lcdMeter[6] = byte(7); //Custom character "++" } else if (needle > 6) { - lcdMeter[6] = 0x2B; //"+" + lcdMeter[6] = '+'; //"+" } else lcdMeter[6] = 0x20; + #endif //OPTION_FATBARS } From 51f690ef85fd0bb40a5a0ad5c54efd7d3befade9 Mon Sep 17 00:00:00 2001 From: phdlee Date: Thu, 3 May 2018 17:57:06 +0900 Subject: [PATCH 2/3] change frequency display in WSPR Menu --- ubitx_20/ubitx_wspr.ino | 37 +++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/ubitx_20/ubitx_wspr.ino b/ubitx_20/ubitx_wspr.ino index eb85147..5765aca 100644 --- a/ubitx_20/ubitx_wspr.ino +++ b/ubitx_20/ubitx_wspr.ino @@ -113,22 +113,9 @@ void SendWSPRManage() EEPROM.get(bandBuffIndex, WsprTXFreq); EEPROM.get(bandBuffIndex + 4, WsprMultiChan); - /* - //3, 4, 5, 6, 7 - Wspr_Reg1[3] = EEPROM.read(bandBuffIndex + 6); - Wspr_Reg1[4] = EEPROM.read(bandBuffIndex + 7); - Wspr_Reg1[5] = EEPROM.read(bandBuffIndex + 8); - Wspr_Reg1[6] = EEPROM.read(bandBuffIndex + 9); - Wspr_Reg1[7] = EEPROM.read(bandBuffIndex + 10); - */ for (loopIndex = 3; loopIndex < 8; loopIndex++) Wspr_Reg1[loopIndex] = EEPROM.read(bandBuffIndex + loopIndex + 3); - /* - Wspr_Reg2[2] = EEPROM.read(bandBuffIndex + 11); - Wspr_Reg2[3] = EEPROM.read(bandBuffIndex + 12); - Wspr_Reg2[4] = EEPROM.read(bandBuffIndex + 13); - */ //2, 3, 4 for (loopIndex = 2; loopIndex < 5; loopIndex++) Wspr_Reg2[loopIndex] = EEPROM.read(bandBuffIndex + loopIndex + 9); @@ -136,18 +123,32 @@ void SendWSPRManage() TX_MSNB_P2 = ((unsigned long)Wspr_Reg1[5] & 0x0F) << 16 | ((unsigned long)Wspr_Reg1[6]) << 8 | Wspr_Reg1[7]; } - ltoa(WsprTXFreq, b, DEC); if (digitalRead(PTT) == 0) - strcpy(c, "SEND:"); + strcpy(c, "SEND: "); else - strcpy(c, "PTT->"); + strcpy(c, "PTT-> "); + + //ltoa(WsprTXFreq, b, DEC); + //strcat(c, b); + + //display frequency, Frequency to String for KD8CEC + unsigned long tmpFreq = WsprTXFreq; + for (int i = 15; i >= 6; i--) { + if (tmpFreq > 0) { + if (i == 12 || i == 8) c[i] = '.'; + else { + c[i] = tmpFreq % 10 + 0x30; + tmpFreq /= 10; + } + } + else + c[i] = ' '; + } - strcat(c, b); printLine1(c); if (digitalRead(PTT) == 0) { - //printLineF1(F("Transmitting")); //SEND WSPR //If you need to consider the Rit and Sprite modes, uncomment them below. //remark = To reduce the size of the program From 1d28f3e7e9dca8d608b4683808bb14747de444b2 Mon Sep 17 00:00:00 2001 From: phdlee Date: Thu, 3 May 2018 21:23:10 +0900 Subject: [PATCH 3/3] update versioninfo.txt --- VersionInfo.txt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/VersionInfo.txt b/VersionInfo.txt index 7167345..581a34a 100644 --- a/VersionInfo.txt +++ b/VersionInfo.txt @@ -22,6 +22,9 @@ Files modified in Version1.074 Beta - cat_libs.ino - ubitx.h - ubitx_eemap.h - + - ubitx_lcd_1602.ino + - ubitx_lcd_1602Dual.ino + - ubitx_lcd_2004.ino + -ubitx_wspr.ino \ No newline at end of file