A professional-grade programmable frequency generator built with ATtiny1614 microcontroller and Si5351 clock generator module. This open-source instrument generates three independent frequency outputs with high precision and flexible control.
- Microcontroller: ATtiny1614/414 (modern AVR architecture)
- Clock Generator: Si5351 programmable oscillator
- Output Channels: 3 independent outputs (CLK0, CLK1, CLK2)
- Frequency Range: 8 kHz to 150 MHz (extendable to 160 MHz)
- Resolution: Down to 1 Hz steps
- Interface: I2C 16×2 LCD + Rotary encoder with push button
- Storage: EEPROM for saving settings
- Six-decimal precision in MHz mode (X.YYYYYY MHz)
- Three-decimal precision in kHz mode (XXX.XXX kHz)
- Real-time calibration with Si5351 crystal correction
- Automatic save of all settings to non-volatile memory
- Modular menu system with intuitive navigation
- Rotary Encoder: Navigation and value adjustment
- Encoder Button: Selection and menu confirmation
- 16×2 I2C LCD: Clear display of menus and values
- Status LED: Visual feedback (optional)
- Rotate: Browse options or adjust values
- Press: Select/enter menu or confirm action
- "bak" option: Return to previous menu level
- **At startup, the following options are available: CLK0, CLK1, CLK2, and Calib. Rotate the encoder to select, press to enter. ##CLK Menu
- **Each output provides: Freq (frequency adjustment), OnOff (enable/disable), Step (step size selection), bak (return).
- Range: 8 kHz minimum, 160 MHz maximum
- Format: Auto-switching between MHz/kHz display
- Storage: Automatically saved to EEPROM
- Limits: Protected against out-of-range values
Choose from 7 precision levels:
- Fine: 1 Hz, 10 Hz, 100 Hz
- Medium: 1 kHz, 10 kHz
- Coarse: 100 kHz, 1 MHz
- Enable/Disable: Individual channel control
- State memory: ON/OFF status preserved
- Instant apply: Changes take effect immediately
- Real-time adjustment: Immediate frequency correction
- Crystal compensation: ±30 ppm typical range
- Auto-save: Calibration values stored permanently
The following parameters are automatically preserved:
- Frequency settings for all three channels
- ON/OFF states for each output
- Step size selection per channel
- Calibration value for Si5351 crystal
- Arduino IDE with megaTinyCore
- Si5351 Library by NT7S or Etherkit
- LiquidCrystal_I2C library
- RotaryEncoder library
ATtiny1614 ── I2C ── 16×2 LCD │ ├── SDA/SCL ── Si5351 │ └── Pins ── Rotary Encoder
- Install megaTinyCore in Arduino IDE
- Choose the ATtiny1614/1604/814/804/441/404/241/204
- Select board: ATtiny1614
- Programmer: UPDI (jtag2updi / serialUPDI)
- Flash the firmware from
/firmware - Calibrate using reference frequency source
- Minimum frequency: 8 kHz (Si5351 limitation)
- Maximum frequency: 160 MHz (absolute maximum)
- Recommended max: 150 MHz for stable operation
- Perform initial calibration with known reference
- Recalibrate if frequency drift is observed
- Use stable power supply for best accuracy
- Allow warm-up time for temperature stability
| Issue | Solution |
|---|---|
| No display | Check I2C address and connections |
| Unstable frequency | Verify power supply quality |
| Cannot set frequency | Check Si5351 library initialization |
| Settings not saved | Verify EEPROM write cycles |
- Frequency stability: ±(calibration accuracy + crystal drift)
- Phase noise: Dependent on Si5351 performance
- Output levels: Si5351 typical (3.3V CMOS)
- Current consumption: <50mA typical
Contributions are welcome! Please:
- Fork the repository
- Create a feature branch
- Submit a pull request with detailed description
MIT License - See LICENSE file for details
- Si5351 Library Maintainers: NT7S, Etherkit
- megaTinyCore: Spence Konde
- AVR Community: For continuous support and development
Keywords: frequency generator, Si5351, ATtiny1614, signal generator, clock generator, programmable oscillator, RF source, lab equipment, DIY instrumentation, Arduino project, electronics hobbyist, microcontroller project
Categories: Electronics, Test Equipment, Arduino, Microcontrollers, RF Design