Initial Commit. Hello.
commit
2b7e2ae533
@ -0,0 +1,5 @@
|
||||
CHANGELOG:
|
||||
|
||||
There have been no revisions to any code as of the initial commit.
|
||||
|
||||
Stay tuned for development updates.
|
@ -0,0 +1,18 @@
|
||||
Copyright 2020 Jay Moore
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification, are permitted
|
||||
provided that the following conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice, this
|
||||
list of conditions and the following disclaimer.
|
||||
|
||||
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions
|
||||
and the following disclaimer in the documentation and/or other materials provided with the distribution.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
|
||||
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
||||
THE POSSIBILITY OF SUCH DAMAGE.
|
@ -0,0 +1,112 @@
|
||||
ArFO - Arduino Frequency Oscillator
|
||||
|
||||
A (mobile) remote head for your ham transceiver.
|
||||
|
||||
# History
|
||||
|
||||
```
|
||||
8-Feb-2020: Repository Creation, Intitial Commit, Alpha Versions
|
||||
|
||||
````
|
||||
|
||||
|
||||
# About
|
||||
|
||||
ArFO is an Arduino-based program that interfaces with an external display, external controls, and your ham rig;
|
||||
to allow you the convenience of a remote head for rigs that do not feature one. It is written in Arduino and
|
||||
commands your rig using it's CAT/CI-V connection. ArFO is a continuation/reboot of PiFO; a previous project
|
||||
that sought to do the same thing.
|
||||
|
||||
In addition to being able to control your operating mode, VFO, and a few other select options; ArFO also provides
|
||||
"advanced logic" for an otherwise older rig. When possible, it uses it's own programming rather than rely on the
|
||||
rig's internal functions. Planned features include a memory function, similar to what the proof-of-concept PiFO
|
||||
was; that will allow you to expand on the memory preset functions of older rigs as well as the ability to carry
|
||||
your memory presets with you between rigs. ArFO stores the frequency information and sends it to the radio as
|
||||
a frequency for the VFO.
|
||||
|
||||
ArFO will use it's own internal logic when necessary, meaning older rigs will get some new features. This means
|
||||
some limitations (like CI-V WARC band data) are irrelevant to ArFO as we can calculate and process things
|
||||
ourselves.
|
||||
|
||||
# Why The Change To Arduino
|
||||
|
||||
When I originally came up with the idea for PiFO; the Raspberry Pi seemed like the easest development solution. With
|
||||
existing software in it's repositories the original idea was just a basic python script to interface with these.
|
||||
However as I began developing it I found a lot of limitations in the existing solutions that did not perform the way
|
||||
I thought they should, or wanted it to.
|
||||
|
||||
The other problem with the RPi is the amount of time it takes to boot. Even with a basic installation of Rasbian;
|
||||
20 seconds was how long it took to become active without getting in to the OS and really stripping things down.
|
||||
When I created [HiFiLOGIX](https://gitlab.com/dewdude/hifilogix) I decided to go with the Arduino platform due to
|
||||
almost negligable boot-up time; the goal was to have it booted and ready to go within the 4.5 seconds it took for
|
||||
the stereo to activate it's speaker output relay.
|
||||
|
||||
The (relative) success of getting HiFoLOGIX to work and armed with new knowledge of Arduino; I decided it should be
|
||||
possible to build PiFO in a way that works entirely on a microcontroller. We don't need a full OS; and this means
|
||||
no long boot times.
|
||||
|
||||
# Hardware
|
||||
|
||||
Though I have not gotten to the full design of a "reference" remote head; I am shooting for the following:
|
||||
|
||||
* easy-to-read seven-segment LED displays with a minimal amount of information
|
||||
* one (or more) rotary encoders for spinning the VFO/channels
|
||||
* dedicated buttons for functions that don't require you to navigate a menu
|
||||
* onboard level converters for your rig's communication protocol
|
||||
* two cables to the head; power and communications
|
||||
|
||||
Currently development is occuring on an Arduino Mega2560 and a simple 7404 based level converter for CI-V. This is
|
||||
actually the same converter used in the RPi version. If the code allows; the final product may contain an ATMega328.
|
||||
All hardware is planned to be integrated in to the head, meaning you should only need a power and communication
|
||||
cable going to your radio.
|
||||
|
||||
I will post full pictures and a schematic as I get further along in the development.
|
||||
|
||||
Usage of onboard USB controllers in newer rigs will depend on how difficult it is to implement. Unlike the RPi;
|
||||
the AVR based ATMegas do not feature native USB support and only offer serial communications. So plugging a rig's
|
||||
USB in to the thing won't work. The chip that handles serial-to-USB on the board would have to be reprogrammed to
|
||||
act as a USB host and understand all the various serial-to-USB adapters on the market. While USB controllers are
|
||||
available as an external module; the goal of this project is to keep costs to a minimum. No one wants to spend
|
||||
$300 on a remote head accessory!
|
||||
|
||||
Additional display types may be supported depending on demand or user-submitted code. The project is open-source; you
|
||||
are welcome to contribute code.
|
||||
|
||||
|
||||
|
||||
# Current DEV Status
|
||||
|
||||
Development offically started on 5-FEB-2020 with working out the physical interface betweent he rig and the radio.
|
||||
This has been fully tested and I'm able to send and receieve bytes.
|
||||
|
||||
The current phase of development is largely focusing on the communication library for CI-V. In it's current state,
|
||||
the software is able to detect, receive, and filter CI-V data packets and able to process iCom's BCD data in to a
|
||||
decimal format that can be worked with by the rest of the software. Currently this just displays the frequency to
|
||||
the serial port on the Mega2560 connected to the USB adapter. The radio is currently using one of the remaining
|
||||
hardware serial ports.
|
||||
|
||||
![Current Development Version](/images/civdecode.png "CIV Decoding")*Current Development Version*
|
||||
|
||||
|
||||
# License
|
||||
|
||||
Copyright 2020 Jay Moore
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification, are permitted
|
||||
provided that the following conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice, this
|
||||
list of conditions and the following disclaimer.
|
||||
|
||||
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions
|
||||
and the following disclaimer in the documentation and/or other materials provided with the distribution.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
|
||||
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
||||
THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
|
@ -0,0 +1,82 @@
|
||||
/* ArFO Development Version
|
||||
*
|
||||
* This software doesn't control the radio yet. It is just to test working with the
|
||||
* iCom CI-V data stream coming from the radio.
|
||||
*
|
||||
* de NQ4T - 08-FEB-2020
|
||||
*/
|
||||
|
||||
const byte numBytes = 32;
|
||||
byte receivedBytes[numBytes];
|
||||
byte numReceived = 0;
|
||||
long vfoa;
|
||||
|
||||
boolean newData = false;
|
||||
|
||||
void setup() {
|
||||
Serial.begin(9600);
|
||||
Serial2.begin(9600);
|
||||
Serial.println("CI-V Monitor Ready");
|
||||
Serial.println();
|
||||
|
||||
}
|
||||
|
||||
void loop() {
|
||||
recvBytesWithStartEndMarkers();
|
||||
showNewData();
|
||||
newData = false;
|
||||
}
|
||||
|
||||
void recvBytesWithStartEndMarkers() {
|
||||
static boolean recvInProgress = false;
|
||||
static byte ndx = 0;
|
||||
byte startMarker = 0xFE;
|
||||
byte endMarker = 0xFD;
|
||||
byte rb;
|
||||
|
||||
|
||||
while (Serial2.available() > 0 && newData == false) {
|
||||
rb = Serial2.read();
|
||||
|
||||
if (recvInProgress == true) {
|
||||
if (rb != endMarker) {
|
||||
receivedBytes[ndx] = rb;
|
||||
ndx++;
|
||||
if (ndx >= numBytes) {
|
||||
ndx = numBytes - 1;
|
||||
}
|
||||
}
|
||||
else {
|
||||
receivedBytes[ndx] = '\0'; // terminate the string
|
||||
recvInProgress = false;
|
||||
numReceived = ndx; // save the number for use when printing
|
||||
ndx = 0;
|
||||
newData = true;
|
||||
}
|
||||
}
|
||||
|
||||
else if (rb == startMarker) {
|
||||
recvInProgress = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
void processciv() {
|
||||
int i = 0;
|
||||
long bcd[4];
|
||||
for (int x = numReceived; x > 2; x--) {
|
||||
bcd[i] = (((receivedBytes[x] >> 4) *10) + (receivedBytes[x]&0xF));
|
||||
i++;
|
||||
}
|
||||
vfoa = ((bcd[0]*1000000)+(bcd[1]*10000)+(bcd[2]*100)+(bcd[3]));
|
||||
}
|
||||
void showNewData() {
|
||||
if (newData == true) {
|
||||
numReceived--;
|
||||
processciv();
|
||||
Serial.println();
|
||||
Serial.print("VFO A: ");
|
||||
Serial.print(vfoa, DEC);
|
||||
Serial.print("kHz");
|
||||
}
|
||||
newData = false;
|
||||
}
|
Binary file not shown.
After Width: | Height: | Size: 16 KiB |
Loading…
Reference in New Issue