This project is unfinished.
A function generator is a laboratory instrument used to generate various electrical waveforms. This project utilizes DDS DDS (direct digital synthesis), a technique that allows the creation of arbitrary waveforms from a single base frequency.
The current version of the PCB uses components with 0402 (or similar) footprints. Use of these components wasn’t the best choice - they're too difficult to solder, and there was no need to minimize the board size. The next version of the PCB will switch to 0805 components for easier assembly.
Tools: PlantUML
Tools: KiCad (for PCB design).
Tools:
- Business Logic: Written in Forth, a stack-based programming language designed for embedded systems and control applications.
- Drivers: Developed in C++17.
- Hardware Abstraction Layer (HAL): Auto-generated using CubeMX, a tool from STMicroelectronics.
This project includes an LCD for user interaction. To simplify the creation of the layout, a simulation environment has been developed.
This simulation combines the following:
- UI: Built using PyQt for rendering the LCD layout and facilitating user interaction.
- Business Logic: Reuses the core firmware logic directly from the hardware codebase.
- HAL and Driver Mocks: Created in C++.
The device's enclosure is designed using OpenSCAD, a script-based 3D CAD modeler that allows precise and parametric design.
Repetitive setup tasks are best left to automation, which is why the development environment is managed with Docker. This approach eliminates the need to deal with outdated installation lists or READMEs—just run the container, and everything is ready to go.