Pcb Cw Keyer Arduino Nano
In order to get my first license (Technician Plus) with HF privileges, I had to learn morse code at a level of 5 words per minute. To upgrade to General, you had to learn 13 words per minute and to upgrade to the Extra Class, you had to learn 20 words per minute. I was always told it is better to try and practice at 13 word per minute as you can pick it up better with the right spacing but I never made it that far. A local ham who is SK now bent over backwards to help me learn morse code by sending to me over the air and allowing me to use tapes that he had to practice copying. I passed the test 1st time out because of the work that he put in.
Ever since I got licensed after passing the 5 words per minutes code requirement, I did not touch it again. This was not due to lack of interest, from what I can tell, but lack of time. You need to keep using it in order to stay proficient but you donβt really lose it all. I find myself send in my head occasionally, lolβ¦ I do feel bad for not pursuing the CW part of the hobby because I have missed out on some nice contacts and contests. Because I have lost some of the characters, I need to practice to get proficient again.
Overview The Arduino Nano is a small, complete, and breadboard-friendly board based on the ATmega328. It has more or less the same functionality of the Arduino Duemilanove, but in a different package. It lacks only a DC power jack, and works with a Mini-B USB cable instead of a standard one. The Nano was designed.
Since the requirement to pass the CW portion of the test was removed by the ARRL years ago, which I feel should not have happened, it made it easier for more and more people to get into the hobby. CW was a challenge and a good one. It challenges your mind and hand coordination and will always remain as a reliable means of communicating with other hams and even during emergencies, with other agencies on HF. Lately, the sun has been very upset and the radio conditions on HF have been less than perfect. Now, off of my soapbox and on to the project at hand. π
ββββ
First off, I want to thank Anthony (K3NG) for the hard work in the software for this project. If it wasnβt for the software, this may have never gotten done. To help myself learn CW and jump in with both feet, I am going to be building a copy of the K3NG CW keyer which has a lot of capability to work with. According to his web site, located at http://blog.radioartisan.com/arduino-cw-keyer/ here are the capabilities that are in place at this time. This is an awesome thing to play with and well worth it once complete. Below will show what I am doing and what I am using to make this project work with my hardware.
The features, which are available through the king_keyer application firmware, are located within the file called keyer_features_and_options.h. This gives a list of available features and options that you can add or remove from the firmware depending on your needs and or space available. From what Anthony told me, all I need to do is uncomment the FEATURE_ lines that I want and recompile to the Arduino Mega. There should not be any special configuration required to make the Mega work with this firmware.
Features
- CW speed adjustable from 1 to 999 WPM
- Up to six selectable transmitter keying lines
- Programming and interfacing via USB port (βcommand line interfaceβ)
- USB or PS2 Keyboard Interface for CW keyboard operation without a computer
- Logging and Contest Program Interfacing via K1EL Winkey 1.0 and 2.0 interface protocol emulation
- Optional PTT outputs with configurable lead, tail, and hang times
- Optional LCD Display β Classic 4 bit mode , Adafruit I2C RGB display or YourDuino I2C LCD Display
- Up to 12 memories with macros
- Serial numbers
- CW keyboard (via a terminal server program like Putty or the Arduino Serial program)
- Speed potentiometer (optional β speed also adjustable with commands)
- QRSS and HSCW
- Beacon / Fox mode
- Iambic A and B
- Straight key mode
- Ultimatic mode
- Bug mode
- CMOS Super Keyer Iambic B Timing
- Paddle reverse
- Hellschreiber mode (keyboard sending, memory macro, beacon)
- Farnsworth Timing
- Adjustable frequency sidetone
- Sidetone disable / sidetone high/low output for keying outboard audio oscillator
- Command mode for using the paddle to change settings, program memories, etc.
- Keying Compensation
- Dah to Dit Ratio adjustment
- Weighting
- Callsign receive practice
- Send practice
- Memory stacking
- βDead Operator Watchdogβ
- Autospace
- Wordspace Adjustment
- Pre-configured and Custom Prosigns
- Non-volatile storage of most settings
- Modular code design allowing selection of features and easy code modification
- Non-English Character Support
- CW Receive Decoder (EXPERIMENTAL)
- Rotary Encoder Speed Control
- Sleep Mode
- USB Mouse Support
- Mayhew LED Ring Support
- Alphabet Sending Practice
- QLF / Straight Key Emulation (NEW)
- USB Keyboard HID (Human Interface Device) Interface (Keyer = keyboard for your computer) (NEW)
ββββ
ββββ
There has been a major change in CW keyer project that I was originally looking into, using this software, which I need to explain. I was originally looking at using the Arduino Yun for the CW keyer project which could also allow remote control via the βBridgeβ over a web browser. This could have been done by tying into the web server portion of OpenWRT on the linux side the Yun and talking across to the ATmega programming. I found out that in order to take advantage of the full capability that the firmware has, I would have to look at a different hardware solution. The Yun could not support the firmware due to the size of the ATmega chip used on that device. The Yun uses an ATmega32u4 which is has a flash memory of 32kb (of which 4kb is used be the boot loader). It was recommended to use the Arduino Nano, which houses either 512 bytes (ATmega168) or 1 KB (ATmega328). I am not so sure about this, but many of these keyer projects are using the Nano for their size. I decided to go with the Arduino Mega 2560 which houses 256kb of flash memory (of which 8kb is used by the boot loader). I felt that if I wanted to use all of the capabilities that the firmware was offering, then this would give me the room to do so. There are other considers here as well.
Below shows the Digital / PWM / Analog Pins which are available on each Arduino and you can see another reason why I chose the Mega for this. To have LEDβs, buttons, switches, and jacks, the more connections the better. Now, in the circuit, Iβm sure that not all of these pins will be used for this as there are ways to tie connections together through a single line such as grounding and the 5 volt line to power the circuit.
ββββ
Arduino Nano Pins
Digital I/O Pins 14
PWM Pins 6
Analog I/O Pins 8
ββββ
Arduino Yun Pins
Digital I/O Pins 20
PWM Pins 7
Analog I/O Pins 12
ββββ
Arduino Mega 2560 Pins
Digital I/O Pins 54
PWM Pins 15
Analog I/O Pins 16
ββββ
ββββ
ARDUINO MEGA 2560 SPECS
If interested, here are the technical specifications for the Arduino Mega R3. You will want to pay attention to the digital pins, analog pins and clock speed (CW Decoding).
Microcontroller | ATmega2560 |
Operating Voltage | 5V |
Input Voltage (recommended) | 7-12V |
Input Voltage (limit) | 6-20V |
Digital I/O Pins | 54 (of which 15 provide PWM output) |
Analog Input Pins | 16 |
DC Current per I/O Pin | 20 mA |
DC Current for 3.3V Pin | 50 mA |
Flash Memory | 256 KB of which 8 KB used by bootloader |
SRAM | 8 KB |
EEPROM | 4 KB |
Clock Speed | 16 MHz |
Length | 101.52 mm |
Width | 53.3 mm |
Weight | 37 g |
ββββ
ββββ
One thing that is standing out as a change which has taken me some time to get documented is the pin layout of the Arduino Mega which is very different from the Yun and Uno that I have. As you can see below, there is a separate digital section which starts with pin 22 and goes to pin 53. Pins 23, 25, 27, and 29 appear to be 5V Pins and the digital ground is in the lower right for use by digital signals. The analog pin layout is across the bottom and are labeled A0 to A15. The power for the analog section is before the pins with two ground pins and a 5V pin. The way this is shown should give us plenty to work with when building out this keyer and the features in the firmware.
ββββ
ββββ
K3NG KEYER SCHEMATIC
I have attached the schematic that K3NG put together on the original CW Keyer project. I will be using this for the major part of the build, but will be adding things like an LCD for programming and CW decoding. Since the pin layout will be different on the Arduino Mega, please ignore the pin numbering shown below as they will be changed in the programming to fit our Arduino Mega.
ββββ
ββββ
ARDUINO 2560 Mega SCHEMATIC
Below shows the schematic for the Arduino Mega to give everyone a better feel for what this looks like. This can be found at https://www.arduino.cc/en/uploads/Main/arduino-mega2560_R3-sch.pdf
ββββ
ββββ
Now that we have the schematics and other information needed, it is time to get this build underway. One thing to remember while working with the prototype boards, βSLOW DOWN AND TAKE YOUR TIMEβ It is very easy to make a mistake and short something out, if not careful. Below shows an example as to why you need to slow down and watch. In the below example for the Blink sketch, there are some green highlighted areas. These show the 5v (Red) connections across the top of the board, the negative (Black) right below. What I want you to look at are how the parts are laid out. There are green lines showing that each vertical line on the board are a single piece of metal inside. So if you connect the LED up like it is and try to hook something else up in the same trace, it will not work or could short the LED.
ββββ
ββββ
CONFUSION
I was looking at the schematic and the symbols used show 5 x 0.01 microfarad (Electrolytic) Capacitors, 1 x 100 microfarad (Electrolytic) Capacitor and for the input audio circuit, 1 x 0.1 microfarad (Ceramic) Disk capacitor. The reason that I am bringing this up now is to help with what the circuit needs. While reading Anthonyβs web site, the 5 x 0.01 microfarad capacitors should be ceramic disk capacitors and the 100 microfarad capacitor should be an electrolytic capacitor as well. It looks like the 0.1 microfarad capacitor in the input circuit should be a ceramic disk capacitor, that I will show later on in this post.
1. Ceramic Disk Capacitor
Pcb Cw Keyer Arduino Nano 2
2. Electrolytic Capacitor
ββββ
ββββ
INSTALL FIRMWARE TO ARDUINO MEGA
Letβs start with making sure that the build can be sent to the Arduino Mega with no hardware or compile issues. In order to do this, below are the steps that I used to get the firmware onto the Arduino Mega. These are the same steps used when uploading any sketch to any arduino using the IDE application shown below.
β Make sure that you have the Arduino IDE package installed from here β https://www.arduino.cc/en/Main/Software
β Download the firmware from this location β https://github.com/k3ng/k3ng_cw_keyer
β Since the above link if from GitHub, when you visit that link, go to the right side of the screen, and click on Download Zip
β Unzip the file into the folder into your Arduino sketch folder
β Before compiling and uploading your sketch, just take some time and go through the .h files to make sure it has everything you need for this build. For example, we need to change the pin layout to make sure that we have the pins set to what we need. We also need to uncomment features that we are looking for, etc. By doing this now, we will save time during the build and troubleshooting phases of this project.
β This should compile just fine, but I ran into an issue with the compiler saying the goertzel.h file was missing. To fix this, just go into the libraries folder and copy that file out into the main project folder and compile again. It should work just fine this time.
β If for some reason, the above does not work, try to load the Blink sketch from the IDE and see if it loads without error. If it has errors as well, change your USB cable and try again.
β Always remember that any changes to the code will require a reupload to the Arduino.
β If the .h files are located in the correct locations and you get errors, try to close the IDE and restart it again. Sometimes the IDE has problems with files being moved around while it is operational and can not see the changes live.
ββββ
ββββ
ARDUINO PINS with keyer_pin_settings.h
Below shows the pin layout which is located in the file keyer_pin_settings.h. The setting that you see below are the default settings that come with the file. I have not changed them yet.
ββββ
ββββ
ARDUINO MEGA POWER CONNECTIONS
Cw Electronic Keyer
Now that we have we the features chosen and the compiled release added to the Arduino Mega, we can start with the physical build and troubleshooting parts as they come along. I started by separating the voltage lines on the breadboard to make sure that I had what was need for the appropriate pin selections. This also shows what I was referring to about where the digital and analog voltage lines are located. Analog across bottom, digital on the right side or back side of the board. This should get us the voltage required for the circuit to work just fine. Now, I was told that there did not appear to be any separation between the analog and digital sections of this Mega, as far as we can tell. I am still researching to see if these are separate on purpose on just board or if they are electronically separate.
On the prototype board that I am using, there are two sets of voltage pins, the positive (5v) and negative (GND), which located on the top and the bottom. The positive (5v) lines are usually on the inside while the negative (GND) are usually on the outside. Depending on how small of large of the project, you could place the positive (5v) on the top and negative (GND) on the bottom to have them separated better.
Cw Keyboard Keyer
ββββ
SUGGESTION: When you start to build this project out, donβt go with just 5volts to the arduino board. Go ahead and invest in a 12 volt supply for this project. The reason is that an LCD display, LED bulbs, etc will be added and could cause a drain from the main board. I have witnessed this already so I added a 12V 1.5 amp power supply and this project became more stable.
ββββ
ββββ
ADD BUTTONS TO KEYER
Now we will look at adding the buttons to the board to make sure that we have room to build this out. According to the schematic below, there are six buttons which can be added. One button for the command section and programming and the others are memory buttons. You can add on as many as you need for this project. The buttons appear to be single pull / single throw buttons where one terminal is tied together with 1k resistors throughout the build. The initial resistor being added before the buttons is a 10k, according to the schematic. The resistors connect from the terminal back to the 5 volt line. The line heading off the page goes from the same voltage terminal to the analog pin 18 which will be changed to another pin to fit our Arduino Mega. The terminal connecting the actuator of the button is connecting to the ground.
ββββ
ββββ
ADDING LEDβs
ββββ
ββββ
COMMAND AND MEMORY BUTTON CONFIGURATION
I have decided to break this out a little more than I should so that I can show what I am doing in the prototype build process. Below, you can see that I have left the voltage lines as they are for now, until I figure out if they are needed. Normally, I will use red wire for voltage leads and black for GND, but my wire kit that has the smaller wires, does not have black or red in the appropriate lengths. In the first image, I have added the buttons per the schematic. The first button will be the command / program button while the other buttons are set aside for memory usage at this time.
As I mentioned above, my project wire kit does not the proper color wires in the right lengths, so I went with what I had. In the second image, I added the grounds between the buttons and connected them to a single ground point at the bottom. By doing it this way, I have cleaned up a mess.
In the third image, it was time to add the resistors to the buttons. As this is a prototype, I wanted to hold off in cutting things down, until I was sure that this was going to work. As you can see, I connected a 10k resistor to the 5V line at the top and added 5 1k resistors in parallel between each button. Now we need to make a decision as to where the connection gets made to the Arudino Mega. I am looking at using Pin Analog 0 (A0) for this connection as I have not set it aside yet.
I have move a pin from the 10k resistor up one hole position and connected the wire that is going to the Arduino Mega. According to the schematic, it appears that this does go between the 10k and first 1k resistor.
This should get us some operational buttons to help test our project. In order to get the command buttons to work, you have to uncomment the FEATURE_COMMAND_BUTTONS, FEATURE_MEMORIES and the FEATURE_MEMORY_MACROS located in the keyer_features_and_options.h file. If you forget this step, it will not work. So now we want to make sure that the pin settings are set correctly in the keyer_pin_settings.h file. Below, I have chosen Analog A0 as the analog_buttons_pin. Currently, command_mode_active_led is set to a not active state. I have set this to pin 26 for the test. Once you have made the changes to the code, you can keep building or go ahead and upload to the Arduino Mega for testing. I would go ahead and press the compile button with the IDE to make sure these pins are set and ready.
ββββ
Now we need to add an LED so that we know if the command mode is active.
As you can see, I connected the positive lead to digital pin 26 with a 220k resistor in line to protect the bulb. The negative side of the LED is connected to the ground just above it. The program is telling port 26 that when the button is pressed, it should turn the LED on as a status reminder that we are in command mode of the keyer.
Below shows the result of pressing the first button, which is the command button. The LED which will be used, lit up when the button was pressed the first time and when off when it was pressed again. This is the expected behavior from the code changes that were made.
ββββ
Here is a schematic that I put together for the command and memory button with an indicator LED.
ββββ
ββββ
SPEED POTENTIOMETER ADDON
Now that we have the command button in place, letβs add the speed control potentiometer to the project. There are three pins to these, a positive 5V, a ground and a wiper or analog input pin. The positive 5v pin will be on the left, the analog input in the middle and the ground on the right. Below shows the difference between the front and back of the potentiometer. The back has the notches in it where the front has the nomenclature of the potentiometer on it. Make sure that the front the potentiometer is pointing away from the buttons so that you know which is clockwise and counter-clockwise. Below is from the keyer_pin_settings.h file on a recommendation for this. I would go ahead and press the compile button with the IDE to make sure these pins are set and ready.
When adding a real potentiometer for the real project, below shows the connections and where they connect to the potentiometer. Pin1 is 5v, pin2 is the input connection and pin3 is the negative or ground connection. There will be two potentiometers, so far, an LCD dimmer, and a CW speed control. If you are unfamiliar with adding a potentiometer, this URL has great information about that subject.
As you can see from the clip of the schematic below, the potentiometer is going to be out CW speed control from 1 β 999 words per minute (WPM). I would be lucky to pick out 5 WPM at this pointβ¦lol. The left pin will connect to the 5v connection like the command button did.
I have connected the positive lead to the 5v strip at the top. The negative side of the potentiometer is connected to the ground at the top as well. The wiper or analog input pin is connected to the Arduino Mega on pin A1. This will give us the speed control for the CW keyer.
This should get us some operational speed potentiometer to help test our project. In order to get the command buttons to work, you have to uncomment the FEATURE_POTENTIOMETER and FEATURE_ROTARY_ENCODER located in the keyer_features_and_options.h file. If you forget this step, it will not work. If you uncomment this feature without the potentiometer in place, noise could falsely trigger WPM changes in the code. So now we want to make sure that the pin settings are set correctly in the keyer_pin_settings.h file. Below, I have chosen Analog A1 as the analog_buttons_pin. Once you have made the changes to the code, you can keep building or go ahead and upload to the Arduino Mega for testing. I would go ahead and press the compile button with the IDE to make sure these pins are set and ready.
ββββ
ββββ
SPEAKER / SIDETONE CONFIGURATION
In order to test this project, it is a good idea to have a way to get sound to come out. In order to get the speaker to work within this project, there are no special FEATURE section for it. The only thing that came up with was going into the keyer_pin_settings.h file and changing the pin number for the sidetone_line to 48. You can use any pin you want, I chose this one out of the blue. If you forget this step, the side tones will not play. By looking at the part of the schematic that houses the speaker we can see that a 2N2222 transistor, a 0.1Mf capacitor and 2 x 100 ohm resistors are needed. I would go ahead and press the compile button with the IDE to make sure these pins are set and ready.
From what you can tell from the picture below, I have added the speaker section to the project. This includes the 2n2222 transistor, a single 0.1 microfarad capacitor, and two 100 ohm resistors.The 2N2222 transistor are standard NPN switching transistors and they need to be connected a certain way according to the schematic, in order for them to work properly. As you can see, the emitter is connecting to ground, the base is connected to a 100 Ohm resistor going to Pins 48 of the Arduino Mega. The collector is connecting to the positive side of the speaker with a .01 microfarad capacitor in between it and the speaker. From the 0.1 microfarad capacitor, we are making a connection to the Vin pin on the Arduino Mega. I have tested this circuit and even with the volume being really low, when I turn the command button on and off, I do here the on and off tones. One more thing, if you have a speaker connected and you upload a sketch, you will get tones back as a verification that everything worked.
Revisions B on of speaker connection adding a terminal connector for easier removal. Add 1/8β³ Jack for a speaker to connect to.
ββββ
ββββ
TRANSMITTER KEY CONNECTIONS
I pushed a little forward last night and build the keying sections of this project. There were some things that I learned from going through the documentation on the Radio Artisan Page about this. First off, donβt let the schematic fool you, the three connections called Tx Key 1 β 3 are not for adding on keys but are for connecting to multiple radio key sections. So essentially you can connect one to Kenwood, one to an Icom, and one to a Yaesu and have them all on different bands, working a contest. To me that would be confusing, but the prototype has that capability built in now. Right now as it stands when it comes to a key being added, if you look where it shows right and left paddle, that is you iambic key connections. This is not only for sending CW but for using CW to do things within the command section of the project, if wanted. In order to make sure that the keying sections are ready to go, you have to change the ports for the tx_key_line_1, tx_key_line_2 and tx_key_line_3 entries shown in the keyer_pin_settings.h file. I set mine to Digital pin 32, 34, and 36 as shown. I would go ahead and press the compile button with the IDE to make sure these pins are set and ready.
In the below picture, you can see how I did a temp build using a secondary prototype board. This called for three separate 2N2222 diodes, three separate .01 microfarad capacitors, and three separate 100 ohm diodes. The 2N2222 diode are standard NPN switching diodes and they need to be connected a certain way according to the schematic, in order for them to work properly. As you can see, the emitter is connecting to ground, the base is connected to a 100 Ohm resistor going to Pins 32 for tx key 1, 34 for tx key 2 and 36 for tx key 3. The collector is connecting to the positive side of the jack with a .01 microfarad capacitor in between it and the jack.
ββββ
ββββ
CW PADDLES ADDON
The next item is fair simple and it is adding the paddles to the project in order to be able to do CW and to control the command section. Keep in mind that you do not have to use the cw key to work with the command section, you can implement the PS2 keyboard section if you want as well. From the schematic below, we can see that the only items needs for this are the left and right paddles, two .01 microfarad capacitors and two ports on the Arduino Mega. In order to make sure that the paddles will work properly, you have to change the ports for the paddle_left and paddle_right entries shown below in the keyer_pin_settings.h file. I set mine to Digital pin 42 for left and 44 for the right as shown. I would go ahead and press the compile button with the IDE to make sure these pins are set and ready.
Revision B on Paddle key connection adding an 1/8β³ jack to connect the key.
ββββ
ββββ
GEORTZ DSP CW DECODER
Now that we have the keying section complete, letβs look at the CW decoding section. This is an interesting section as it does not appear in the schematic above so we will be trying to integrate the circuit from OZ1JHM from their web site at http://www.skovholm.com/cwdecoder. The decoding is based on the Goertzel Algorithm and you can find more information at https://en.wikipedia.org/wiki/Goertzel_algorithm. Who knew that there was math behind the decoding. ;-D
The code for the Arduino is included in this project, but the schematic, shown above in this post, appears to be for a basic build which we will be adding to. There is a file which was included with the code called goertzel.h. This takes care of all of the decode algorithm needed to make this work properly. There are some settings in which we need to make so that the Arduino Mega will work with this code. Below contains some information of interest from the goertzel.h file about the sampling frequency and bandwidth information.
As I do not have the Arduino Due, I have to comment out that part of the code and uncomment the part for the Arduino Mega, as shown below. There are setting that we need to pay attention to if the decode does not work properly here. According to OZ1JHM the Target Frequency should work with 558 hz or maybe 744 hz.
In the snippet of schematic shown below, the SPEAKER IN will be from the radio or SDR which will go through a 100nf capacitor which connect to a 10k ohm resistor to the 5V connection and a 10k ohm resistor to ground. The circuit will connect to an analog pin on the Arduino Mega. This will allow the DSP decoder to show the inbound CW on the display.
Above shows the schematic that I put together for the decoder section to help break it out. As with the cw_decoder_pin, there is a cw_decoder_indicator as well. I added an LED between ground and PIN 24 connection which allows decoded flashes to be seen. This works real well in seeing what the threshold is in the tuning. There is fine tuning on the radio to start the decoding.
ββββ
ββββ
LCD Display Add-On
As part of the CW Decoder project, you may want to add an LCD display for decoding incoming CW signals. Along with the GEORTZ DSP CW DECODER shown above, this works without an issue. There are some pinout changes that you will need to make in the keyer_pin_settings.h. This my keyer build I am using the following pinout. I am using a 4-bit 2 row LCD which is a good start.
In order to get the decoder to work just do the following:
- Tune your radio to the CW portion of the HF bands. Usually the lower end of most ham radio HF bands.
- If you want to test with beacons, go to 10 Meter, usually around 28.130 you may hear beacon stations.
- Make sure that you have the LED connected between ground and the pin that you decided to use.
- Tune in on a station until the LED starts flashing with their code send. You will have to fine tune to get it correct but the LED will see the right data being sent.
Example #1 of CW Decode Test
Example #2 of CW Decode Test
I will be playing around with the above settings within the goertzel.h file to see if I can get a better decode. Correctly, the code is sensitive and there is a certain location to tune before it thinks about getting it correct, and I have noticed that if there are multiple stations close by, the decoder tries to do its best but has issues. For example, if I saw K9AJ as shown above sending his call and someone came up close by, the decoder would have issues with both and did not know what to do.
For example, last night there were multiple station around 14.039 where I assume an overseas station was located and it caused a mini pile-up on CW. I was able to tune around and decode the stations as they were sending their call signs, but when there are multiple stations at one time, the one that you are listening to seems to get lost in the decode. This is why I need to learn more code and not totally rely on the DSP decoder. This part of the project is fun to add on and fun to watch every now and then, but I can not use it as a replacement for code knowledge, which I did not plan on doing anyway.
ββββ
ββββ
NOW WHAT!
Well, there are some more things to come, including drilling a case for the final project so that I can add the speed and LED contrast potentiometers, the power, decoder and command mode LEDβs, the LCD Display, as well as the jacks for the TX keyer circuits, the jacks for the paddles and straight key (Needs Added), as well as power and USB connections to the Arduino. Still a lot to do, but I need to wait for a board or two to be built so that I can add to a case,
ββββ
Dealerconnect.chrysler.com repair information page. ββββ
Links and References:
Itβs been 3 years since I got my MST400 Mk 1 40 meter SSB transceiver going and started using it for SOTA activations. For those not familiar with it, itβs like a kit version of the BiTx40 from 2013. It has a similarly specβd monoband superhet receiver, 10MHz IF, and IRF510 5 watt power stage. The circuit on a page is here. Itβs been with me for nearly all of my 65 activations (over 400 SOTA activation points) around VK3. Now, with HF propagation approaching cycle lows, it is time to do what I should have done ages agoβ¦ add CW.
What spurred me on to do this mod was all the BiTx40 activity at Bitx20 on groups.io and bitxhacks.blogspot.com. Many of the BiTx40 mods being discussed are directly applicable to other similar QRP rigs. Discussion of adding CW centered on building an audio oscillator to generate a 700Hz tone, feeding this into the mic amp, optionally into the audio amp for sidetone and as the Soldersmoke boys would say, βBobβs your Motherβs Brotherβ.
There are a few other things to think about, the main one being whether or not you want break-in. Having built and used the Wilderness SST (a CW rig designed from the ground up) I know how good break-in can be for CW operating convenience. To add to this, the last rig I built and used for CW, a 160m AM/CW rig with manual T/R switching, reminded me of the nagging inconveniences. I now consider break-in and a keyer mandatory for portable operation. In the Wilderness SST, I added K1ELβs dedicated hardware keyer with good results.
The DDS VFO in my MST400 is a kit module with closed source, so there was no chance of adding a keyer or accessing the display for other purposes. So I decided to add a second microcontroller (Arduino) into the MST400 box.
A keyer is not a demanding thing to ask an Arduino to do. The enabler is the tone() and delay() functions. The first puts an audio frequency square wave on one of the pins, while the latter delays the script for a number of milliSeconds. Turn the tone on, delay for 60mS, turn tone off, and you just sent a dit at 10 w.p.m. You get the idea. The rest is just code.
Ashar Farhan VU2ESE uses Arduino tone() for sidetone in his uBitx design. On CW transmit, the uBitx Raduino tells the si5351 to put one of its clocks on the signal frequency. Keying is done by enabling and disabling the si5351βs clock output; at the same time Raduino generates fixed frequency audio tone which is injected into the audio chain for sidetone. A simple R-C filter reduces the sharp edges.
So one night I laid out some experimental keyer code. It all came together easily. The keyer code is here. The connections are described in the README.md. You can download and run it as is, and it will blink the on-board LED. Or add a small speaker with 220 ohm series resistor between pin 8 and ground. (Note that Iβve only run this on a Nano). Hereβs the wiring diagram and some pics.
I bent the pins of the DIL socket at right angles and soldered them to a handmade PCB. The only other parts are the 2N7000 PTT relay driver and 3-pin regulators. I added code to read push-buttons on digital pins to trigger hard-coded messages (like CQ and CQ SOTA). A 5k linear pot across 5 volts with the wiper connected to one of the analogue inputs acts as a speed control. The board is designed to fit over the SO239 aerial socket on the MST400βs rear panel. The toroids to the left are part of a VSWR sampling bridge; not debugged yetβ¦ more to follow on this.
I also added a CW ident which sends a callsign every 180 seconds. In the spirit of Arduino, Raduino and BiTx40, you can modify this sketch to suit your needs and likes. Let me know if you try it, or better still, use it in a BiTx or homebrew rig.
Some other Arduino keyers I found include this well-worked one from K3NG, and this one for an Uno.
19th March 2018: Jerry W0PWE contacted me a few months back and filled me in on how he took my keyer script from github and merged it into his Arduino controller script. Hereβs a picture of his rig, a 5-band CW QRP transceiver, quite similar to my SummitProwler IV project. Love your work Jerry!
Comments are closed.