Compare commits
4 Commits
v1.073
...
version1.0
Author | SHA1 | Date | |
---|---|---|---|
|
1d28f3e7e9 | ||
|
51f690ef85 | ||
|
12984486a6 | ||
|
e961cd8ac9 |
117
README.md
117
README.md
@@ -1,18 +1,28 @@
|
||||
#IMPORTANT INFORMATION
|
||||
----------------------------------------------------------------------------
|
||||
- Now Release Version 1.061 on my blog (http://www.hamskey.com)
|
||||
- You can download and compiled hex file and uBITX Manager application on my blog (http://www.hamskey.com)
|
||||
- Beta 0.26 and Beta 0.261, Beta 0.262, Beta 0.27 is complete test
|
||||
- You can download and use it.
|
||||
|
||||
#NOTICE
|
||||
----------------------------------------------------------------------------
|
||||
I received uBITX a month ago and found that many features are required, and began coding with the idea of implementing minimal functionality as a general hf transceiver rather than an experimental device.
|
||||
|
||||
- fixed bugs...
|
||||
- Diallock for uBITX's sensitive encoders
|
||||
- built in softare Memory keyer and cw options control for CW communication
|
||||
- Implementation of CAT communication protocol for Digital Communication (as FT8, JT65, etc)
|
||||
- Delay Options for external Linear.
|
||||
- and more...
|
||||
|
||||
Most of the basic functions of the HF transceiver I thought were implemented.
|
||||
The minimum basic specification for uBITX to operate as a radio, I think it is finished.
|
||||
So I will release the 0.27 version and if I do not see the bug anymore, I will try to change the version name to 1.0.
|
||||
Now uBITX is an HF radio and will be able to join you in your happy hams life.
|
||||
Based on this source, you can use it by adding functions.
|
||||
|
||||
I am going to do a new project based on this source, linking with WSPR, WSJT-X and so on.
|
||||
Of course, this repository is still running. If you have any bugs or ideas, please feel free to email me.
|
||||
|
||||
http://www.hamskey.com
|
||||
|
||||
DE KD8CEC
|
||||
@@ -26,105 +36,16 @@ The copyright information of the original is below.
|
||||
KD8CEC
|
||||
----------------------------------------------------------------------------
|
||||
Prepared or finished tasks for the next version
|
||||
- Reduce Program size
|
||||
- uBITX with RTL-SDR
|
||||
- Direct control for Student
|
||||
- Most of them are implemented and included in version 0.27.
|
||||
- User Interface on LCD -> Option by user (not need)
|
||||
- Include WSPR Beacone function - (implement other new repository)
|
||||
complete experiment
|
||||
need solve : Big code size (over 100%, then remove some functions for experment)
|
||||
need replace Si5351 Library (increase risk and need more beta tester)
|
||||
W3PM sent me his wonderful source - using BITX, GPS
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
## REVISION RECORD
|
||||
1.07 (Working...)
|
||||
- Please do not download it yet. The code will continue to change for the time being.
|
||||
- BetaVersion for Reduce program size
|
||||
|
||||
1.061
|
||||
- Added WSPR
|
||||
You only need uBITX to use WSPR. No external devices are required.
|
||||
Added Si5351 module for WSPR
|
||||
- Update uBITX Manager to Version 1.0
|
||||
- Reduce program size
|
||||
for WSPR
|
||||
for other Module
|
||||
- Fixed IF Shift Bug
|
||||
Disable IF Shift on TX
|
||||
IF shift available in USB mode
|
||||
Fixed cat routine in IF Shift setup
|
||||
- Bugs fixed
|
||||
cw start delay option
|
||||
Auto key Bug
|
||||
(found bug : LZ1LDO)
|
||||
Message selection when Auto Key is used in RIT mode
|
||||
(found bug : gerald)
|
||||
- Improve CW Keying (start TX)
|
||||
|
||||
1.05
|
||||
- include 1.05W, 1.051, 1.051W
|
||||
- for WSPR Beta Test Version
|
||||
|
||||
1.04
|
||||
- Optimized from Version1.03
|
||||
- Reduce program size (97% -> 95%)
|
||||
|
||||
1.03
|
||||
- Change eBFO Calibration Step (50 to 5)
|
||||
- Change CW Frequency Display type
|
||||
|
||||
1.02
|
||||
- Applied CW Start Delay to New CW Key logic (This is my mistake when applying the new CW Key Logic.Since uBITX operations are not significantly affected, this does not create a separate Release, It will be reflected in the next release.) - complete
|
||||
- Modified CW Key Logic for Auto Key, (available AutoKey function by any cw keytype) - complete
|
||||
- reduce cpu use usage (working)
|
||||
- reduce (working)
|
||||
|
||||
1.01
|
||||
- Fixed Cat problem with (IAMBIC A or B Selected)
|
||||
1.0
|
||||
- rename 0.30 to 1.0
|
||||
|
||||
0.35
|
||||
- vfo to channel bug fixed (not saved mode -> fixed, channel has frequency and mode)
|
||||
- add Channel tag (ch.1 ~ 10) by uBITX Manager
|
||||
- add VFO to Channel, Channel To VFO
|
||||
|
||||
0.34
|
||||
- TX Status check in auto Keysend logic
|
||||
- optimize codes
|
||||
- change default tune step size, and fixed bug
|
||||
- change IF shift step (1Hz -> 50Hz)
|
||||
|
||||
0.33
|
||||
- Added CWL, CWU Mode, (dont complete test yet)
|
||||
- fixed VFO changed bug.
|
||||
- Added Additional BFO for CWL, CWL
|
||||
- Added IF Shift
|
||||
- Change confirmation key PTT -> function key (not critical menus)
|
||||
- Change CW Key Select type, (toggle -> select by dial)
|
||||
|
||||
0.32
|
||||
- Added function Scroll Frequencty on upper line
|
||||
- Added Example code for Draw meter and remarked (you can see and use this code in source codes)
|
||||
- Added Split function, just toggle VFOs when TX/RX
|
||||
|
||||
0.31
|
||||
- Fixed CW ADC Range error
|
||||
- Display Message on Upper Line (anothor VFO Frequency, Tune Step, Selected Key Type)
|
||||
|
||||
0.30
|
||||
- implemented the function to monitor the value of all analog inputs. This allows you to monitor the status of the CW keys connected to your uBITX.
|
||||
- possible to set the ADC range for CW Keying. If no setting is made, it will have the same range as the original code. If you set the CW Keying ADC Values using uBITX Manager 0.3, you can reduce the key error.
|
||||
- Added the function to select Straight Key, IAMBICA, IAMBICB key from the menu.
|
||||
- default Band select is Ham Band mode, if you want common type, long press function key at band select menu, uBITX Manager can be used to modify frequencies to suit your country.
|
||||
|
||||
0.29
|
||||
- Remove the use of initialization values in BFO settings - using crruent value, if factory reset
|
||||
- Select Tune Step, default 0, 20, 50, 100, 200, Use the uBITX Manager to set the steps value you want. You can select Step by pressing and holding the Function Key (1sec ~ 2sec).
|
||||
- Modify Dial Lock Function, Press the Function key for more than 3 seconds to toggle dial lock.
|
||||
- created a new frequency tune method. remove original source codes, Threshold has been applied to reduce malfunction. checked the continuity of the user operating to make natural tune possible.
|
||||
- stabilize and remove many warning messages - by Pullrequest and merge
|
||||
- Changed cw keying method. removed the original code and applied Ron's code and Improved compatibility with original hardware and CAT commnication. It can be used without modification of hardware.
|
||||
|
||||
0.28
|
||||
- Fixed CAT problem with hamlib on Linux
|
||||
- restore Protocol autorecovery logic
|
||||
|
||||
0.27
|
||||
(First alpha test version, This will be renamed to the major version 1.0)
|
||||
- Dual VFO Dial Lock (vfoA Dial lock)
|
||||
|
30
VersionInfo.txt
Normal file
30
VersionInfo.txt
Normal file
@@ -0,0 +1,30 @@
|
||||
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
|
||||
- ubitx_lcd_1602.ino
|
||||
- ubitx_lcd_1602Dual.ino
|
||||
- ubitx_lcd_2004.ino
|
||||
-ubitx_wspr.ino
|
||||
|
||||
|
@@ -31,8 +31,8 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
**************************************************************************/
|
||||
#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);
|
||||
}
|
||||
|
@@ -14,6 +14,9 @@
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
**************************************************************************/
|
||||
#ifndef _UBITX_HEADER__
|
||||
#define _UBITX_HEADER__
|
||||
|
||||
#include <Arduino.h> //for Linux, On Linux it is case sensitive.
|
||||
|
||||
//==============================================================================
|
||||
@@ -33,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
|
||||
@@ -146,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);
|
||||
@@ -172,3 +178,7 @@ extern void SendWSPRManage(void);
|
||||
extern char byteToChar(byte srcByte);
|
||||
extern void DisplayCallsign(byte callSignLength);
|
||||
extern void DisplayVersionInfo(const char* fwVersionInfo);
|
||||
|
||||
#endif //end of if header define
|
||||
|
||||
|
||||
|
@@ -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
|
||||
|
||||
|
@@ -15,6 +15,9 @@
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
**************************************************************************/
|
||||
#ifndef _UBITX_EEPOM_HEADER__
|
||||
#define _UBITX_EEPOM_HEADER__
|
||||
|
||||
//==============================================================================
|
||||
// Factory-shipped EEProm address
|
||||
// (factory Firmware)
|
||||
@@ -125,3 +128,5 @@
|
||||
#define CW_DATA_OFSTADJ CW_AUTO_DATA - USER_CALLSIGN_DAT //offset adjust for ditect eeprom to lcd (basic offset is USER_CALLSIGN_DAT
|
||||
#define CW_STATION_LEN 1023 //value range : 4 ~ 30
|
||||
|
||||
#endif //end of if header define
|
||||
|
||||
|
64
ubitx_20/ubitx_lcd.h
Normal file
64
ubitx_20/ubitx_lcd.h
Normal file
@@ -0,0 +1,64 @@
|
||||
/*************************************************************************
|
||||
header file for LCD by KD8CEC
|
||||
-----------------------------------------------------------------------------
|
||||
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/>.
|
||||
**************************************************************************/
|
||||
#ifndef _UBITX_LCD_HEADER__
|
||||
#define _UBITX_LCD_HEADER__
|
||||
|
||||
//Common Defines *********************************************************
|
||||
#define LCD_CLEARDISPLAY 0x01
|
||||
#define LCD_RETURNHOME 0x02
|
||||
#define LCD_ENTRYMODESET 0x04
|
||||
#define LCD_DISPLAYCONTROL 0x08
|
||||
#define LCD_CURSORSHIFT 0x10
|
||||
#define LCD_FUNCTIONSET 0x20
|
||||
#define LCD_SETCGRAMADDR 0x40
|
||||
#define LCD_SETDDRAMADDR 0x80
|
||||
|
||||
// flags for display entry mode
|
||||
#define LCD_ENTRYRIGHT 0x00
|
||||
#define LCD_ENTRYLEFT 0x02
|
||||
#define LCD_ENTRYSHIFTINCREMENT 0x01
|
||||
#define LCD_ENTRYSHIFTDECREMENT 0x00
|
||||
|
||||
// flags for display on/off control
|
||||
#define LCD_DISPLAYON 0x04
|
||||
#define LCD_DISPLAYOFF 0x00
|
||||
#define LCD_CURSORON 0x02
|
||||
#define LCD_CURSOROFF 0x00
|
||||
#define LCD_BLINKON 0x01
|
||||
#define LCD_BLINKOFF 0x00
|
||||
|
||||
// flags for display/cursor shift
|
||||
#define LCD_DISPLAYMOVE 0x08
|
||||
#define LCD_CURSORMOVE 0x00
|
||||
#define LCD_MOVERIGHT 0x04
|
||||
#define LCD_MOVELEFT 0x00
|
||||
|
||||
// flags for function set
|
||||
#define LCD_8BITMODE 0x10
|
||||
#define LCD_4BITMODE 0x00
|
||||
#define LCD_2LINE 0x08
|
||||
#define LCD_1LINE 0x00
|
||||
#define LCD_5x10DOTS 0x04
|
||||
#define LCD_5x8DOTS 0x00
|
||||
|
||||
// flags for backlight control
|
||||
#define LCD_BACKLIGHT 0x08
|
||||
#define LCD_NOBACKLIGHT 0x00
|
||||
|
||||
#endif //end of if header define
|
||||
|
||||
|
@@ -21,48 +21,7 @@
|
||||
|
||||
**************************************************************************/
|
||||
#include "ubitx.h"
|
||||
|
||||
//Common Defines *********************************************************
|
||||
#define LCD_CLEARDISPLAY 0x01
|
||||
#define LCD_RETURNHOME 0x02
|
||||
#define LCD_ENTRYMODESET 0x04
|
||||
#define LCD_DISPLAYCONTROL 0x08
|
||||
#define LCD_CURSORSHIFT 0x10
|
||||
#define LCD_FUNCTIONSET 0x20
|
||||
#define LCD_SETCGRAMADDR 0x40
|
||||
#define LCD_SETDDRAMADDR 0x80
|
||||
|
||||
// flags for display entry mode
|
||||
#define LCD_ENTRYRIGHT 0x00
|
||||
#define LCD_ENTRYLEFT 0x02
|
||||
#define LCD_ENTRYSHIFTINCREMENT 0x01
|
||||
#define LCD_ENTRYSHIFTDECREMENT 0x00
|
||||
|
||||
// flags for display on/off control
|
||||
#define LCD_DISPLAYON 0x04
|
||||
#define LCD_DISPLAYOFF 0x00
|
||||
#define LCD_CURSORON 0x02
|
||||
#define LCD_CURSOROFF 0x00
|
||||
#define LCD_BLINKON 0x01
|
||||
#define LCD_BLINKOFF 0x00
|
||||
|
||||
// flags for display/cursor shift
|
||||
#define LCD_DISPLAYMOVE 0x08
|
||||
#define LCD_CURSORMOVE 0x00
|
||||
#define LCD_MOVERIGHT 0x04
|
||||
#define LCD_MOVELEFT 0x00
|
||||
|
||||
// flags for function set
|
||||
#define LCD_8BITMODE 0x10
|
||||
#define LCD_4BITMODE 0x00
|
||||
#define LCD_2LINE 0x08
|
||||
#define LCD_1LINE 0x00
|
||||
#define LCD_5x10DOTS 0x04
|
||||
#define LCD_5x8DOTS 0x00
|
||||
|
||||
// flags for backlight control
|
||||
#define LCD_BACKLIGHT 0x08
|
||||
#define LCD_NOBACKLIGHT 0x00
|
||||
#include "ubitx_lcd.h"
|
||||
|
||||
//========================================================================
|
||||
//Begin of TinyLCD Library by KD8CEC
|
||||
@@ -749,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
|
||||
@@ -781,23 +736,17 @@ 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--) {
|
||||
@@ -807,7 +756,7 @@ void idle_process()
|
||||
}
|
||||
}
|
||||
|
||||
DisplayMeter(0, scaledSMeter, 14);
|
||||
DisplayMeter(0, scaledSMeter, 13);
|
||||
checkCountSMeter = 0; //Reset Latency time
|
||||
} //end of S-Meter
|
||||
|
||||
|
@@ -21,48 +21,7 @@
|
||||
|
||||
**************************************************************************/
|
||||
#include "ubitx.h"
|
||||
|
||||
//Common Defines *********************************************************
|
||||
#define LCD_CLEARDISPLAY 0x01
|
||||
#define LCD_RETURNHOME 0x02
|
||||
#define LCD_ENTRYMODESET 0x04
|
||||
#define LCD_DISPLAYCONTROL 0x08
|
||||
#define LCD_CURSORSHIFT 0x10
|
||||
#define LCD_FUNCTIONSET 0x20
|
||||
#define LCD_SETCGRAMADDR 0x40
|
||||
#define LCD_SETDDRAMADDR 0x80
|
||||
|
||||
// flags for display entry mode
|
||||
#define LCD_ENTRYRIGHT 0x00
|
||||
#define LCD_ENTRYLEFT 0x02
|
||||
#define LCD_ENTRYSHIFTINCREMENT 0x01
|
||||
#define LCD_ENTRYSHIFTDECREMENT 0x00
|
||||
|
||||
// flags for display on/off control
|
||||
#define LCD_DISPLAYON 0x04
|
||||
#define LCD_DISPLAYOFF 0x00
|
||||
#define LCD_CURSORON 0x02
|
||||
#define LCD_CURSOROFF 0x00
|
||||
#define LCD_BLINKON 0x01
|
||||
#define LCD_BLINKOFF 0x00
|
||||
|
||||
// flags for display/cursor shift
|
||||
#define LCD_DISPLAYMOVE 0x08
|
||||
#define LCD_CURSORMOVE 0x00
|
||||
#define LCD_MOVERIGHT 0x04
|
||||
#define LCD_MOVELEFT 0x00
|
||||
|
||||
// flags for function set
|
||||
#define LCD_8BITMODE 0x10
|
||||
#define LCD_4BITMODE 0x00
|
||||
#define LCD_2LINE 0x08
|
||||
#define LCD_1LINE 0x00
|
||||
#define LCD_5x10DOTS 0x04
|
||||
#define LCD_5x8DOTS 0x00
|
||||
|
||||
// flags for backlight control
|
||||
#define LCD_BACKLIGHT 0x08
|
||||
#define LCD_NOBACKLIGHT 0x00
|
||||
#include "ubitx_lcd.h"
|
||||
|
||||
//========================================================================
|
||||
//Begin of I2CTinyLCD Library for Dual LCD by KD8CEC
|
||||
@@ -624,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;
|
||||
@@ -717,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--) {
|
||||
|
@@ -21,48 +21,7 @@
|
||||
|
||||
**************************************************************************/
|
||||
#include "ubitx.h"
|
||||
|
||||
//Common Defines *********************************************************
|
||||
#define LCD_CLEARDISPLAY 0x01
|
||||
#define LCD_RETURNHOME 0x02
|
||||
#define LCD_ENTRYMODESET 0x04
|
||||
#define LCD_DISPLAYCONTROL 0x08
|
||||
#define LCD_CURSORSHIFT 0x10
|
||||
#define LCD_FUNCTIONSET 0x20
|
||||
#define LCD_SETCGRAMADDR 0x40
|
||||
#define LCD_SETDDRAMADDR 0x80
|
||||
|
||||
// flags for display entry mode
|
||||
#define LCD_ENTRYRIGHT 0x00
|
||||
#define LCD_ENTRYLEFT 0x02
|
||||
#define LCD_ENTRYSHIFTINCREMENT 0x01
|
||||
#define LCD_ENTRYSHIFTDECREMENT 0x00
|
||||
|
||||
// flags for display on/off control
|
||||
#define LCD_DISPLAYON 0x04
|
||||
#define LCD_DISPLAYOFF 0x00
|
||||
#define LCD_CURSORON 0x02
|
||||
#define LCD_CURSOROFF 0x00
|
||||
#define LCD_BLINKON 0x01
|
||||
#define LCD_BLINKOFF 0x00
|
||||
|
||||
// flags for display/cursor shift
|
||||
#define LCD_DISPLAYMOVE 0x08
|
||||
#define LCD_CURSORMOVE 0x00
|
||||
#define LCD_MOVERIGHT 0x04
|
||||
#define LCD_MOVELEFT 0x00
|
||||
|
||||
// flags for function set
|
||||
#define LCD_8BITMODE 0x10
|
||||
#define LCD_4BITMODE 0x00
|
||||
#define LCD_2LINE 0x08
|
||||
#define LCD_1LINE 0x00
|
||||
#define LCD_5x10DOTS 0x04
|
||||
#define LCD_5x8DOTS 0x00
|
||||
|
||||
// flags for backlight control
|
||||
#define LCD_BACKLIGHT 0x08
|
||||
#define LCD_NOBACKLIGHT 0x00
|
||||
#include "ubitx_lcd.h"
|
||||
|
||||
//========================================================================
|
||||
//Begin of TinyLCD Library by KD8CEC
|
||||
@@ -683,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
|
||||
@@ -810,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--) {
|
||||
|
@@ -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
|
||||
}
|
||||
|
||||
|
@@ -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: ");
|
||||
else
|
||||
strcpy(c, "PTT-> ");
|
||||
|
||||
strcat(c, b);
|
||||
//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] = ' ';
|
||||
}
|
||||
|
||||
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
|
||||
|
Binary file not shown.
Reference in New Issue
Block a user