commit 2b7e2ae533886724ba4348857e0896a050e1e6e9 Author: dewdude Date: Sat Feb 8 11:58:42 2020 -0500 Initial Commit. Hello. diff --git a/CHANGELOG b/CHANGELOG new file mode 100644 index 0000000..8c5331a --- /dev/null +++ b/CHANGELOG @@ -0,0 +1,5 @@ +CHANGELOG: + +There have been no revisions to any code as of the initial commit. + +Stay tuned for development updates. \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..320caca --- /dev/null +++ b/LICENSE @@ -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. diff --git a/README.md b/README.md new file mode 100644 index 0000000..0a68a0f --- /dev/null +++ b/README.md @@ -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. + + diff --git a/alpha/civtesting.ino b/alpha/civtesting.ino new file mode 100644 index 0000000..f73a6d4 --- /dev/null +++ b/alpha/civtesting.ino @@ -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; + } diff --git a/images/civdecode.png b/images/civdecode.png new file mode 100644 index 0000000..bd442cf Binary files /dev/null and b/images/civdecode.png differ