A controller for a multi-band homebrew SSB/CW transceiver, targeting Arduino Nano and si5351 PLL.
A PLL VFO/controller for a multi-band SSB/CW transceiver, targeting Arduino Nano and si5351. The script is SP_VFO_Controller.ino. An initialiser script must be executed once to initialise EEPROM.
Peter VK3TPM stripped down my 2k lines of code to 200, for a bare bones si5251 VFO. It thats all you want, then maybe try this. https://bitbucket.org/peter_marks/dc-vfo/src/master/
When your project needs the additional control features of a more conventional receiver/tranceiver, come back here.
This script has been used for a number of homebrew transceiver, receiver and transmitter projects at VH3HN, each using the Arduino Nano/si5351 combination. All these projects share this common script. By using a common script, a bug fixed or parameter changed is done once, in one place only, and gets deployed the next time a particuar transceiver's Arduino is flashed.
'SP_' stands for Summit Prowler. Summit Prowlers are scratch-built QRP tranceivers I have been building for SOTA activations since 2017. The fourth, fifth and sixth rigs in this series are all multiband SSB/CW single conversion (high-side VFO) superhets. SP_VFO_Controller.ino is the VFO/controller script for all of these rigs, and other projects as well.
Code blocks and unique code paths are selected for each project using the C preprocessor directives (#define's). At the top of the script, each project is given a #define'd label, which is used to control other label and variable declarations, code paths and optional code blocks. Only one project label should be #define'd at any time, all others should be commented.
For discussion of this project and some information to help you decide if this is the script for you, see this repository's Wiki in this repository.
Please feel free to raise an issue, defect or feature request on Github. Please let me know if you use this code, with or without change.
-- Paul Taylor, VK3HN. Created 25 July 2019.
Feature summary:
Notes:
Libraries: The script uses commonly available libraries; here are the ones I used. Substitutes should work, but code changes may be necessary:
Here a a few problems that have been reported byto me by experimenters who have tried this code:
Compile error at si5351.set_correction() in init() at around line 2630: The signature to the set_correction() method in Jason's si5351 library changed between releases, the latest version includes a second parameter.
#ifdef SP_V
si5351.set_correction(19100);
#endif
If this call throws a compiler error, add in the second argument, as follows:
si5351.set_correction(19100, SI5351_PLL_INPUT_XO);
Having more than one source file open in the Arduino IDE at once -- some people open all the files in the repo (or perhaps the IDE does this for you when you open a repository). This will fail as the repo contains multiple compilable scripts. You should only ever compile two of the files, the SP_Initialiser script or the main SP_VFO_Controller script. Only have one of these two files open in the Arduino IDE at a time.