Release notes for the Astrometric Telescope Control System

ATCS firmware upgrade for PrimeTCS-Ui

Version: 4.00.103.
Date released: 5-Jan-2026
Note: ATCS firmware v.4.00.103 includes all features since the last formal release which was 4.00.004

This Astrometric Telescope Control System (ATCS) upgrade is for the PrimeTCS-Ui ATCS controller.

The minimum Maestro4 version which works with this version of ATCS firmware is 0.09.013. Assure that Maestro4 is upgraded to at least this version before upgrading PrimeTCS-Ui firmware.

Installation instructions

  1. Assure PrimeTCS-Ui that the controller is attached via USB to the Windows PC.
  2. Using the Device Manager on the Windows PC, determine the COM port number for the PrimeTCS-Ui controller connection.
  3. Run the ATCS_M_NN_RRR.exe file where N is major version, NN is minor version and RRR is revision.
  4. The "Astrometric Firmware Upgrader" will run. Follow the steps in the user interface. Step #1 will be pre-completed for you. Step #2 is to select the COM port number for the attached controller and click "Connect". Finally, step #3 is to click "Upgrade Firmware". The upgrade will commence and status on progress will be provided.
  5. Power-cycle PrimeTCS-Ui and it should now boot into using the new firmware and connect to Maestro.
=========================================== This file best viewed with fixed-font at this screen width or greater ========================================================

Software Licensing

A software activation license is necessary for major new upgrades of Maestro and ATCS firmware.
There is a substantial amount of work that goes into each major upgrade and this effort needs to be
supported through nominal license fees.  This will assure that further future upgrades and continued support are
available for ATCS.

ATCS: New features this release


GPS time and position
---------------------
ATCS now (optionally) uses its internal built-in GPS for time and position.  See the readme file for the latest version of Maestro for user interface details for GPS.
Note: this feature is only available on ATCS controllers which include a built-in GPS.  Presently, this is only for PrimeTCS-Ui.
Note: After power-up, it takes a period of time (several seconds usually) before ATCS' internal GPS has "locked" onto a sufficient number of GPS satellites to provide
valid time and location.  Once time and position become valid, they will stay valid as long as ATCS remains powered and stationary.

The following ATCL commands support this feature...

SetGPS_TimeEnabled	TSgt	"Yes" will set ATCS to use its internal GPS for time.  "No" will set ATCS to use its internal clock/calendar
					chip for time.  Note: timezone is always provided by the user.
GetGPS_TimeEnabled	TGgt
SetGPS_PositionEnabled	TSgp	"Yes" will set ATCS to use its internal GPS location (position).  "No" will set ATCS to use
					user-set site data for location.
GetGPS_PositionEnabled	TGgp
GetGPS_TimeValid	TGvt	This command returns "Yes" if the GPS is "locked" and GPS time is valid and "No" otherwise.
GetGPS_PositionValid	TGvp	This command returns "Yes" if the GPS is "locked" and GPS position is valid and "No" otherwise.


GetGPS_Latitude		SGga	Returns the latitude read from the internal GPS (in DD:MM:SSh format)
GetGPS_Longitude	SGgo	Returns the longitude read from the internal GPS (in DDD:MM:SSh format)
GetGPS_ElevationWGS84 	SGge	Returns the site elevation above the WGS84 ellipsoid (i.e., "Geoid").  Note: this is *not* the same as altitude above mean sea level.
					For each location on the Earth's surface there is a Geoid separation value (sep) which is the difference between the WGS84
					ellipsoid and mean sea level for that location.  Specifically:
						elev: Elevation above mean sea level in meters.
						sep:	Geoid separation: difference between WGS84 ellipsoid and mean sea level.
						sep = WGS84 ellipsoid elevation - elev, and...
						elev = WGS84 ellipsoid elevation - sep
					Note: elevation is reported in meters (DD.DDm) or feet (DD.DDft) consistent with ATCS' Units format (i.e., Metric or Imperial).
GetUnixTime		TGxt	Returns the number of non-leap seconds, to the 3rd decimal point, that have elapsed since 00:00:00 UTC on 1 January 1970.  This command
					will return "N/A" if ATCS' internal GPS time is not yet valid (determined using the GetGPS_TimeValid command).

Note: Splitting GPS use into separate time and position enabled features address the problem of GPS location dither between power-ups.  More detail: at power-up the
latitude/longitude can be found to be off from the value at the previous power-up by some amount generally an arcsec or less.  However, with any change in position
between power-ups ATCS concludes that its' location on Earth has moved and "voids" Align-from-Last and Align-from-Absolute's encoder indexing.  In practice this <1 arcsec
error can be ignored however a decision was made to not build a feature into ATCS that ignores any error.  To address this issue the concept of "GPS enabled" has been
split into "GPS time enabled" and "GPS position enabled".  With this, the system can be used just for accurate time and not for position determination.  A possible use
model for permeant observatory would be to:
	1) Enable GPS position sensing once to get a fix.
	2) Set the chosen site latitude/longitude to the GPS values reported by Maestro.
	From then on, with GPS position sensing turned off, subsequent power-ups will not incur position dither and avoid voiding "last" position.
Note: ATCS' GPS feature uses only US GPS satellites.

Ethernet connectivity
---------------------
ATCS now supports Ethernet/TCP connectivity both as a server (to receive ATCL commands and send replies) and as a client (to interface to motor drivers using
Ethernet/TCP... further details below).

The following ATCL commands support this feature...

Note: any of the following commands that make changes to network settings require a reboot of the ATCS controller for the new setting to take effect.
SetNetworkIPv4_Address	HSi4	--> Sets the IPv4 network address for the hardware device.  Parameter is a string of the form "xxx.xxx.xxx.xxx" where "xxx" are
					in the range of 0 to 255.  The default/first-use value is "127.0.0.253".
GetNetworkIPv4_Address	HGi4
SetNetworkIPv4_Subnet	HSs4	--> Sets the IPv4 subnet mask for the hardware device.  Parameter is a string of the form "xxx.xxx.xxx.xxx" where "xxx" are
					in the range of 0 to 255.  The default/first-use value is "255.255.255.251".
GetNetworkIPv4_Subnet	HGs4
SetNetworkIPv4_Gateway	HSg4	--> Sets the IPv4 gateway address for the hardware device.  Parameter is a string of the form "xxx.xxx.xxx.xxx" where "xxx" are
					in the range of 0 to 255.  The default/first-use value is "127.0.0.254".
GetNetworkIPv4_Gateway	HGg4
SetATCP_Passcode	HSap	--> Sets the 32-bit passcode that this Astrometric device we require all ATCP clients to provide for access.  The passcode must be
					provided in hexadecimal format proceeded by "0x".  For example: "0xA341B73D".
GetATCP_Passcode	HGap
GetNetworkDeviceID	HGnd	Gets the device ID for ATCS' built-in networking hardware.  Presently, all Astrometric Ethernet-enabled devices ship
					with a network device that reports 1 for this command.

The following are capabilities specific to ATCS' TCP server...

BackChannelSetServerTimeOut	BSto	For the present client connection, sets the timeout (in milliseconds) which, after a period
						of no packets received from the client, the client will be disconnected.  More details are
						provided in the ATCP v.3 specification.
BackChannelGetServerTimeOut	BGto
BackChannelGetUpTime	BGup	Returns the "up time" (time since power-on) for the ATCP server device.  Value represents seconds
						and is provided in hexadecimal format.
GetATCP_ServerSocketNumber 	HGss	This command returns the ATCP Server socket number, that the requesting client is connected to, as a hexadecimal
						number between 0x00 and 0x05.
GetATCP_ServerConnectionStatus	HGcs	This command takes the ATCP Server socket number as a parameter(a hexadecimal number between 0x00 and
						0x05) and returns status dependent on the socket connection status to a client:
						- If not connected: "N/C"
						- If connected: "xxx.xxx.xxx.xxx:n:f" with the following field definitions:
							- xxx.xxx.xxx.xxx is the connected client IP address
							- n is the connected client source port number
							- f is 1 if the socket has experience receive buffer over-run (i.e., more than 512 byte "max ATCP packet size"
								of data received) since the last power-up or 0 for no over-run.
If a client gets disconnected (e.g., timeout) then an alert message is issued "ATCP Server's client was disconnected: "

Associated notes:
	- Ethernet capability is disabled if the ATCP passcode is the factory default value of 0xFFFF0000.  This mandates a passcode change by the sys admin (usually
		through Maestro) and best assures ATCP Server security.
	- Since the ATCS TCP initialization code is only run at startup, any changes to the following result in the need to power-cycle ATCS to re-initialize TCP:
		- Making a physical change to network connectivity such as plugging in a cable that was not plugged in at power up.
		- Changing ATCS TCP Server network settings such as IP address, subnet mask or gateway.
		- Changing ATCS TCP Client (if used) network settings such as server IP address and port number.
		- Changing ATCS Drive Type to TCP1
		- Changing the ATCP Passcode off from the default value of 0xFFFF0000 requires a power-cycle to enable networking.  Subsequent changes to the ATCP
			Passcode can be made without a power cycle.
	- ATCS supports up to 6 simultaneous clients.  When there are already 6 clients connected to ATCS the 7th client attempting to connect will get an error akin
		to "Cannot connect to server at specified IP address and port".

TCP1 Drive Type
---------------
Added support for interfacing to motor drivers using Ethernet/TCP.  Prior version of ATCS only interfaced to motor drivers using step/direction signaling.

The following ATCL commands support this feature...

SetMotorDriveType		MSdt	--> Sets the type of motor driver used with ATCS.  Choices are "StepDir" or "TCP1".
						Note: when set to TCP1 a reboot of the ATCS controller is necessary.
GetMotorDriveType		MGdt
SetTCP_DriveIPv4_Address	MSd4	--> Sets the IPv4 network address for the motor drive for which DriveType TCP1 uses.  Parameter is a string of the form
						"xxx.xxx.xxx.xxx" where "xxx" are in the range of 0 to 255.  Note: for any change of this seeting to take effect, a
						reboot of the ATCS controller is necessary.
GetTCP_DriveIPv4_Address	MGd4
SetTCP_DrivePortNum		MSdp	--> Sets the network port number that ATCS will attempt to connect to the TCP1 drive.  Note: for any change of this seeting to
						take effect, a reboot of the ATCS controller is necessary.
GetTCP_DrivePortNum		MGdp
GetTCP_DriveConnected		MGdc	--> "No" if ATCS failed to connect to the TCP drive at the specified IPv4 address and port number, "Yes" otherwise.
SetTCP1_DriveEnabled		MS1e	--> "Yes" to enable the drive and "No" to disable it.
GetTCP1_DriveEnabled		MG1e
GetTCP_DriveConnectionStatus	MGcs	Returns a signed integer indicating:
						No connection (i.e., connection closed): 0
						Connection established (i.e., connection open): 1
						Connection failed on open: -1
						Connection failed on close: -2
						In the process of opening or closing: other possible (intermediate) positive values are possible
Associated notes:
	- Presently, ATCS supports TCP1 Drive Type motor drivers from ACS.
	- ATCS connects to the TCP1 drive at power-up and remains connected forever unless there is a network problem at which point ATCS closes the TCP client
		connection.  A power-cycle is necessary to re-connect.  The TCP1 interface is implemented this way since re-connecting "on the fly" (i.e. without a
		power cycle) would entail the complexity of a clean-up and restart approach which is possible if this behavior is deemed unacceptable.
	- The TCP1 drive cannot be enable (with the MS1eYes command) unless the drive is stationary.  This because any movement will lead to position error
		in the gimbal's zero-point due to latency associated with sending FPOS to getting it back and setting the zero-point.

Align-from-Absolute support for TCP1 Drive Type
-----------------------------------------------
Expanded ATCS' Align-from-Absolute support to work with the TCP1 Drive Type.  Essentially, in addition to providing reference position to the TCP1 drive every Tick,
ATCS now queries for the drives feedback absolute encoder position and this is thus available for ATCS' Align-from-Absolute feature.

To use Align-from-Absolute, follow this cheat sheet of necessary setup and settings...
	- Assure encoders are installed and indicating nominal signal (i.e., for RESOLUTE: reading Blue, or at least Green, all the way around)
	- Checks to be sure PrimeTCS is properly configured
		- EGea	GetEncodersAbsolute... set with hardware jumpers.  Should return "Yes".  Or, verify that encoders are absolute from Maestro's
			Telescope Encoders Settings dialog.
		- EGbx	GetAbsoluteEncPositionX... returns raw encoder values.  Verify that sensible values are reported as the encoders are rotated.
		- EGby	GetAbsoluteEncPositionY
		- HGe* GetAxEncStatus*... AxEnc processor com status, encoder error/warning/etc.  Only necessary for diagnostic work with Astrometric support.
		- HG*c	GetPTCS_HW_Config*... has encoder model.  Only necessary for diagnostic work with Astrometric support.
	- Set encoder CPR from Maestro's Telescope Encoders Settings dialog.
	- Set encoder polarity from Maestro's Telescope Encoders Settings dialog.
	- Enable encoders from Maestro's Telescope Encoders Settings dialog.
	- Now that the encoder setup is complete, the following commands should work...
		- EGex	GetEncDiagPositionX... alternative encoder position reporting accessible from Maestro's Telescope Axial Coordinates, Motor & Encoder Diagnostics
			dialog.
		- EGey	GetEncDiagPositionY

General Align-from-Absolute changes
-----------------------------------
- For Align-from-Absolute the requirement has been added that the Track Rate must be Drift to Index the absolute encoders.  This is to prevent some measure of position
	inaccuracy do to the latency between "sample and use" if the axis were moving.
- ATCS will now forbid use of absolute encoders for Indexing or Alignment if the absolute position count read from either encoder exceeds the encoder counts-per-rev
	value.

Implemented many time and position accuracy enhancements including...
---------------------------------------------------------------------
- Reduced GPS sampling dither to no more than +/-0.5ms.
- Unix Time, used by the Control Loop, has had its dither reduced by several milliseconds
- Previous versions of ATCS firmware had two sources of error in Sidereal time keeping that have been fixed in 4.00.103:
	- Sidereal time was rounded to a 75ms increment (i.e., up to +/-37.5ms of error) when calculated.  In 4.00.103 this rounding increment has been reduced to 0.5ms
		(i.e., up to +/-0.25ms of error).
	- Sidereal time had a rounding error once per day leading to +/-37.5ms per day of cumulative error.  This has also been reduced to +/-0.25ms of cumulative error
		per sidereal day.
	Note: Sidereal time error instantiates as error in Hour Angle at a magnitude of 15 arcseconds per second of error.  Therefore, the previous method of sampling
		resulted in up to 37.5ms * 15"/s = 0.56 arcseconds of error... very small.
- Added the Base Frequence Corrector (BFC) feature which assures that the ATCS timebase follows GPS time.
	The BFC is enabled by default if the GPS is locked.  If the GPS goes out of lock for a short period (<20 seconds) and subsequently re-locks then the BFC will
	carry on correcting base frequency.  If the GPS goes out of lock for longer than 20 seconds then the BFC is no longer providing nominal corrections.  In this
	case a power-cycle is needed for the BFC to recover.
	- The following command indicates if the BFC is operating nominally:
		- HGbn	GetBaseFrequencyCorrectorNominal: "Yes" if ATCS timebase is within +/-0.25ms of GPS time, "No" otherwise
		- If the GPS looses lock then the GetBaseFrequencyCorrectorNominal command will indicate "No" after about 20 seconds.  At this point the ATCS internal
			timebase will begin to wander off from GPS time by up to +/-3 PPM.  If the GPS looses lock for less than 20 seconds then the BFC algorithm will
			continue to function.
	- By default, the BFC is operating so long as the GPS is locked.  The following ATCL command allows the BFC to be disabled:
		- HSbe	SetBaseFrequencyCorrectorEnabled
			- HGbe	GetBaseFrequencyCorrectorEnabled
		If the BFC is disabled then the GetBaseFrequencyCorrectorNominal command will return "No".  If the BFC is later enabled then a power-cycle of ATCS is
		needed to restart the BFC.
- Added a check and warning if the telescope axes are not stationary for Align-from-Last or Align-from-Absolute. This is because some small
	error can result due to the latency of motion issued or latency of encoder position reading that is immaterial if the axes are stationary
	but incur some alignment error if the axes are in motion.

TMove (trajectory move) feature
-------------------------------
ATCS now implements a "trajectory following" feature which allows for tracking of arbitrary object (e.g., satellite) trajectories in a manner more
accurate than using custom track rates.  This feature is available under contract and documented in the "ATCS Satellite Tracking Architectural Specification".

Drive Latency compensation
--------------------------
- Added Drive Latency compensation for both TMove (where timebase is UnixTime) and other MoveModes (where timebase is Sidereal Time).
	SetDriveLatencyX	MSdl	Sets the drive latency.  This is a value, expressed in decimal seconds, representing the time by which ATCS
						will advance (into the future) its command position output to compensate for latency in the motor drivers.
	GetDriveLatencyX	MGdl
- The following commands support drive latency measurements for the TCP1 Drive Type...
	GetTCP1_DriveLatencyX	MGyx	Returns two decimal values: the 1st is the most recent position sent to the drive and the 2nd is the most recent
						encoder position returned from that drive.
	GetTCP1_DriveLatencyY	MGyy

Support for Ambient temperature reading
---------------------------------------
- Added the following commands to support installation of external temperature sensor #1 for use measuring ambient temperature:
	HSx1	SetExtTempSensor1_ID.	Sets temperature sensor #1 device ID.  Parameter units are 16-digit hexadecimal as follows: 0xHHHHHHHHHHHHHHHH
	HGx1	SetExtTempSensor1_ID
- Added external temperature sensor support.  This includes:
	- External/ambient temperature reading using the GetAmbientTemperature ("PGat") ATCL command.  Note: appropriate optional temperature probe is needed.
	This command returns temperature in the format "sDD.DdegC" or "sDD.DdegF" depending on whether Metric or Imperial is chosen for Units format.
	A value of "N/A" is reported for ambient temperature sensor if not sensor is attached to ATCS.
- Added atmospheric pressure sensing support using the GetAtmosphericPressure ("PGap") ATCL command.
	This command returns pressure in the format "sDD.DdegC" or "sDD.DdegF" depending on whether Metric or Imperial is chosen for Units format.
- Now reports internal device temperature using the GetHW_Temperature ("HGht") ATCL command.  Value is reported consistent with Units setting.

Refraction correction uses measured values
------------------------------------------
- ATCS' refraction correction has been updated to optionally use atmospheric pressure and ambient temperature as inputs (rather than user-entered pressure and
	temperature values).
	In support of this, added:
	SetRefractionCorrEnvFromHW	PSrv	"Yes" to use ATCS' internal atmospheric pressure and (optional) ambient temperature sensor and "No" to use
						the values set with the SetRefractionCorrTemperature and SetRefractionCorrPressure commands.  Note: if the sensor
						values are invalid (e.g., sensor not installed) then the user-entered pressure and temperature values will
						be used which are set with these (pre-existing) commands:
							SetRefractionCorrPressure (PSrp)
							SetRefractionCorrTemperature (PSrt)

Pulse guide feature
-------------------
Added the "pulse guide" feature to ATCS in support of the ASCOM PulseGuide method.  This includes the following new ATCL command that initiate motion at ATCS'
Autoguider velocity for the specified duration of time.
	PulseGuideX_Positive	KPxp	-->	Milliseconds duration
	PulseGuideX_Negative	KPxn	-->	Milliseconds duration
	PulseGuideY_Positive	KPyp	-->	Milliseconds duration
	PulseGuideY_Negative	Kpyn	-->	Milliseconds duration
Note: pulse duration values are rounded-up to the nearest 75ms increment.  So, for example, a value of 30 will result in a 75ms pulse duration

Miscellaneous changes
---------------------
- ATCS now supports 95 degrees "down" for Down Soft Limit (previously only allowed 90 degrees down).
- ATCS now allows East and West limits up to 275 degrees (previously only allowed up to 225 degrees).
- Changed display of temperature (refraction, ambient, internal) to use a precision of 1/10th degree rather than 1 degree.

ATCS: Issues addressed this release

- Previous versions of ATCS firmware used floating point constants with precision appropriate for the older PrimeTCS-i and S-Box controllers.
	With PrimeTCS-Ui full IEEE 754 double precision floating point is used which is several orders of magnitude more precise than what was used in the older
	controllers.  Unfortunately, the code inherited from the older controller still had lower precision constants that, under certain
	"boundary conditions", could cause numerical exceptions (un-allowed conditions) resulting in Internal Errors.  This has been fixed
	in firmware v.4.00.103.
- Fixed a bug where the SetTCP1_TTPOS_AckEnabled ATCL command (MS1pNo) should not NACK dependent on drive type if setting to "No".
- Fixed a bug where if View motion was presently active (MoveMode of "View") then when ATCS was toggled into Slew (either from Maestro or from an attached
	handpaddle) there would be a continuous flurry of "Warning: Slew motion not presently allowed" and View motion would be "stuck" short
	of using the "Stop All" button on Maestro.
- Fixed a bug that did not allow ATCS' internal clock/calendar time to be set using AM/PM format.
- Fixed a bug where autoguider velocity would not be zeroed if a fault occurred.  This did not result in motion during a fault however it did mean that an
	Alert was not raised and velocity would re-start after the fault is removed.
- Fixed a bug the disallowed other than Site #1 to be selected.
Contact Astrometric support with any questions or issues.


Copyright 2026 Astrometric Instruments, Inc.