Adding User-programmable Start-up Tone
to the Multi-tone CTCSS Tone Encoder
This
describes a small upgrade for my multi-tone CTCSS encoder. It
allows the CTCSS tone generated at power-up to be programmed
by the user.
All
other features remain unchanged including the small 64 x 32 (or 72 x
40) tiny OLED CTCSS frequency display and the ability for the user to
select any of the 50 standard CTCSS tones.
Figure 1 : My original multi-tone
CTCSS encoder with tiny OLED display
Introduction
My
compact multi-tone CTCSS encoder has been one of my most popular
projects. It is really easy to build with fewer than 20 parts. Adding
it to an existing legacy FM transceiver to give access to a variety of
CTCSS-controlled repeaters is also usually quite easy. You can read
about a couple of versions of this original multi-tone encoder here.
Making it so small with a 8-pin microcontroller resulted in one important limitation. Whenever the unit was turned on, the first CTCSS tone generated by the encoder
was always 123.0Hz. This was hard-coded into the software. If the
repeater that you routinely used required another CTCSS tone, say
146.2Hz, then every time you turned your transceiver on along with the
multi-tone CTCSS encoder, you had to select 146.2Hz again. Yes,
that's was bit of an issue after doing it the first dozen times.
Startup CTCSS Tone Modification
This software update resolves that issue. My
modified software allows the user to select and save any of the 50
CTCSS tones in EEPROM memory for use as the starting tone.
This
software change also requires an additional resistor to be added to the
original circuit. It also uses the pushbutton integrated on the shaft
of most rotary encoders. Pressing and holding this switch for more than
about half-a-second automatically saves the currently selected tone in
the ATtiny85's EEPROM memory as the start-up tone. If your rotary encoder does not have this switch, a separate momentary SPST switch may be used instead.
Everything
else works as usual i.e. Rotating the encoder allows any of the 50
CTCSS tones to be selected and generated instantly, very precisely, and
with minimal distortion.
Circuit Changes
Figure 2 shows the modified schematic with the addition of R5, a 1k8 resistor, a jumper to one of the encoder switch contacts, and the grounding of the other switch contact.
Figure
2 : The memory feature requires several changes (highlighted) to the
multitone CTCSS encoder circuit (Right click to see these details more
clearly)
Construction
The
additional items are shown in Figure 3. I've drawn the changes based on
my tiny "universal" CTCSS board. I think it is the clearest way to show
the required changes. Obviously similar changes can be made to other
PCB versions that I've described.
Figure 3: The changes required to add the memory feature to the basic CTCSS PCB version are minimal
Now,
just a couple of brief notes. First, if your encoder operates in
reverse i.e. Selecting lower frequency tones when the rotary encoder is
rotated clockwise, just reverse the 1k8 and 3k9 resistor connections to
the encoder pins. Manufacturers make these encoders in several ways and
some can require this change.
Secondly, ite
schematic (Figure 2) and wiring diagram (Figure 3) show the multi-tone
CTCSS encoder powered from 3.3V but it may be powered from 5V if
desired. The CTCSS tone output level will be greater with 5V with a 3.3V supply.
Figure 4 shows a bench test version of my multi-tone CTCSS encoder using the new memory software.
Figure 4: My multitone CTCSS encoder is very compact with its 64x32 pixel OLED display.
Updating the ATtiny85 Software
Updating
the software requires reprogramming of the ATtiny85. The bad news is
this requires a
specialized HV programmer OR a fuse resetting device along with a
regular programmer like the very cheap and readily available USBasp
programmer.
The
"fuse" settings programmed in the ATtiny85 configure the chip's
firmware for each application. In the case of the multi-tone CTCSS
encoder, the required fuse settings disable the chip's Reset
function to allow access to other Pin 1 functions. That setting also
prevents programming with a standard programmer.
Expensive
HV programmers allow reprogramming without any fuss. Much cheaper fuse
resetters allow the fuses to be reset to factory settings first. That
allows an ordinary standard programmer to be used again.
And
I have a good news for you. I have designed a very cheap fuse resetter.
It resets the fuses in any 8-pin ATtiny85 back to the factory-default
condition. Using widely available parts and running from a USB port or
wall wart, it's a very low cost solution. It also clears the flash and
EEPROM memory to allow the Lock fuses to be reset, too. It works on
tiny13, tiny25 and tiny45 devices as well. Details can be found here.
When you are ready, email me for the new software (My email address is on my main webpage) Ask me for the startup tone multi-tone CTCSS software.
I have so many CTCSS designs here that just asking me for "CTCSS
software" will delay your build while we sort out what you actually
need. Don't forget to tell me it's for your personal use and not for
any commercial purpose etc etc). Then, using this HEX file, reprogram your ATtiny85 flash program memory.
How do you do this? One example is described here.
After programming the flash memory with the HEX file, don't forget to reprogram the ATtiny fuses with the following HEX values:
High: &57h (Disable RST, Save EEPROM)
Low: &EFh (for external 8MHz crystal)
And that's it. Turn the new multi-tone CTCSS encoder on and enjoy the new memory feature!
Downloads:
Software: A
ZIP file contains the HEX
files for directly programming the ATtiny85 chip.
- CTCSSMultiGen_64x32_72x40_MEM_PencoderV01.hex
** See the text above explaining how to get this file from me. I usually respond quickly to such requests.
Want to go back to the main page? Click
here to
return directly.