Home » Blog » Projects » Software Projects

Category: Software Projects

Arduino AD9850 Rotary Encoder Commands

ky040As described earlier, my signal generator is controlled by LCD Keypad buttons and a rotary encoder. The KY-040 rotary encoder is cheap and reliable. You can buy them on eBay for around a dollar each and you should always keep a few around.

Rotary encoders are used to send tuning pulses to an electronic device. Your car radio probably uses rotary encoders for changing volume and frequency. They work by sending pulses when turned. These pulses are on two channels (A and B) and are sent 90 degrees out of phase with each other.

Read more

Arduino AD9850 Control – Reading Button Commands

The main program loop for my Arduino AD9850 control program begins by checking for button commands from the LCD 1602 Keypad. Then it moves on to checking the status of the KY-040 optical encoder. The encoder outputs are translated to equivalent button commands, depending on the direction of turn and closing the push switch. After this, the program moves on to processing the button commands, which tell the signal generator what to do.

void loop()
	int btn = BUTTON_NONE;

	* Get the Inputs. Priority given to LCD Keypad buttons.
	* Turning encoder produces BUTTON_UP or BUTTON_DOWN
	* Pressing encoder switch produces BUTTON_SELECT or BUTTON_SELECTLONG
	btn = ReadLCDBtn();
	if (btn == BUTTON_NONE) {
		btn = CheckEncoderTurning();
	if (btn == BUTTON_NONE) {
		btn = CheckEncoderSwitch();
	/* Deal with Menu activities, if any */
	btn = ProcessMenu(btn);


Read more

Arduino AD9850 Control Library

When you are writing an Arduino AD9850 library, you need to create two files. The first is a header file, shown immediately below. The header file describes a class, which is then implemented in the C++ file, shown below. The header file is included in your main Arduino program.

// AD9850B.h

#ifndef _AD9850B_h
#define _AD9850B_h

#if defined(ARDUINO) && ARDUINO >= 100
	#include "arduino.h"
	#include "WProgram.h"

#define DDS_CLOCK 125000000
#define FREQ_FACTOR 4294967296

typedef enum SweepState { ssOff, ssRunning, ssFinished };

class AD9850B
	 int lineCLOCK;
	 int lineLOAD;
	 int lineDATA;
	 int lineRESET;
	 unsigned long _frequency = 10000000;
	 double _calfactor = 0;
	 boolean _active = false;
	 void PowerDown();
	 void Reset();

	AD9850B(int gW_CLK, int gFQ_UD, int gDATA, int gRESET);
	void Init();
	boolean GetActive();
	void SetActive(boolean param);
	unsigned long GetFrequency();
	void SetCalibration(long param);
	void SetFrequency(unsigned long param);

extern AD9850B dds;

Read more

Calibre e-book Manager

Calibre e-book

If you read a lot, the Calibre e-book Manager is indispensable.

I read a lot. Audiobooks for fiction, e-books for non-fiction and reference. While I used to be an avid public library user, it now seems a lot easier just to find books online. Over the past few years I have collected around 700 books in e-pub, mobi, PDF, deja-vu and other formats.

I adopted the Calibre e-book Manager four years ago. This is an open source application with amazing capabilities:

  • Available for Windows, Linux, Apple OSX
  • Stores books in a single folder called Calibre Library
  • Supports all the major e-book formats, and provides the ability to convert books from one format to another
  • Enables the use of meta-data to organize your library into different series and by categories.
  • Enables you to serve your library over the network, and read your books from anywhere using a browser.
  • Bookmarks and full-text search, copy and paste, and so on.

You can use as many or as few of the features as you want. The readers included with Calibre e-book Manager are very flexible, and include the ability to change font sizes, as well as that all important “full screen” display to remove distractions.

Calibre e-book Manager on a Windows 10 Tablet

Recently I received a CHUWI Hi8 Windows 10 Tablet. I wondered how well it would work as a portable book reader. It works great with Calibre e-book Manager installed. The screen is a bit small, but I can increase the font size, and the device is much lighter than my generation one iPad.

Rather than copying books over one at a time, I found a neat way to install and synchronize the Calibre e-book library with my main computer. I simply use SynchBackFree to mirror my main Calibre library to my CHUWI tablet. So now, every time I add a new book to my main library, the tablet gets updated later in the day. I can take my 700 book library anywhere I go.