I developed my own morse decoder years ago for my Commodore computers. It successfully translated beeps into English text onscreen.
The job is easier with a computer of course. Otherwise you need to create artificial memory cells and artificial binary words.
To encode without a computer:
Each character (dots and dashes) can be stored as a series of diode-resistor pull up networks. To make a gap apply a pull-down resistor. Apply a network to a shift register (as an alternative, one or two 4017 decade counters). The output is a series of dots and dashes. Vary clock speed to change keying rate. The switching becomes complex, but it's one way to pursue proof of concept.
To decode without a computer:
Create an electronic branching structure based on whether a dot or a dash is encountered at each step. (There are at most 5 steps or levels, assuming you make do with 32 characters.) Follow the left path when a beep is a dot (less than, say 12 milliSecond). Follow the right when a beep is a dash (greater than 12 mSec).
End a character when the gap is 25 mSec. The timeframes depend on keying rate. (I pressed my keyboard keys to increase or decrease timeframes.)
Example, if the first beep is a dot followed by a gap, you have letter E.
If dot-dot-gap, then letter I.
If dot-dash-gap, then letter A.
Etc.
When you detect a gap, stop the action. Where the last choice stops is the result of the unique series of dots and dashes for that letter.
To display each letter is the second challenge. The obvious way is to light an led behind a translucent panel with the letter painted on it.
The letter appears only momentarily as the next letter comes in with little pause.
Or, create a binary lookup array (in the form of electronic memory cells, or diode-resistor pullup pairs). This may be used for 7-segment display (maybe scrolling, maybe stationary). Or to translate to ascii in case you want to send to a computer.
Along this line...quickly scanning through the EPROM addresses and try to match the incoming data to any row in the EPROM.
I have struggled measuring the timing so as to decide if to set a dot or a dit
Are a lot of CW decoders on the internet available, and I tested (just for fun) many of them.
All these decoders works somehow, but two of them are the best in my opinion, mainly because they use complex DSP algorithms.
Just blind decoding of random speed Morse code, without using smart DSP algorithms, don't get good results.
First one is OZ1JHM project (based on Arduino) which use a Goertzel digital signal processing algorithm:
Along this line...
Use a shift register to measure beeps and record their length.
The switch was pressed to create morse letter A (dit-dah) as shown in the scope trace.
The LED pattern shifted L-to-R. Thus starting at the right we read dit-dah (letter A).
View attachment 167453
Programming Arduino chips -
You can use a NANO board to do this, its a $ 2 kind of board, usb attached to PC,
and you use the free Arduino IDE as the programming interface.
Regards, Dana.
I already have a programer as said. The problem is that it is not clear to me what firmware to burn into the 328. There is some kind of boot loader I think and then you load your programs onto it. can both be programmed at once into the chip using an external MCU programmer?
If you wanted to try BradtheRads approach, this can be done with a single chip.
All but R's and LEDs and Switch are onchip. Board is $ 10. Compiler and IDE is free.
Note this is a codeless design. Only code needed is chip startup code, and that is
auto generated for you. Board has programming interface on it (USB to PC).
Basically you drag and drop chip resources out of its catalog, wire up with a wizard,
and hit the build button.
What programmer do you have ?
The problem isn't the look up table or the shift registers, its knowing when to do the shifting. It would take some careful filtering to pick out the gaps between characters (3 x dit time) and words (5 x dit time) to synchronize start of the shift. Even working out the shift rate (clock speed) would be quite difficult based on Morse that might also contain interference and other tones. It is even further complicated by the Morse characters having different lengths, thinking of it as nicely structured serial data probably wont work.
Brian.
No thanks. But I would take the effort and cost to build it myself using a single chip and burn arduino in it. Where is this info????1. Buy the Arduino board and the LCD display (about $5 all) and build the circuit from the OZ1JHM link (takes few minutes to build it).
2. Install into the PC the Arduino USB driver:
3. Install into the PC the Arduino IDE software:
4. Connect the Arduino board to the USB of the PC, and upload the .ino file provided by OZ1JHM:
In less than an hour you will have one of the best Morse code decoder ever designed.
You can build the same decoder using Arduino nano which is even cheaper:
Brian.
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?