Back to Blog
Morse decoder circuit5/31/2023 A hole has been cut in the lid for viewing the display. Photo 4 shows the decoder partially boxed.No other components are required if the text is to be viewed on your Arduino “Serial Monitor”. Photo 3 shows the completed shield attached to an Arduino.to which I have added the microphone amplifier and tone oscillator. For this reason I have not added it to the shield but attached it directly to the morse-key jack for ease of adjustment. increasing its value decreases the audio output from the speaker. The 330 ohm resistor in series with the morse key limits the D4 output current in the event of an accidental short to ground. Photo 1 shows the circuit diagram for the morse decoder.Ī morse key or sturdy push-button is required if you wish to use the sender. The parts list for the optional 320 x 240 TFT display module is listed in my instructable. The estimated cost of the morse decoder shield, less the optional TFT display, is $25. 1 only 130 x 68 x 44mm ABS plastic box.1 only 3.5mm mono socket (for morse key).1 only 3.5mm mono plug (for morse key).1 only 2.2 Inch TFT SPI LCD Display Module 240*320 ILI9341 with SD Card Slot for Arduino Raspberry Pi 51/AVR/STM32/ARM/PIC.The following parts were obtained locally: 1 only prototype shield for Arduino UNO R3, 2.54mm Pitch.The TFT module is described in my instructable.The TFT display module is optional as all text is sent to your Arduino “Serial Monitor”.The cover photo shows a fully assembled unit.The following characters and symbols are recognised: both incoming and outgoing text are displayed.an audible output when practicing morse.a “Binary Morse Tree” for decoding the signal.a Goertzel digital bandpass filter for separating unwanted signals.The incoming code is displayed as text on your Arduino Serial Monitor (or TFT screen if fitted)Ī tone oscillator has been included should you wish to practice sending morse. The decoder, which automatically adjusts to the send speed, is capable of decoding morse up to at least 80 words per minute. The code is here and has details of the buttons to press during configuration.This instructable explains how to decode Morse Code using an Arduino Uno R3. The completed project just has a 3.5mm jack socket hot-glued to the Arduino and connected to the ground and A1 pins. The magnitude default suits the ACC2 output of my TS–590. I set the default ‘N’ to 48 and the default magnitude to 20. This can help if conditions change and signals become very weak or very strong. At start-up the ‘N’ in the Goertzel algorithm and the expected amplitude of the signal can be changed. It happens to have buttons on it so I added some configuration using these buttons. Screenshot of completed projectįor the completed decoder I changed to an LCD shield. I find this more useful than watching the LED blink. The number of > chars increases with the accuracy of the tuning. I also added a LCD tuning aid – you can see this in the photo. This allows more lee-way in the Goertzel algorithm. I also let the code work with an Arduino Due which has a faster CPU than the Arduino Uno. I also changed the ADC registers to speed up reading from the analogue pin, but this had little effect. This almosts halves the time taken to write to the screen. So I changed the code to use the LiquidCrystalFast library rather than the bog-standard LiquidCrystal library. ![]() But it was actually the display to LCD which took much of the time. As reducing the bandwidth is done by iterating more in the algorithm I suspected this was the bottleneck. I instrumented the code to see where it was using up CPU as Hjalmar hints that you can’t reduce the tone bandwidth too far. ![]() I’m using an LCD of 4 lines of 20 characters which works well. The decoding quality starts falling off as the CW speed rises above 30 WPM but it’s still usable. This allows me to use a sidetone of 750Hz and a 150Hz filter on the transceiver. I use the 744Hz tone in the algorithm and a bandwidth of 140Hz. ![]() The noise reduction on the TS590-S is needed to allow this, and with NR2=20, fast AGC and reasonably keyed morse it does pretty well. Even so, the decoder has decoded plenty of signals even when drowned in HF mush. As I write, we’re in horrible HF conditions at the moment with poor propagation. I’ve not modified the circuit in any way as I can fiddle with the controls on my TS590-S transceiver to get the decoder to work. It gets its efficiency by only working for various fixed tones rather than a continuous frequency spectrum as in the FFT. The Goertzel algorithm does much the same as an FFT but in a more efficient way. The CW Decoder circuit and code come from Hjalmar, OZ1JHM and are described in his web page A VERY simpel CW decoder EASY BUILD. I came across a CW Decoder based on an Arduino Uno implementing the Goertzel algorithm, and have lashed together a prototype which works quite well.
0 Comments
Read More
Leave a Reply. |