Friday, September 26, 2014

Minima - With An Encoder

UPDATED: Sep 27, 2014 15:06

An Encoder for the Minima

For the last few days I have been experimenting with three or four implementations to replace the Tuning POT with a Quadrature Encoder (Encoder for short) on the Minima. The implementations range from "Proper" to "Economical". Where "Proper" requires circuit modification and "Most Economical" is 100% compatible with Farhan's original circuit as published. I have experimented and tested each of these solutions, with better than expected results.

The range of solutions each have their pro's and con's.

With exception of adding a simple resistor chain and push-button switches, my overall goals has been to stay compatible (as much as possible) with Farhan's original Minima.

Rotary Encoders

The advantage of a Encoder vs a POT for tuning is that the Encoder does not have "stops" at the extremes, and therefore it is easier to use as re-centering is not necessary.

A typical Encoder internally consists of two switches that turn ON and OFF in sequence when rotated, the sequence can be detected and therefore used to determine the direction of user knob twist.

The switches are connected to Pins Labelled "A" and "B", a third pin "G" is a common to both (normally connect to ground). The switches are normally "open" when the knob is in the detent rest position. Most Encoder also contain a push-button switch labelled "C", which can be used by software to effect mode changes.

Inexpensive ($2 to $5) Encoder are available on Ebay and Electronic Supply houses (Mouser). These inexpensive encoders typically have 16 to 24 detents per knob revolution. Expensive Encoders (>$60) are typically optical and have >200 detents (or pulses) per knob revolution. For the Minima, I suggest the inexpensive Encoders.

I have used Rotary Encoders in several of my previous projects.

Note: for all Encoders, pins "A" and "B" can be connected in reverse to correct direction of rotation.

Now for some proposed implementation details

A Proper Implementation

A "Proper" Encoder circuit requires two (or three, if push-button is used) dedicated I/O line from the microprocessor. At least one of the two lines should be connected to an I/O pin that is configured for Interrupts. When the Encoder is turned, the direction and magnitude can be determined. Software can be written to use this information to change Frequencies, or select Menus, or etc, etc.

Because the original Minima does NOT have extra I/O pin available, modification of the original circuit is necessary to use a "Proper" encoder implementation. To free up some I/O pins, a typical modification include moving the LCD Display to I2C via an inexpensive "BackPack". But this has it own problems, as the Minima currently uses the I2C pins to control the Si570 VFO. The Si570 is a 3.3volt device and the BackPacks are typically a 5.0volt device. The voltage disparity can be alleviated via the addition of a resistor network and/or an I2C Expander (details are not included).

To used this "Proper" configuration, Interrupt Software and Encoder Libraries need to be downloaded and included to be compiled into the Minima Sketch. This included software and libraries uses precious space that could be used for other functionality.

The major advantage is responsiveness of the Encoder and with little or no adverse reaction on other hardware elements. The accumulated magnitude of the interrupts can be used to implement a type of inertia feel, found with normal radio dials.

A Modified Proper Implementation

A modified version of "Proper" implementation is the same as above, except the Interrupt and Encoder Libraries are not used. Software Polling of the Encoder I/O lines is used to get the rotation valuses. On the surface, this may seem unacceptable, but in practice the Sketch's Idle Display Loop is quick enough to display changing digits faster than the eye can see and therefore polling fast enough to be usable.

The disadvantage of this implementation is that Polling is necessary and any stupid delays within the Idle Loop will adversely effect over all performance. Programmed Idle loop delays should be avoided. With polling, magnitude accumulation is slower and therefore it is more difficult to implement an inertia dial feel.

Special code that runs outside of the normal Idle Display Loop has to accommodate Encoder polling. My implementation of Beacons come to mind.

An Economical Implementation

A modified Minima that uses my suggested Resistive Chain Push-button switches can be easily augmented to use an Encoder.

The POT is removed. The "A" pin of the Encoder is connected to the POT's abandoned processor connection (pin A2).  The Encoder's pin "C" (the push-button) is connected across (or replace) button 7.  The Encoder's pin "B" is connected to Encoder pin "C" with a 4.7K ohm resistor.

Note: a better description and diagram will be published later.

This may seem to be a strange configuration, but when the Encoder is being turned, the "FN" button is not typically being used. And, when the "FN" button (or any button) is be pressed the Encoder is not being twisted. Software can detect this and do the right thing.

Experiments, and in practice, has shown that this works very well.

This will probably be my first published implementation. To avoid Interrupt Software and Encoder Libraries, polling software (with its small code space requirement) will be used to detect the Encoder rotation.

The goal will be to eventually publish all implementation with conditional compile flags that the user can select.

The Most Economical Implementation

Farhan's original Minima circuit can be made to work with an Encoder with only slight modification. Similar to above, the POT is removed. The "A" pin of the Encoder is connected to the POT's abandoned processor connection.   The Encoder's pin "C" (the push-button) is connected across the "FN" button.  The Encoder pin "B" pin is connected to Encoder pin "C" with a 4.7K ohm resistor.

This may seem to be a strange configuration, but as stated above, it works.

Software changes are necessary to decode and use this configuration, but the results will be the same as original. Or better yet , the software can be improved to not require re-centering of the dial before reverse tuning can be effected.

Theoretically, an original Minima could be built with only a Display and an Encoder Knob on the face plate, this is because the FN button is contained within the Encoder.

As time permits, and if desired, I may publish this software implementation.

Stay Tuned

More information will follow.

-- Home Page:

1 comment: