Navitar sells a range of specialist microscopes featuring high magnification, long working distance and motorized zoom and focus. Navitar calls these the Zoom 6000 and the 12x, both of which come in a range of configurations featuring manual and motorized bodies. The motorized bodies are provided with a controller that interfaces with a PC via USB.

An unfortunate limitation of the official Navitar library is that it does not support 64 bit Windows. Furthermore, it does not support control of multiple devices connected to one PC.

To solve both of these problems Norris Software has developed NorrisNavitar64 to communicate with and command this controller.

Contact Ashley at Norris Software for licensing options and pricing -

Features include:

Here is a succinct code snippet demonstrating NorrisNavitar64 in action:

private bool TestNavitarConnection()

            // NorrisNavitar64 Example

            // Are there any controllers present?
            int NumberOfControllers;
            if (!NorrisNavitar64.NorrisNavitar64.GetNumberOfControllers(out NumberOfControllers)) return false;
            if (NumberOfControllers <= 0) return false;

            // What are the controllers called?
            List<string> ControllerNames;
            if (!NorrisNavitar64.NorrisNavitar64.GetControllers(out ControllerNames)) return false;

            // Use the list of controller names in some way, a drop down connection box, for example.
            // The controllers names come from the controller serial number and a programmable designation.
            // Because of this the name provides a robust means of connecting to an actual specific device.

            // For the purpose of this test code, let's connect to the first controller by name...

            if (!NorrisNavitar64.NorrisNavitar64.ConnectToFirstController())
                // After any failed call to the library there is a method to retrieve the error message
                // For brevity we will stop checking results and returning error messages for the rest of this example.
                return false;

            // Read zoom axis properties (same syntax for focus)
            int ZoomInitialVel;
            int ZoomMaxVel;
            int ZoomAccel;
            int ZoomForwardBacklash;
            int ZoomReverseBacklash;

            NorrisNavitar64.NorrisNavitar64.GetZoomConfiguration(out ZoomInitialVel, out ZoomMaxVel, out ZoomAccel, out ZoomForwardBacklash, out ZoomReverseBacklash);

            // Read zoom range (same syntax for focus)
            int ZoomMin;
            int ZoomMax;

            NorrisNavitar64.NorrisNavitar64.GetZoomRange(out ZoomMin, out ZoomMax);

            // NB: The interface supports a "home" command, but this is not required 
            // as the microscope is always homed by the controller when power is applied.

            // Read zoom position (same syntax for focus)
            int ZoomPosition;

            NorrisNavitar64.NorrisNavitar64.GetZoomPosition(out ZoomPosition);

            // Drive zoom to a desired position (same syntax for focus)
            int DesiredZoomPosition = (ZoomMax - ZoomMin) / 2;   // Middle of range


            // End of example code, no errors, return true
            return true;


Contact Ashley at Norris Software for licensing options and pricing -

Please note, the library has been written in C# for .NET applications. If demand is high enough Norris Software is committed to writing a native DLL in C++. If this will be of benefit to you please email and voice your interest.

What Exactly is This?

NorrisNavitar64 is what I call an "interface library" but others may call it a "control library" or an "SDK". I'm really sorry for the naming confusion, but there is some disparity in the industry as to what to call a class that interfaces with hardware.

In the interest of being perfectly clear, NorrisNavitar64 includes:

  • A device driver.
  • A managed (.NET) DLL defining a static class.

There is source code for the DLL, but you do not need to use that for your project, it is just provided in case you wish to see how it works, or to modify it in some way (unlikely). To start using NorrisNavitar64 you simply need to assign the device driver to the Navitar device (full instructions provided) and then include a reference to the DLL in your own application. The static class is now available to you, as per the demonstration code shown above.

All images of Navitar equipment shown on this page have been sourced from the public Navitar website.