Heath (Heathkit) Most Accurate Clock II - Programming Information

Model GCW-1001


The purpose of this page is to document the various features of the Heath (Heathkit) Most Accurate Clock II (Model GCW-1001) that are available to the programmer. Unfortunately, the clock was discontinued by Heath and is no longer available except on the used market. However, if you have one of these clocks with the RS-232 interface, there are several interesting pieces of information (other than the time) that you can retrieve from the clocks CPU. The information in this document is based on firmware version 1.02 (11/92).


A

The "A" command returns an ASCII time string in the format:

 
          HH:MM:SS.T xx, where
 
          xx = 'AM', 'PM', or ' '
 

This command is the only useful command if connected via a terminal. All other commands return hexadecimal information which must be interpreted by a computer running appropriate software.


D

The "D" command returns 24 pairs of bytes (48 bytes total) containing the variable divisor value at the end of each of the previous 24 hours. This allows the trimming process to be observed (trimming is described in the reference manual which accompanies the clock). UTC hour 00 is always returned first. The first byte of each pair is the high byte of the divisor * 16; the second byte is the low byte * 16. For example, the byte pair 3C10 would be returned for a divisor of 03C1 hex (961 decimal).


I

The "I" command returns 8 bytes of information on the clocks operation and configuration. These bytes are defined as follows:

 
       | TH | TL | ER | DH | DL | U1 | I1 | I2 | , where
 
       TH = minutes since timebase last trimmed (high byte)
       TL = minutes since timebase last trimmed (low byte)
       ER = last accumulated error in 1.25 ms increments
       DH = high byte of (current variable divisor * 16)
       DL = low byte of (current variable divisor * 16)
       U1 = UT1 offset (/.1 s):  | + | 4 | 2 | 1 | 0 | 0 | 0 | 0 |
       I1 = information byte #1:
 
               | W | C | D | I | U | T | Z | 1 | , where
 
               W = set by WWV(H)
               C = CAPTURE LED on
               D = TRIM DN LED on
               I = HI SPEC LED on
               U = TRIM UP LED on
               T = DST switch on
               Z = UTC switch on
               1 = UT1 switch on
 
       I2 = information byte #2:
 
               | 8 | 8 | 4 | 2 | 1 | D | d | S | , where
 
               8, 8, 4, 2, 1 = TIME ZONE switch settings
               D = DST bit (#55) in last correct frame
               d = DST bit (#2) in last correct frame
               S = clock is in simulation mode
 

The Daylight Savings Time bits #2 and #55 are documented at the National Institute of Standards and Technology web site at https://www.nist.gov/sites/default/files/documents/calibrations/sp432-02.pdf on page 54 of the PDF (document page 48).


P

The "P" command returns 24 bytes containing the number of WWV BCD frames received without error during UTC hours 00 through 23, providing an indication of hourly propagation on 10MHz. These bytes are updated each hour to reflect the previous 24 hour period. UTC hour 00 is always returned first.


T

The "T" command returns the UTC time in the following format:

 
       | HH | MM | SS | T | , where
 
       HH = tens-of-hours and hours (packed BCD)
       MM = tens-of-minutes and minutes (packed BCD)
       SS = tens-of-seconds and seconds (packed BCD)
        T = tenths-of-seconds (BCD)
 

The information returned is always in UTC regardless of the switch settings on the clock. It is up to the programmer to adjust the displayed time to the local time zone (if applicable) and daylight savings time (if applicable) based on the switch settings on the radio (see the "I" command).


@

The "@" command is undocumented in the programming documentation. This command dumps the contents of the clocks scratchpad memory. This information is 181 bytes long and contains all of the information returned by the other commands as well additional information on the running status of the clock. Most of this information is of little use to the programmer. The following table documents those fields which may be of interest. The byte number offsets are zero based (C style arrays). Under the data column, information in parentheses is the data register name as defined in the GCW-1001 firmware (thanks to Terry Purdue for providing me with the assembly source defining the layout of the scratchpad memory):

Byte Offset

Data

42

Switch 1 settings (SWITCH1)

43

Switch 2 settings (SWITCH2)

631

UTC Hours value-packed BCD (HOURS)

641

UTC Minutes value-packed BCD (MINUTES)

651

UTC Seconds value-packed BCD (SECONDS)

661

UTC tenths-of-seconds value-packed BCD (TENTHS)

71-722

Minutes since last trimmed (ELAPSD)

733

Signed value of accumulated timebase error (ERROR)

74-754

Variable divisor (VDIV)

765

UT1 value (SUT1)

776

Information flags (SINFO1)

787

More Information flags (SINFO2)

83-968

ASCII formatted time

98

Number of minutes until HI SPEC expires (SPECTMR)

99

Number of valid frames during current hour (FRAMES)

109-1329

Total valid frames at end each UTC hour (PROPHST)

133-18110

Variable divisor at end of each UTC hour (DIVHST)

 

1 Byte values 63-66 are identical to the information returned by the "T" command.

2 Byte values 71-72 are identical to the TH and TL bytes returned by the "I" command.

3 Byte value 73 is identical to the ER byte returned by the "I" command.

4 Bytes values 74-75 are identical to the DH and DL bytes returned by the "I" command.

5 Byte value 76 is identical to the U1 byte returned by the "I" command.

6 Byte value 77 is identical to the I1 byte returned by the "I" command.

7 Byte value 78 is identical to the I2 byte returned by the "I" command.

8 Bytes values 83-96 are identical to the information returned by the "A" command.

9 Bytes values 103-132 are identical to the information returned by the "P" command.

10 Bytes values 133-181 are identical to the information returned by the "D" command.

The following tables document the bit patterns for SWITCH1 and SWITCH2 data as returned in bytes 42 and 43:

Bit

Switch 1 setting

0

Time zone bit 0 (S_TZ1)

1

Time zone bit 1 (S_TZ2)

2

Time zone bit 2 (S_TZ4)

3

Time zone bit 3 (S_TZ8A)

4

Time zone bit 4 (S_TZ8B)

5

12 hour mode selected (S_12HR)

6

Display UTC instead of local time (S_UTC)

7

UT1 correction selected (S_UT1)

 

 

Bit

Switch 2 setting

0

Propagation delay bit 0 (S_PROP1)

1

Propagation delay bit 1 (S_PROP2)

2

Propagation delay bit 2 (S_PROP4)

3

Propagation delay bit 3 (S_PROP8)

4

Daylight Savings Time enabled (S_DST)

5

Test mode (S_TEST)

6

Minutes set / test 0 / dim 0 (S_MINSET)

7

Hours set / test 1 / dim 1 (S_HRSET)


` (Grave Accent - ASCII 96)

The "`" (ASCII 96) command is undocumented in the programming documentation. This command displays an "Easter Egg" with the names of all of the developers involved in creating the clock.


Utilizing the information returned by the "@" command, I have written a 'C' program for 16-bit Turbo C that will display the current status of the clock. An actual screen dump from this program is available here.


Feature information on the Heath (Heathkit) Most Accurate Clock II (Model GCW-1001) had been available from Ricky Ponder's Web site at http://www.cheta.net/ricky-ponder/mac.htm. However, he no longer has his clock and the web page is no longer available. I have an archived copy of his web page that can be viewed here.

The GCW-1001 User Manual and schematics can be downloaded here.  For those who are interested in higher resolution schematics, they are available here (thanks Larry, W7JYJ for converting my manual to PDF).

By Robert G. Schaffrath, N2JTX

Last updated August 1, 2017