NHRC-3 Series Repeater Controllers
Operation Instructions
Firmware Version 5.0

These instructions will guide you in the operation of the NHRC-3 Series repeater controllers. For installion instructions, see the appropriate installation manual.


  1. Introduction
  2. Initializing
  3. Programming
    1. Controller Modes
    2. Programming the Controller
      Programming the Timers
      Programming the CW Messages
      Programming the Flag Bits
      Recording the Voice Messages
    3. Enabling/Disabling the Repeater

  4. Operating
    1. About the IDs
    2. About the Special ID Mode
    3. The Tail Message
    4. Using the Tail Message as the Courtesy Tone
    5. Using the NHRC-DAD Digital Audio Delay with the NHRC-3 series repeater controllers

  5. Programming Example
Index of Tables

  1. Introduction
    The controller's programming is protected from unauthorized access by a 4-digit secret passcode. The controller is programmed by 8-digit DTMF commands that all begin with the 4 digit passcode. Throughout this manual, commands will be shown as ppppNNNN, where pppp represents the passcode, and NNNN is the actual command to the controller.

    In order to save space in the microprocessor memory, the NHRC-3 repeater controllers represent all numbers in "hexadecimal" notation. Hexadecimal, or hex for short, is a base-16 number format that allows a 8-bit number to be represented in two digits. Hex numbers are 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, and F. Converting decimal (the normal base-10 numbers that 10 fingered humans prefer) to hex is simple: divide the decimal number by 16 to get the 1st hex digit (10=A, 11=B, 12=C, 13=D, 14=E, 15=F), the remainder is the 2nd hex digit. Many scientific calculators can convert between these two number systems, and the Windows 95 calculator can, too, if the "scientific" view is selected. We provide a WWW page that can generate all the programming data for the NHRC-3 controllers quickly and easily, see http://www.nhrc.net/nhrc3/nhrc3prog.php.

  2. Initializing the Controller
    The controller will need to be initialized to allow you to set your secret passcode. Initializing the controller also resets all programmable settings to the factory defaults, including the CW ID message, and sets all the stored voice messages to blank. It should not be nessecary to initialize the controller again, unless you want to change the passcode. The only way to change the passcode is to initialize the controller.

    To initialize the controller, remove power and install the init jumper (JP1). Apply power to the controller, and after a few seconds, remove the init jumper. The controller is now in the initialize mode. If you "kerchunk" the controller now, it will send the default CW ID of "DE NHRC/3". Now transmit your 4-digit passcode. The controller will respond by sending "OK" in CW once. The controller will store the passcode and enter the disabled condition.

    At this time, the controller will seem to be "dead", it will not respond to keyups, kerchunks, etc.

    In fact, the controller will now only respond to correctly formatted 8-digit command messages. The controller initializes into the disabled condition specifically to allow programming and configuration of simplex repeaters; if it came up into a duplex operating condition, simplex repeaters could not be programmed!

    To select simplex mode (before enabling the repeater), send the following DTMF sequence:


    Do not enable a simplex repeater without first selecting simplex mode, or else you will not be able to program the controller until you initialize it again!

    If the controller is connected to a full-duplex repeater or link radio, you may wish to enable it at this time. To put the repeater into the enabled condition, send the following DTMF sequence:


    This command will "turn on " the repeater.

  3. Programming
    1. Controller Modes
      The controller can operate in 3 different modes:
      • Repeater Controller Mode
        The controller operates a full-duplex repeater, with a courtesy tone and stored voice messages.

      • Link Controller Mode
        This is a variation of Repeater Controller Mode where the ISD2590 voice storage chip is deleted to lower the cost of the controller. This mode is intended to control remote receivers that are essentially crossband repeaters. Normally, when using link controller mode, the hang time is set to 0 seconds, and the controller is programmed to suppress DTMF muting, so the user's DTMF commands will appear on the input of a "downstream" controller. The controller adds remote control, a timeout timer and CW ID capability to remote or link receivers.

      • Simplex Repeater Controller Mode
        This mode allows simplex (as opposed to duplex) radios to be used as repeaters. Up to 90 seconds of received audio is stored in the ISD2590 voice storage chip, and is "parroted" back when the user unkeys. The ID message is played in CW.

    2. Programming the Controller
      All programming is done by entering 8-digit DTMF sequences. The first 4 digits are the passcode chosen at initialization. The next 2 digits are an address or a function code. The last 2 digits are the data for address or function. To enter programming information, you must key your radio, enter the 8 digits, then unkey. If the controller understands your sequence, it will respond with "OK" in CW. If there is an error in your sequence, but the passcode is good, the controller will respond with "NG". If the controller does not understand your command at all, it will not respond with anything other than a courtesy beep, and then only if the courtesy beep is enabled. If the controller is disabled, and an unrecognized command is entered, no response will be transmitted at all.

      Responses to Commands
      "OK"Command Accepted
      "NG"Command address or data is bad
      courtesy beep
      or nothing
      Command/password not accepted

      If you enter an incorrect sequence, you can unkey before all 8 digits are entered, and the sequence will be ignored. If you enter an incorrect address or incorrect data, just re-program the location affected with the correct data.

      In order to save space, reduce keystrokes, and eliminate some software complexity, all programming addresses and data are entered as hexadecimal numbers. Hexadecimal (or hex, for short) is a base-16 notation that is particularly convenient for use in digital computer systems because each hex digit represents 4 bits of a value. The controller uses pairs of hex digits to represent 8-bit values for the address and data of programming information. Any decimal number from 0 to 255 may be represented by two hex digits. Hex digits are 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, where A through F represent values from 10 to 15. To convert a decimal number from 0 to 255 to hex, divide the decimal number by 16. The quotient (number of whole 16s) forms the left (high) digit, and the remainder forms the right (low) digit. Thus, 60 decimal = 3 x 16 + 12 = 3C hex.

      The DTMF keys 0-9 and A-D map directly to their corresponding digits. Use the * key for digit E and the # key for digit F. A 16-key DTMF generator is required to program the controller.

      1. Programming the Timers
        The NHRC-3 series repeater controllers provide several timers which control the operation of your repeater. The Hang Timer controls how long the repeater will continue to transmit after a received signal drops. This is often called the repeater's "tail". The tail is useful to eliminate annoying squelch crashes on users' radios; as long as a reply is transmitted before the hang timer expires, the repeater will not drop, which would cause a squelch crash in the users' radios.

        The Timeout Timer controls the maximum duration of the retransmission of a received signal. It is more of a safety measure to protect the repeater from damage than a way to discourage long-winded users, even though it is often used that way.

        The ID Timer sets the maximum duration between transmissions of the repeater's ID message(s). Note that the NHRC-3 may transmit an ID message before the timer expires in order to avoid transmitting the ID message while a user is transmitting.

        The timer values are stored as an 8-bit value, which allows a range of 0 to 255. Some of the timers require high-resolution timing of short durations, and others require lower resolution timing of longer durations. Therefore, timers values are scaled by either 1/10, 1, or 10 seconds, depending on the application.

        Enter the 4 digit passcode, the timer address, and the timer value, scaled appropriately. For example, to program the Hang Timer for 10 seconds, enter pppp0264, where pppp is your secret passcode, 02 is the hang timer address, and 64 is the hexadecimal value for 100, which would be 10.0 seconds.

      2. Programming the CW Messages
        CW messages are programmed by storing encoded CW characters into specific addresses in the controller. Use the Morse Code Character Encoding table and the Programming Memory Map to determine the data and address for the CW message characters. For example, to program "DE N1KDO/R" for the CW ID, you would use the following commands:

        DTMF Command Address Data Description/Purpose
        pppp19## 19FF End of message marker

        The CW ID can store a message of up to 40 characters. Do not exceed 40 characters.

      3. Programming the Flag Bits
        Controller features can be enabled of disabled with the use of the Configuration Flag Bits. These bits are encoded into a single byte, which is programmed into the controller at address 01. Multiple flag bits can be selected by adding their hex weights. For example, to set up a link controller with no ISD chip, no courtesy tone, and suppress the DTMF muting, you would add 01, 10, and 20 to produce hex 31, which you would then program into address 01 in the controller as pppp0131.

        In addition to programming the flag bits as a group using address 01, the controller supports commands to set or clear these bits individually. Command 60 is used to clear (zero) a specified configuration bit, and command 61 is used to set (one) a specified configuration bit. For example, to set (turn on) bit 4 (to suppress the courtesy tone), enter the following command: pppp6104. To clear bit 4 and enable the courtesy tone, enter this command: pppp6004. Note that the bit number, not it's hex weight is used for commands 60 and 61.

        Configuration Flag Bits
        Bit Mask Hex
        0 00000001 01 ISD Absent
        1 00000010 02 Simplex repeater mode
        2 00000100 04 Audio Delay Installed
        3 00001000 08 (reserved)
        4 00010000 10 suppress courtesy tone
        5 00100000 20 suppress DTMF muting
        6 01000000 40 use tail message for courtesy tone
        7 10000000 80 special ID mode

        Example Configurations
        Hex Value of
        Flag Bits
        Features Selected
        (none) 00000000 00 Duplex Repeater Mode
        1 00000010 02 Simplex Repeater Mode
        2 00000100 04 Duplex Repeater Mode
        audio delay installed
        0,4,5 00110001 31 Link Controller Mode:
        no ISD chip
        no courtesy tone
        no DTMF muting
        6 01000000 40 Duplex Repeater Mode
        tail message is courtesy tone
        7 10000000 80 Duplex Repeater Mode
        special ID mode
        7,6 11000000 C0 Duplex Repeater Mode
        tail message is courtesy tone
        special ID mode
        7,6,2 11000100 C4 Duplex Repeater Mode
        Audio Delay Installed
        tail message is courtesy tone
        special ID mode

      4. Recording the Voice Messages
        Stored voice messages can be played and recorded, and CW messages can be played by using the message commands. Command 40 is used to play stored voice or CW messages, and command 41 is used to record stored voice messages.

        To record stored voice messages, use command pppp411x, where x is the number of the message you want to record, found in the message numbers table. Unkey after the command sequence, then key up, speak your message, and unkey. The controller will remove about 100 ms from the end of your message to remove any squelch crash that might have been recorded.

        To play stored voice messages, use command pppp401x, where x is the number of the stored voice message you want to play. To play CW messages, use command pppp400x, where x is the number of the CW message you want to play.

        You may wish to have a family member or member of the opposite sex record your ID messages. The recorded audio sounds natural enough that people have actually tried to call the amateur whose callsign is recorded in the controller after the ID message plays!

    3. Enabling/Disabling the Repeater
      The repeater can be disabled or enabled by remote control by setting the value in location 00. Set this location to zero to disable, or non-zero to enable. For instance, to disable the repeater, send command pppp0000. To enable the repeater, send command pppp0001.

  4. Operating
    1. About the IDs
      When the repeater is first keyed the controller will play the "initial ID". If the repeater is keyed again before the ID timer expires, the controller will play the "normal ID" when the ID timer expires. If the repeater is not keyed again, and the ID timer expires, the controller will reset and play the "initial ID" the next time the repeater is keyed. If the repeater is keyed while the controller is playing a stored voice message ID, the controller will cancel the stored voice message ID and play the CW ID.

      The idea behind this IDing logic is to prevent unnecessary IDing. For instance, if a repeater user keys the machine and announces "This is N1KDO, monitoring", the controller will play the initial ID, and no further IDing will occur unless the repeater is keyed again. If users commence with a QSO, keying the repeater at least once more, the controller will play the normal ID and reset the ID timer when the ID timer expires. If the repeater becomes idle for one ID timer period after the last ID, then the next time it is keyed it will play the initial ID. The intent is that the repeater users only hear the initial ID the first time that they key the repeater.

    2. About the Special ID Mode
      The "Special ID Mode" operates differently in "normal" repeater mode than in simplex repeater mode. In normal repeater mode, enabling special ID mode will cause a CW ID to be sent instead of the "normal" ID message. In Simplex Repeater Mode, enabling special ID mode will cause the controller to play the "initial" voice ID (stored as voice message #0) insted of playing a CW ID. In simplex mode, the maximum repeated message duration is reduced by 1/4 to accomodate this voice ID. (About 67 seconds instead of 90). In summary, the special ID mode will cause a CW ID to play instead of the normal voice ID in normal repeater mode, or will allow a voice ID to be played instead of a CW ID in simplex repeater mode.

    3. The Tail Message
      The controller supports a "Tail Message" that plays the nth time the hang timer expires. The number of times the hang timer must expire before the tail message plays (n) is the "tail message counter" at address 05. The tail message counter can be set from 1 to 255. The tail message is disabled if the tail message counter is set to 0. Program the tail message counter value into address 05.

      For example, to have the tail message play after the 4th tail drop, program pppp0504. Try it.

    4. Using the Tail Message as the Courtesy Tone
      The tail message can be used as the courtesy tone if bit 6 is set in the configuration flags. In this case, you will likely want to set the tail message counter value to 0 to keep the message from playing twice occasionally. The message could store the sound of a bell, a dog's bark, or the repeater trustee saying "what?"!

    5. Using the NHRC-DAD Digital Audio Delay with the NHRC-3 series repeater controllers
      The NHRC-3 series repeater controllers support the optional NHRC-DAD digital audio delay board. The NHRC-DAD allows complete muting of received DTMF tones (no leading beep before muting), and suppression of squelch crashes when the received signal drops. The NHRC-DAD has a 128 ms delay on all received audio. NHRC-3 repeater controllers support the DAD with a software switch, settable by a configuration flag bit, and a dedicated connector on the controller for the DAD. If the DAD is not present, then a jumper must be installed between pins 2 and 3 of the DAD connector (see installation manual.) If the DAD is present, then the appropriate configuration flag bit must be set (in the case of the NHRC-3 series controller, set bit 2, hex weight 04.)

  5. Programming Example
    Programming the NHRC-3 series repeater controllers can seem quite complicated at first. This section of the manual is intended as a tutorial to help you learn how to program your controller.

    Let's assume we want to program a NHRC-3 Series Repeater Controller with the following parameters:

    CW ID: DE N1LTL/R FN42
    Hang Time 7.5 seconds
    Timeout timer 120 seconds
    Play tail message every 6 tail drops.

    First, we will initialize the controller. Install JP1 and apply power to the controller to initialize. After a few seconds, remove JP1. Send DTMF 2381 to set access code to 2381. The controller will send "OK" in CW to indicate the passcode was accepted. Now the controller is initialized, and disabled.

    If we were programming a simplex repeater, we would now set the configuration flags for simplex mode, so we could turn the controller on and still be able to program it. For duplex repeaters, this step should not be performed. Send DTMF 23810102 to set the simplex repeater mode flag bit.

    Now we will enable the controller. Send DTMF 23810001 (passcode=2381, address=00, data=01). The controller will send "OK" in CW to indicate the command was successful.

    We will now program the CW ID. Looking at the "Programming Memory Map", we can see that the first location for the CW ID is 0F. The first letter of the ID is 'D', which we look up in the "Morse Code Character Encoding" table and discover that the encoding for 'D' is 09. So location 0F gets programmed with 09. Since the F digit is represented by the DTMF digit '#', the '#' is used to send the 'F'.

    Send DTMF 23810#09 to program the letter 'D' as the first character of the CW ID. The controller will send "OK" in CW if the command is accepted. If you entered the command correctly, but you don't get the "OK", your DTMF digits may not all be decoding. See the Installation guide for your controller to readjust the audio level for the DTMF decoder.

    The next character is the letter 'E', which is encoded as 02, and will be programmed into the next address, which is 10. Send DTMF 23811002.

    The next character is the space character, and it will be programmed into address 11. Send DTMF 23810B00. Here are the rest of the sequences to program the rest of the ID message:

    23811205 (N in address 12)
    2381133* (1 in address 13)
    23811412 (L in address 14)
    23811503 (T in address 15)
    23811612 (L in address 16)
    23811729 (/ in address 17)
    2381180A (R in address 18)
    23811900 (space in address 19)
    23811A14 (F in address 1A)
    23811B05 (N in address 1B)
    23811C30 (4 in address 1C)
    23811D3C (2 in address 1D)
    After the last character of the CW ID is programmed, the End-of-Message character must be programmed. In this case, the last character of the ID message was programmed into address 1D, so the EOM character, which is encoded as FF, goes into address 1E:
    23811*## (EOM into address 1E.)

    To program the hang timer, we must first determine the address of the hang timer by consulting the Programming Memory Map. The Hang Timer preset is stored in location 02. Next, we need to convert the 7.5 seconds into tenths, which would be 75 tenths of a second. Then the 75 gets converted to hex:

    75 / 16 = 4 with a remainder of 11, so 75 decimal equals 4B hex.
    Now program the hang timer preset by sending 2381024B.

    To program the timeout timer with 120 seconds, we get the address of the timeout timer preset, which is 03, and then convert 120 seconds to hex:

    120 / 16 = 7 with a remainder of 8, so 120 decimal equals 78 hex.
    So we will program location 03 with 78: 23810378

    To program the tail message counter, we determine the address of the counter (05) and since 6 is less than 16, the hex conversion is easy:

    6 / 16 = 0 remainder 6, so 6 decimal equals 06 hex.
    We will program location 05 with 06: 23810506

    If we were programming a simplex repeater, we would stop here. Except in the case of the "special ID mode" no voice messages need to be stored for simplex repeater mode.

    Now we can record the 4 voice messages. The voice messages are recorded by "programming" address 41 with the message number, then recording the message. We will program the initial ID message (message number 10, see the "Message Numbers" table) first:

    Send 23814110, then key up again and clearly speak the message to be recorded "This is N1LTL repeater in Candia New Hampshire, an open repeater available to all licensed amateur radio operators." Unkey after you are done speaking.

    The "normal ID" (11), timeout message (12), and tail message(13) can be recorded the same way:

    Send 23814111, speak "N1LTL repeater".
    Send 23814112, speak "A longwinded blatherskite has timed out the repeater."
    Send 23814113, speak "Free Beer Tonight at N1LTL's! (Swiller Lite, too)."
    Any message can be played back at any time by "programming" location 40 with the message code you want to play. To play the CW ID, send 23814000. To play the tail message, send 23814013.

    This tutorial did not discuss programming the Timeout timer, but the concepts described here apply to that timer as well.

Message Commands
400x0 <= x <= 3, play CW message x
401x0 <= x <= 3, play voice message x
411x0 <= x <= 3, record voice message x

Message Numbers
Message NumberContents
01CW Timeout Message "TO"
02CW Confirmation Message "OK"
03CW Invalid Command Message "NG"
10Voice Initial ID Message
11Voice Normal ID Message
12Voice Timeout Message
13Voice Tail Message

Programming Memory Map
0001enable flag
0100configuration flags
0232hang timer, in tenths
031etime-out timer, in seconds
0436ID timer, in 10 seconds
0500tail message counter
060f'O' OK Message
0905'N' NG Message
0c03'T' TO Message
0f09'D' CW ID starts here
19ff(end of message mark)
Note that the entire range of 0F-37 is available for your CW ID message.
Do not forget to terminate the message with the FF (end-of-message) character.

Morse Code Character Encoding
Character Morse
ar.-.-. 001010102a
bt-...- 0011000131
/ -..-. 0010100129
0 ----- 001111113f
1 .---- 001111103e
2 ..--- 001111003c
3 ...-- 0011100038
4 ....- 0011000030
5 ..... 0010000020
6 -.... 0010000121
7 --... 0010001123
8 ---.. 0010011127
9 ----. 001011112f
a .- 0000011006
b -... 0001000111
c -.-. 0001010115
d -.. 0000100109
e . 0000001002
f ..-. 0001010014
g --. 000010110b
Character Morse
h .... 0001000010
i .. 0000010004
j .--- 000111101e
k -.- 000011010d
l .-.. 0001001012
m -- 0000011107
n -. 0000010105
o --- 000011110f
p .--. 0001011016
q --.- 000110111b
r .-. 000010100a
s ... 0000100008
t - 0000001103
u ..- 000011000c
v ...- 0001100018
w .-- 000011100e
x -..- 0001100119
y -.-- 000111011d
z --.. 0001001113
space 0000000000

NHRC-3 Repeater Controller Home Page
NHRC-3/M2 Repeater Controller Home Page
/nhrc-3/operating.php, version 1.21, last modified 02 January 2005 12:30
Copyright © 1997-2005, NHRC LLC, all rights reserved.
Mail comments to