This project implements a real-time DTMF decoder capable of identifying keypad presses from audio signals. DTMF is commonly used in telephone systems where each key press generates two simultaneous tones at specific frequencies.
- Real-time Signal Processing: Continuous audio signal sampling and buffering
- Goertzel Algorithm: Efficient frequency detection without full FFT computation
- DTMF Tone Detection: Supports standard keypad (0-9, *, #) and extended keys (A-D)
- Embedded Systems Ready: LCD display integration and optimised for LPC4088 microcontroller
- EEPROM Storage: Persistent storage for configuration parameters and detected sequences
- Comprehensive Testing: Multiple test implementations and audio samples
- Error Handling: Validates single tone pair detection and handles invalid inputs
- Audio signal buffering and preprocessing
- Quiet region detection for tone separation
- Buffer management for continuous processing
- Goertzel algorithm implementation for frequency detection
- DTMF keymap matching
- Error validation and handling
- LCD display integration for embedded systems
- Real-time result display
- Signal Acquisition: Continuous sampling of audio input
- Buffering: Store samples until quiet region detected
- Frequency Analysis: Apply Goertzel algorithm to detect specific DTMF frequencies
- Tone Validation: Verify exactly two frequencies (one low, one high) are present
- Key Mapping: Match frequency pair to corresponding keypad character
- Output: Display result on LCD
The system utilises EEPROM for persistent storage of:
- Display Mode Configuration: User-selected display mode that persists across power cycles
- User Interface Settings: Toggle between single character and scrolling display modes
- Address 0x00: Display mode setting (0 = single character mode, 1 = scrolling mode)
- Mode 0: Single character display - shows only the most recently detected DTMF character
- Mode 1: Scrolling display - shows a history of detected characters with shifting effect
This DTMF decoder was specifically developed and tested on the LPC4088 microcontroller using the Keil uVision5 IDE.