Morse Key Decoder on ATmega328P – FLASH-based decoding, no interrupts

Hello,

I am sharing a Morse key decoder project based on an ATmega328P microcontroller.

This project was originally developed and discussed on the French Arduino forum.
It is presented here in English for the international community, with complete documentation
and a public repository.


Overview

The project implements:

  • External Morse key input (used as a simple contact)
  • Precise measurement of press and silence durations using millis()
  • Binary encoding of Morse symbols (dot = 1, dash = 0)
  • Decoding via a compact constant table stored in FLASH (PROGMEM)
  • Real-time output on a 20x4 I2C LCD
  • Adjustable Morse speed via two push buttons
  • No dynamic memory allocation
  • No interrupts
  • No hardware timers

The design focuses on deterministic behavior, low RAM usage,
and explicit time-based logic.


Hardware

  • ATmega328P @ 16 MHz
  • 5 V supply
  • External Morse key via mono jack (TIP / SLEEVE)
  • 20x4 I2C LCD (PCF8574)
  • Buzzer driven directly by a digital output
  • Two push buttons for speed adjustment

Schematics and PCB photos are included.


Repository

Complete source code and documentation (English / French):

Thanks for sharing!