04/23/2017 at 16:37 •
Just released version 1.0 of the alternative firmware. The internal name has been changed to SH-100 to indicate big contribution from crHARPER.
Full source etc on GitHub (any bug reports there please).
04/19/2017 at 00:11 •
A huge thank you to chHARPER for contributing a whole array of improvements/bug fixes to the firmware.
- Improved button operation.
- Easier frequency setting with digit rollover, or wrap-around (9 to 0 and 0 to 9).
- Settings saved to EEPROM when Run Button is pressed.
- When Cursor Button is held down (>5 sec.), frequency resets to zero to simplify setup.
- Full 500KHz operation now implemented.
I received a pull request from him this morning and will be testing the changes over the next few days, if all goes well a 1.0 release with the changes soon after.
Open source/development wins again!
02/14/2017 at 14:43 •
At the end of the road for this project, I've moved on and started the Funktion Generator project, this project that will utilise multiple microcontrollers with one doing DDS synthesis and anothiner driving the UI, this allows for adjustments on the fly etc. Good progress has already been made, with the power supply (with +-9V rails) built and working, and the firmware for the DDS generator running and accepting commands vi I2C/TWI.
12/11/2015 at 13:09 •
Picked up a few great tips from today's Embed with Elliot (Debounce your noisy buttons, part II) and the buttons are now all nicely de-bounced. However I was a little premature moving onto the major improvements. This required some GIT voodoo the outcome of which all major improvements are now on the ng-dev branch and master is back to being the stable released branch.
So with the changes out of the way tags have been pushed for release 0.2 which fixes the bouncing issues with buttons. There is still one outstanding issue relating to the start/stop button, it's not possible to really de-bounce this button once DDS generate has started so I've simply added a 1/4 second delay to give the user time to release the button.
The next generation of the firmware does present some issues and I'm considering starting a new project entirely to build a DDS generator from scratch but utilising two micros, one for DDS generation and one for the UI. This would allow for much nicer UI interaction and to make on the fly changes to frequency. I believe sweep functionality can be easily added to this solution however which would greatly improve the usefulness of this product, that however will be the last improvement I will make.
12/07/2015 at 12:12 •
10/30/2015 at 16:36 •
Proof of concept was successful and I can get generate a frequency sweep using a timer to increment the size of the frequency step, effectively adjusting the frequency. Next steps are to add UI to specifiy a start/dest frequency and a sweep period.
10/28/2015 at 14:41 •
After a tweak to the approach used to break DDS loop, I have a version that I consider to be 0.1 video to come soon.
Release has been tagged in Git. See GitHub project page for build/install instructions. I would suggest installing the tagged release (release-0.1) or install master if you want to try out the latest changes (nothing really as of writing this summary).
Time for new features! :)
10/25/2015 at 15:45 •
UI to select wave form and set frequency working (and the first of the improvements, cursor will remain at last location).
Next steps are to modify the DDS loop to be able to break out and implementation of the run/stop button via an interrupt.
With that the initial goal of an equivalent firmware with some of the UI quirks fixed is reached. Following from that the next steps are:
- Improved input context, allow the mode button to select the input context, initially frequency and function but that then provides for the ability to configure a sweep.
- Support for sweeping frequencies, likely implemented with a timer interrupt to adjust frequency.
- Adding support for interaction via a rotary encoder,, to use some of the free pins, if implemented with interrupts this could allow for configuration of the frequency while it's running.
There are certain hardware limitations (eg buttons require row scanning) that does make certain things difficult while trying to run a tight loop required to do DDS. The next project will likely utilise 2 micros, one running DDS that is slaved to a master for implementing UI.
10/23/2015 at 15:30 •
LCD driver code added, based on https://github.com/aostanin/avr-hd44780 with modifications to work with the reversed PIN used.
A basic UI has been put together. Latest code pushed back to Github.
Next step is to get button row scanning and interrupts working. ASM for the DDS loop needs to be breakable so changes can be made.
10/20/2015 at 14:15 •
Just got frequency control code to work. Is based on the work of Joonas Pihlajamaa in this article which in tern is based Jesper Hansen's work. However I have made some changes to the control loop to use a 24bit step while still using SRAM. This provides much more accuracy at low frequencies, the 16bit implementation spikes up to around +-18% error vs 24bit which reduces this to a peak of +-0.013%*
* See this spreedsheet for the modelling I used to come up with the error values.
Set to 123456Hz ;)
Latest code has been pushed toGitHub. Onto UI...