Student der Physikalischen Technik an einer deutschen Fachhochschule. Gelegentliche Aushilfe als Tutor im Grundlagenpraktikum der Physik.

LTZ1000 based Voltage References and CERN’s HPM7177


I don’t consider myself as a voltnut. I don’t design precision circuits and I don’t do crazy and expensive things like selecting, binning or matching of super-expensive components (Zener voltage references, foil resistors or opamps). I don’t spend my evenings on Christmas doing circuit simulations in LTspice. However, I like the idea of DIY-ing of an existing precision circuit  design and verifying its performance. Thanks to Illya Tsemenko, Marco Reps and the voltnuts all around the world and their endless efforts in searching for the best design for a DIY voltage reference – it is nowadays possible to build a laboratory-grade, high-performance solid state voltage reference using off-the-shelf components which performs very close to their commercial available counterparts and costs just a fraction of its price (perhaps less than 10%). In this self-shaming blog entry, I want to talk about how I totally didn’t build my own voltage reference yet and how I am trying to measure ADRmu based voltage references by using CERN’s HPM7177 high-precision digitizer I also didn’t build myself. Please note: I’m not a metrologist. The reality is much more complex and the devil is always in the details. I hope that the informations provided here aren’t too far off. If so, please consider consulting ChatGPT for further guidance 😉

Voltage references – A quick summary

Voltage references are electronic devices used as a representation of the physical quantity “direct voltage” (DC volts). In the early days of DC volts metrology, voltage references were based on electro-chemical cells (Clark cell, Weston cell) before they were superseded by Josephson Voltage Standards (JVS) during the early 1970s and 1980s. Weston cells are very delicate devices and contain hazardous/toxic materials (mercury and mercury/cadmium amalgam, cadmium sulfate and mercurous paste) and therefore are not the kind of electronics device one wants to keep at home.

Quantum Metrology Porn: PTB’s Josephson Arbitrary Waveform Synthesizer (JAWS) IC (left), Programmable Josephson Junction Series (top right) and Quantum Hall Device (bottom right) as seen on Maker Faire Hannover in 2022.

JVS is the most accurate device for generation of DC voltages, however it’s very complex and expensive due to its needs for very specialized equipment (microwave feed, cryostat, probe, superconducting integrated circuit chip, readout and control system).

There is currently only one viable and affordable voltage reference option for a precision electronics hobbyist: an ovenized Zener voltage reference. This solid state voltage reference design revolves around a subsurface (“buried”) Zener reference with a heater resistor for temperature stabilization and a temperature sensing transistor, which also compensates the temperature coefficient (TC) of the Zener reference. Ovenized Zeners are widely used as a DC volts reference in laboratories and as an integral part of high-precision test equipment such as digital multimeters (e. g. HP/Agilent/Keysight 3458A, Fluke 8588A), calibrators (Fluke 5700A, Fluke 5730A) and ADCs/DACs. They can also be used as voltage standards for digital multimeter calibration, as part of a Kelvin-Varley voltage divider or act as a so-called transfer standard – a transportable artifact with a well-known and predictable properties (stability, noise, TC) in order to “transfer” the quantity “direct voltage” between two laboratories.

Linear Technology’s LTZ1000ACH Ultra Precision Reference.

Building a world class DC voltage reference is difficult

Building a voltage reference based on Linear Technology’s LTZ1000/LTZ1000ACH or its successor Analog Devices’ ADR1000 takes a bit of effort and… money! Almost every serious design relies on precision electrical components because every component contributes to the performance of the future voltage reference. It starts with the printed circuit board (PCB). The voltnuts have figured out how to arrange the components on a PCB in order to deal with thermal gradients and thermocouple effects, electromagnetic interference (EMI), circuit protection and different sources of noise. There are many PCB designs available online, such as xDevs’ KX/FX, Dr. Frank’s LTZ1000 or Marco Reps’ ADRmu. The Gerber files can be downloaded free of charge and can be used for submission to a PCB manufacturer (e. g. JLC PCB or PCBway). You can also DIY the printed circuit board by etching the traces by yourself. Ordering a PCB would be the easy part because you get a very good quality PCB without having to deal with chemicals and drilling holes. Everything else concerning building the voltage reference can be considered as very difficult or even “hard mode”.

Voltnutting equipment. Top: two LTZ1000ACH, Mid: an early prototype of ADRmu, Bottom: Sticker, 3D-printed caps for the LTZ1000ACH (preventing air streams) and a book from Fluke “Calibration: Philosophy in Practice”, 2nd Edition. Thanks to Reps Precision Group (RPG) for design and dissemination of future ppms.

Ordering precision electronic parts isn’t a straight-forward process. In most cases, one has to check multiple online shops in order to find the suitable components. Some parts are really expensive while others are very difficult to obtain. Last time I checked the LTZ1000ACH prices at Mouser Electronics (September 2023), its was around $93 per piece (excluding VAT). The price used to be around $65 per piece before 2020. Speaking of 2020: who doesn’t remember the electronics components shortage which resulted in LTZ1000 lead times up to 52 weeks (Mouser, DigiKey, Farnell, …)? This was a real thing just about half a year ago. Meanwhile, the stocks have been replenished. However, the prices have risen significantly (+30%) compared to pre COVID-19 times. Buying precision electronic parts off second hand market (eBay, craigslist) can be a winner but I would consider this as a gamble . Depending on your source, there is always a risk of buying counterfeit, defective parts or parts with a poor performance. Precision resistors, which are needed according to the Linear Technology’s reference design, are also very expensive ($25..30 per piece, 4 needed) and difficult to obtain. Another difficult to obtain components are the low thermal EMF binding posts (~ $25 per set). I participated in an EEVblog group buy which took about 2 months from placing the order until receiving the binding posts (Thanks to branadic! This was entirely done voluntary by him and free of extra charges). Just be aware of those time and money sinks.

Low thermal EMF binding posts. Thanks to branadic at EEVblog for taking care of the group order from Asia.

Building an ovenized Zener voltage reference ought to be a long-term project of mine. I don’t want to rush things and plan to accumulate the necessary components over time, perhaps during a timeframe of 2 to 3 years. I already have two LTZ1000ACH waiting in my desk but everything else is missing. I need to order the precision resistors, the PCBs, the enclosures, transformer cores and I have to find some time for assembly.

Precision parts have arrived – what’s next?

Once you have obtained the essential parts, you’re ready to do the assembly. But hold on for a second – you have to know what you’re doing and you have to do it very carefully. For example, if you apply too much heat when soldering your precision resistors or LTZ1000 to the PCB, it can result in a disaster. Overheating a precision resistor can either damage it and render the specifications void or introduce an unwanted hysteresis, which makes it either susceptible to temperature changes or drift over time. Those drifts directly influence the stability of the future voltage reference and greatly reduce its performance. Assembly is crucial and early-made errors are punished much later in the future. And don’t forget the obligatory bottle cap in order to prevent air streams. Be careful when handling precision electronics parts: always wear gloves to prevent contamination with grease/dirt and also take ESD precautions. Try to use quality parts over “Chinesium”.


In order to kick-start the project, I was fortunate to grab one ADR1000-based ADRmu for myself, which Marco built and tempco-tuned by himself. I needed a point where I would be able to get started with DCV metrology and to accumulate few thousand hours of operation time. One of the ADRmu’s design goals was to be compatible with LTZ1000(ACH) and ADR1000. ADRmu has protection circuits, a gain stage to shift the voltage from typically 7.2 V to a value close to 10 V and an eXtReMe isolation transformer for common-mode suppression. It’s possible to fine-tune the gain stage with discrete resistors in order to get the voltage output close to 10 V (if necessary). Very interesting features of Marco’s design is the possibility of use of resistor networks with an option for using discrete precision resistors. Resistor networks consist of thin film resistors manufactured in one process, which are thermally coupled through their substrate and hermetically sealed inside of their package. A resistor network has a very stable resistance ratio (e. g. 13 kΩ/1 Ωk) which is crucial for the LTZ1000(ACH) stability. That’s an advantage compared to discrete resistors (e. g. 13 kΩ and 1 kΩ) which have their own TC and drifting characteristics and therefore contribute to the performance of the LTZ1000(ACH) circuit.

Innards of ADRmu, Marco’s voltage reference design.

Once it’s built – the adventure starts

Once you have built your voltage reference, it’s time for the first measurement. Depending on the voltage reference, this measurement should be done with a high accuracy DMM under stable environmental conditions with proper leads. Typically it can be done with a 6.5 digit DMM (HP 34401A, Keithley 2000) or even better ones, such as 7.5 digit (Keysight 34470A, Keithley 2001) or maybe 8.5 digit class DMM (e. g. Keysight 3458A, Keithley 2002, Datron 1281 etc.). During the first several months or maybe during the first year of operation, the voltage reference will show some kind of measurable drift. The magnitude of this drift will be in the range of few ppm (2…5 ppm/year maybe, just to name some numbers).

Voltnutting equipment shown at Maker Faire Hannover 2022: Keithley 2400 SourceMeter (top), HP 3458A (middle), Fluke 5700A (bottom). HP 3458A is running in 7.5 digit mode (d’oh!).

This is a well-known property of solid state voltage references. Initially they drift few ppm over time but settle after many hundreds or thousands of hours of operation. It’s called “aging” and the reasons for aging processes are hidden behind the “semiconductor physics curtains” (changes in mechanical stresses acting on the semiconductor, outgassing and diffusion processes, electrical changes in the circuit elements). Also power-cycling a voltage reference can lead to so-called hysteresis due to thermal shocks which are experienced during powering on/off the oven (having a ΔT of 40-60 °C in a precision semiconductor circuit isn’t very healthy). So the goal is to keep the voltage reference powered on permanently, at least for months or perhaps years. Voltnuts are serious about this issue and rely on uninterruptible power sources (UPS). Good and stable voltage references change in the order of <0.3 ppm per month – not every voltage reference will reach this kind of performance “out of the box”. It is possible to select best-performing Zeners from a production sample. However, it’s an expensive gamble if you plan to select maybe two or three “good ones” out of 20.

In order to get reliable and somewhat predictable results, every voltage reference needs to be characterized in terms of stability, low-frequency noise and temperature coefficient. A voltage reference with an unpredictable drift is basically worthless because it doesn’t meet the stability criteria and therefore doesn’t qualify as a reference or standard. Currently I’m not able to do the noise and TC characterization yet because of lack of a ultra low-noise amplifier and a climate chamber. That’s another rabbit hole which has to be skipped yet 😉

How do you measure the stability of a world class DC voltage reference?

A high-accuracy DMM such as Keysight 3458A has built in a LTZ1000(ACH) as a voltage reference for its ADC. What happens if we measure another LTZ1000 with this kind of meter? We are basically comparing two similar voltage references to each other. Now let’s suppose the DMM’s internal DC volts reference shifts for 1 ppm. As a consequence, the indicator on the DMM’s display would show a voltage shift of 1 ppm. But in reality, we wouldn’t know if our instrument’s internal DC volts reference or our Device Under Test (DUT) shifted! The only way to know which one changed (DUT or DMM) is by comparison between a larger number of voltage references (e. g. 2, 3 or 4). One possibility would be to use two Keysight 3458A to measure one voltage reference. This way it would be possible to identify whether one of the DMMs or the DUT shifted. Since a 8.5 digit DMM is a very expensive piece of equipment, it’s much cheaper to build few more DC volts references and compare them to each other within a group of references.

So the answer to the question would be: one rather compares the voltage differences between multiple voltage references and observes the long-term stability between them. This is usually done with a calibrated high-accuracy DMM or (if you’re a vintage kind of a guy) so-called Null Detector. This way we are gaining confidence in the stability of the DC voltage reference and simultaneously we’re building a calibration history of each unit.

CERN’s HPM7177

I do own a HP 34401A (6.5 digit DMM) which is good enough for 99% of measurements but not good enough for voltnutting or DC volts metrology stuff. 6.5 digit metrology isn’t something I really look forward to do (like some guys over at EEVblog). In order to monitor the stability of my voltage reference(s), I’ll need a 8.5 digit class meter. Since the market for HP 3458A is currently overheated and buying such an expensive device is associated with potential risks (bad or drifty U180 ADC), there might be a possible alternative within a hobbyist’s budget.

HPM7177 sitting there and gaining ppm dust. It’s a beautiful design and very well crafted by A Random German Guy (ifyouknowwhatimean).

Few years ago, CERN TE-EPC group’s member Nikolai Beev has proposed a design of a metrology-grade ADC called HPM7177 which has been published as an Open Hardware project in the meanwhile. HPM7177 is based on Analog Devices’ AD7177-2 Sigma-Delta ADC, Linear Technology’s (now Analog Devices) LTZ1000ACH ultra precision reference and Vishay’s PRND Thin Film Resistors. It’s a single channel ADC card with a native sampling frequency of 10k SPS with  a maximum bandwidth of 5 kHz. An effective resolution of 23 bit for a bandwidth below 10 Hz can be obtained. The measuring range is ±10 V with a 30% over-range. A really nice feature are the thermo-electric coolers for temperature stabilization of the temperature sensitive parts.

Two HPM7177 units have been built by Marco. He documented the assembly in one of his YouTube videos. I “inherited” this HPM7177 from That Random German Guy 😉 some time ago. However, I wasn’t able to use it due to lack of time, projects and most importantly: I wasn’t able to do a proper calibration of this metrology-grade ADC. Meanwhile it’s been powered up since March 2023 and a calibration and characterization has been performed in May 2023.

One small downside of HPM7177 is its inconvenient operation: the incoming data is encoded as a 32-bit integer, which it needs to be read out via USB at a fixed sample rate of 10 kHz and post-processed after data acquisition. Recording all samples generates a huge amount of data in the order of 100-250 kB/s. This is no problem for a modern-day computer and Python, however, long-term measurements may generate lots of gigabytes of data very easily. At a certain point it’s becoming highly impractical to save raw data in a human-readable CSV file so one has to consider using different formats such as NASA’s HDF5.


HPM7177 has been powered since early 2023. Let’s hope the internal references did not drift too much. Next calibration in 1-2 years will tell.

Alright, this is already too much text I’ve written as an introduction to my voltnutting ambitions. I’ll write another (shorter) blog post how I did the calibration of HPM7177 and share some measurement results. There will also be some integral nonlinearity (INL) measurement results here which I was able to perform with suitable instruments.

Cycling around Denmark’s Jutland Peninsula

“It’s summer. Holidays. What are you going to do with your free time?” The answer to this question was quite easy: cycling! I’m still pursuing my long-term goal to cycle the North Sea cycle route R1, which is basically a 7000 km long route around the North Sea. I’ve already covered most parts of the German leg (Ostfriesland and Nordfriesland) in the years 2018 and 2019 but as we all know, COVID-19 happened in early 2020 and all travelling plans had to be cancelled and postponed.

Four years later, it was about time to continue the journey. My plan was to cycle Denmark by bike and tent. I’ve never been to Denmark before and I had no idea what to expect there. The concept of Nature Camping Sites and Shelters was very intriguing and I wanted to give it a try. Prepared a route with OpenCycleMap, packed my stuff and off I went to the island of Sylt where I ended my last bike tour in the summer of 2019.

Getting to Sylt by train…

Travelling to Sylt by train on weekend wasn’t the best idea. The route from Hamburg to Sylt was overwhelmed by tourists. The trains were mostly full, delayed and there was little to none space for cyclists. I had to skip a change in Elmshorn just because the train was hopelessly full and people were travelling like canned fish. After arriving in Sylt on the late afternoon, I had to discard my plans for the first day. I tried to find a camping site near the city of Kampen. I entered a camping site in Wenningstedt, set up my tent and after half an hour or so, I was approached by the security guy. He told me that the camping site was “full” and that I had to leave. So basically I was thrown out because I arrived too late and didn’t book my stay. I’ve never experienced this before, packed my stuff and left speechless. Since wild/stealth camping in Sylt is illegal and there is always a beach police, I was forced to sleep on a bench. This unintended situation gave me a huge pain in my back so I had to use painkillers for the next couple of days. I really disliked Sylt (even back in 2019) and just wanted to leave as quickly as possible. I won’t visit this island anymore. It’s just overcrowded, expensive (FCK KURTAXE) and you get treated like an animal. No thanks.

How to avoid Sylt’s “Kurtaxe”: just get kicked out of the camping site and sleep on a bench like a homeless person.

However, the next morning (Day 1), I cycled to the so-called Ellenbogen (“Sylt elbow”) and visited the List lighthouses and the northernmost location of Germany. The sunrise was really beautiful and rewarding. I cycled back to the List harbor and took the ferry to Havneby (Rømø, Denmark) at around 08:30. After leaving the island Rømø at around 10 o’clock, I started cycling the Route R1 on Jutland.

Welcome to the northernmost location of Germany!

Week 1 – West Coast Route R1 from Sylt/Rømø to Skagen

This route was (officially) about 550 km long and it took me 7 days from Havneby to the northernmost location in Denmark. The west coast route was beautiful. Besides beautiful landscapes (dunes, forests, fjords, bays, sea) and mostly good to excellent cycling weather, the cycling roads were in a very good condition and also varying in quality: asphalt roads, gravel, sand/beach, forest paths, hills. I had little to no trouble with winds because the cycling routes were guarded by wind-stopping forests, dunes or dikes. 50% of the cycling time I had a weak wind, 25% back wind and 25% head wind. Day 3 was very rainy, the rain lasted for several hours but was gone in the afternoon. The route signs on the route were mostly visible, at some points they were either hidden, missing or inconclusive. This resulted in many extra kilometers because I lost track of the route. In the end, I cycled around 620 km.

Camping sites were in a good to very good condition although a bit expensive in the range from 160 to 230 DKK per night which corresponds to 23 to 32 EUR per night. It’s a bit much for cyclists with a tent if you compare it to Germany (price range from 12 EUR to 20 EUR per night). However, the shelters were free of charge so spending every second or third day on a camping site in order to get a shower and to charge up batteries was sufficient. Unfortunately, someone stole my fast charger and power bank during my stay in Ribe on Day 1. Luckily I carried a backup power bank and a charger – albeit much slower to charge – so I had to turn on the flight mode and save energy for the rest of the tour.

I met many other cyclists on route and it was an amazing experience. Everybody was friendly and supportive and we shared our cycling plans and stories. Two of those amazing cyclists were Tim from UK and Justin from Switzerland. We met on Day 3 (the rainy day) like two times on the road and later in the evening (by coincidence) in a shelter. We talked about our routes and  we jokingly agreed “Our next shelter will be at X, so if you join us, it would be great to have you with us!”. The shelters were 80-100 km apart so it was quite a challenge to get there. So I cycled the next couple of days for 8 hours daily and I was able to meet them at the shelters we agreed upon. As I showed up, they couldn’t believe that I made it! Tim was very excited and sponsored me a beer on each evening. Unforgettable! We parted our ways after Day 6. Tim went on his tour to Norway and Justin continued his journey in Sweden.

Cycling from Hirtshals to Skagen was really amazing. I had about 3 hours of back wind, very good weather and great views. I took some pictures of the area although I didn’t take a walk to the Northern Beach. There were too many tourists present and I was afraid leaving my bike unattended. I noticed a high number of Tesla Electric Cars there but one car really blew my mind: I spotted a DMC DeLorean there (the car from the movie Back To The Future) which really blew my mind.

Week 2 – East Coast Route R1/R5 from Skagen to Kruså/Flensburg

After reaching Skagen and the northernmost point of Denmark, I had to cycle back to Germany – a distance of approx. 620 km. Day 8 (Hulsig – Dokkedal) was a very good cycling day (111 km) with lots of interesting encounters. The following days (Day 9 and 10) were really difficult weather-wise. A bad weather zone called Hans was raging over Scandinavian countries and brought a lot of rain. The situation in Sweden and Norway was very dangerous because some local rainfalls were extreme and flushed away streets and railways. Day 9 (Dokkedal – Fjellerup) was raining the whole day. I was wet both inside and out. This was no problem because I had exchange clothes which stayed dry during the ride. Staying warm and dry during the night is much more important than during the daytime. On Day 10, the rain went away but there were strong winds at 60 km/h in combination with hills. This combination of winds and hills was very tiring and I wasn’t able to cycle large distances (55 to 65 km per day at best). Hans was almost gone on Day 11 (Balle – Aarhus) but I had to fight the terrain: hills after hills. While the West Coast Route was mostly flat and hills were an exception, the East Coast Route was dominated by hills. The hills weren’t very large (maybe 10 to 30 meters) but very frequent. I had to push my bike frequently because of my overweight and because I was carrying too much baggage with me. Nevertheless, I was able to achieve daily distances of somewhat 70 to 90 km per day which were inside of my comfort zone.

The landscape along the east coast route was dominated by cities with harbors, bays, smaller villages and agriculture. On sunny days, the landscapes were beautiful and very varied. The hills were quite a challenge which were a very nice addition to the overall cycling experience. During the last day of cycling from Fredericia to Kruså (Day 14), I was able to cycle another 109 km although the weather got really bad in the afternoon. I visited a camping site in Kruså which was about 10 km away from my destination: Flensburg.

The next day, I cycled across the Danish/German border to Flensburg, bought myself a Flensburger Pilsner beer and celebrated a successful bike tour. The travel back from Flensburg to Braunschweig by train took me another 7.5 hours.


The green marking highlights the (approximate) cycling route. I’ve cycled around 1250 km in 14 days.

I really enjoyed this adventure. My arrival day from Braunschweig to Sylt wasn’t going as planned. I had to sleep on a bench because I was thrown out from a camping site. My charger/power bank was stolen. My back/ass hurt all the time. I got lost many times and had to ride extra kilometers. I had to push my cycle and walk uphill many times… Nevertheless, a 40 year old guy weighing 120 kg (240 lbs) doing a 14 day cycling tour in a foreign country worked out pretty well! I’ve visited beautiful and interesting places and cities (Esbjerg, Hvide Sande, Hanstholm, Blokhus, Hirtshals, Skagen, Fredrikshavn, Fjellerup, Grenå, Aarhus, Juelsminde, Fredericia, Kolding, Hadersleben, Aabenraa), yet I haven’t seen them all. The holidays in Denmark were quite affordable (~500 EUR for 14 days including food and camping and 2 extra days of arrival and departure). I plan to return to Denmark maybe next year and cycle the remaining part from Fredericia via Odense to Kopenhagen.

Total kilometers cycled
Total time cycled
Average speed
Average cycling duration per day (hh:mm:ss)
1244.96 98:15:26 12.646 6:33:02
Some statistics taken from the distance logger.


Reviving an Old Temperature/Humidity Data Logger: Lufft Opus 10


Changes of temperature may affect measurement instruments in a negative way: thermal noise, drift of operating points, thermoelectric effect etc.. Every device has a so-called temperature coefficient (short: tempco or TC) which states how the system behaves when subjected to temperature change. Tempcos have to be taken into account when designing an electrical circuit (e. g. a voltage reference or an oscillator) or running an instrument outside of defined environmental conditions. Humidity usually affects the buildup of electrostatic charge, growth of biological organisms (e. g. mold), it may accelerate corrosion of metals and may lead to changes of electrical properties of capacitors and mechanical properties of some materials such as wood or epoxy due to surface absorption of water molecules. Therefore the environmental conditions have a significant influence on any kind of measurements and therefore need to be monitored and controlled. Since the “controlling” part (a.k.a. air conditioning) can be very difficult and expensive for a hobbyist nowadays, I was interested into the “monitoring” part.

Monitoring temperature and humidity during measurements can be of great help as soon as one has to analyze and interpret long-term measurement data. Usually the crucial question is: “Can this unwanted drift of my Device Under Test be attributed to the change of environmental conditions?”. If the answer to this question is “yes”, one can decide to take appropriate measures to deal with changing environmental conditions.

Monitoring temperature and humidity can be done very easily. Everything one needs is a sheet of paper, a pen, a clock, a thermometer and a hygrometer. Writing down time, temperature and relative humidity is the simplest method of monitoring the environmental conditions. But what happens if you have to run a measurement over a span of few days or weeks? You certainly would have to deal with missing data or data gaps. This is where a temperature and relative humidity (TH) data logger comes in place as a very useful piece of test equipment. A TH data logger is basically a small computer with storage memory (e. g. SD card), a clock and temperature/humidity sensors. Modern devices have more capabilities such as WiFi connection, graphical displays, multi-sensor logging, database connection and much more. A data logger is used to monitor environmental conditions 24/7 in a laboratory or any room of a building (bathroom, basement, radio shack, storage room, …).

Computers, memory and temperature/humidity sensors have been become very affordable in recent years and can be easily turned into loggers. This can be done with inexpensive Arduino based microcontrollers or Raspberry Pi single-board computers.

Buying stuff – the devil is in the details

Me being lazy, I didn’t want to spend much time on the development of temperature loggers. I am certain that there are few interesting projects on GitHub out there which I’ll check out soon(tm). After a few weeks of searching, I found two commercial dataloggers on Kleinanzeigen (German analogy of Craigslist) in the 60-90 EUR range which is not bad at all. One of those data loggers I acquired was the Lufft Opus 10. I’ve heard of the German company Lufft before – they are a reputable company in the fields of climate and environmental measurement equipment. Opus 10 is a TH logger with a LCD display and an USB interface for readout/control of the device. It was manufactured by Lufft in the mid 2000’s and I bought a second hand unit still in a working condition – albeit the battery was already drained up and needed to be replaced soon and it will probably need a calibration.

Lufft Opus 10 Temperature/Humidity Data Logger

As soon as I got the TH logger, I started looking online for drivers, software and documentation. I realized that this particular product was discontinued by Lufft probably 10 years ago and there was no real support for this product. Thanks to Google search and I was able to find the manuals, datasheets and the Lufft SmartGraph logger software.

Wayback Machine from This website saved my day many times. Please consider donating 😉

Lufft Opus 10 teardown and battery replacement

I’ve made some photographs of the inside. Opus 10 is measuring the temperature probably with a NTC resistor (blue blob) and the relative humidity with a capacitance sensor. Besides that, I couldn’t find anything unusual. FT232BL can be seen clearly, along with two EEPROM ICs. Off-the-shelf-components from the mid 2000 era were used, I haven’t seen any special circuits or ASICs.

Description of the problem

After plugging in the USB device in my PC, the device couldn’t be found and drivers had to be installed manually. Unfortunately the SmartGraph software did not contain any Opus 10 drivers so no communication could be established between the data logger and PC. I thought maybe the previous versions of SmartGraph may have the drivers included so I started downloading versions dating back to the Windows 95 era. No luck at all. No drivers could be found. Since I didn’t have the original installation CD-ROM (or diskette), I could not establish a connection to my PC. It was a bit disappointing but not bad – the device would act as a TH display for the next couple of months which was good enough for my “pen-and-paper-logging” approach.

An unknown device “DATALOGGER” shows up soon after connecting the device to the PC.

Fast forward 4 months and the battery finally died. Luckily, the seller sent me replacement batteries which were rather special type 14500 batteries (Li-SOCl2, 3.6 V) – not the standard AA  1.5 V. Battery replacement was a piece of cake, no problem at all. But as soon as the unit woke up, it was asking for a “SET CLOCK” procedure. After checking the manual, I soon realized that I had a problem: after battery replacement, the internal data logger clock needs to be synchronized with the SmartGraph software. The following three days were an unique PTSD experience in combination with nightmares. Being a bit pissed off that I probably just bricked the unit by simply replacing the battery, I just thought “Fine, I’m going down this rabbit hole – should have done it four months ago” and try to fix this damn thing.

After changing the battery, the Opus 10 unit asks for clock sync. This can only be accomplished via SmartGraph software, otherwise the data logger is rendered unusable.

I don’t want to write down every step and every Trial & Error in detail. I’ll try to give the reader of this blog entry an installation procedure in a short manner so everyone using this kind of Lufft Opus Series can install the drivers and establish a connection with the PC.

Fixing the brick

During the teardown I noticed that the communication between the data logger and PC is performed via a FTDI FT232BL integrated circuit. It’s basically a USB to serial UART interface with many features, e. g. the capability to store “USB Vendor ID (VID) and Product ID (PID), Serial Number and Product Description strings in external EEPROM”. During the late 1990’s and early 2000’s, the communication of similar Opus models was usually performed via a 9-pin serial interface (also called COM-port or RS232). They must have upgraded their legacy peripherals from RS232 to USB in the early/mid 2000’s. There are probably two EEPROMs on the lower PCB: Atmel812 93C56A for sensor data and DS 2430 for USB VID/PID. I couldn’t find any microcontroller on board, since the data from the sensors need to be converted in physical units and communicated to the display. Perhaps it’s hidden under the LCD display.

Now knowing that a FT232BL integrated circuit is used inside of Opus 10 is an important bit of information because one can pin down the correct drivers provided by the manufacturer Future Technology Devices International Ltd (FTDI). Just a quick sidenote: FTDI has been confronted by plagiarism ICs in the past where their chips were copied by different Eastern Asian companies. Using a plagiarized IC with their driver can be seen as breaking the user’s license. There may be a scenario where FTDI drivers can brick a plagiarized device due to “reasons”. I haven’t observed it yet, just heard of the possibility where the drivers renders the fake IC unusable or at least it blocks its operation – so be careful and make sure you’re using the original (expensive) FTDI IC!

Installing Windows XP on IBM ThinkCentre PC in 2023. Yeah, I haven’t thought I would do it ever again but somehow it worked perfectly fine. I was lucky and kept my old software all the years!

As a side project, I digged up my old IBM ThinkCentre PC from the 2004 era and installed Windows XP on it. Sometimes it’s nice to have one old PC for testing 20 year old hardware and software. After plugging in the Opus 10 into the PC, I get an unknown device called “DATALOGGER”. I wondered why the device was called that way and where did it get its name from instead of generic name such as “USB Serial Port (COM3)”. After two days of research and trying different things out, I’ve stumbled upon the FTDI Technical Note TN_100: USB Vendor ID / Product ID Guidelines. Basically FTDI ships their ICs with default VID and PID which can be customized by anyone who’s using them in their electronic designs. So basically there is a small EEPROM chip where the “DATALOGGER” name string and the custom PID are stored. Every time the USB device is plugged in, it sends those identification strings to the PC. The PC needs to find proper  USB drivers which match the VID/PID. I’ve looked into the hardware description of Opus 10 and got the VID Number 0403 and PID string “D6B8\12345678”. So they customized the PID and identification strings which was a problem for the operating system. The table below helped me to identify the VID/PID associated with the FT232BL so I started looking inside of the driver INI-files for this kind of information. I’ve quickly found the 0x0403 and 0x6001 IDs and I was hoping that renaming the default PIDs into the Lufft customized ones would help the operating system with driver identification. So that’s basically what fixed the problem. I edited bunch of INI-files and after plugging in the data logger, it was recognized immediately and I was able to install the proper FTDI drivers. The FTDI Application Note AN_107: Advanced Driver Options has a bunch of additional information how to customize their driver settings.

Excerpt from Table 3.1 from FTDI’s TN 100.

This workaround should also work on modern PCs running Windows 7 or Windows 10.

Step-by-step procedure

(Unfortunately) I am using a German version of Windows XP. However, it should be possible to get the idea of what needs to be done. After plugging in Opus 10, check the Device Manager for the newly discovered DATALOGGER. Check its properties and look for the “Hardware Detections”. There should be somewhere the VID and PID of the device. Write down the VID/PID and download the FTDI drivers for your operating system.

The Opus 10 VID/PID can be seen in the DATALOGGER properties.

I’ve been testing many versions of the FTDI drivers but it seems there is no significant difference between them. Just get one which works on your system (WinXP x32 in my case). I’ve downloaded CDM 2.08.24 drivers from the FTDI website. Unzip the drivers and you should get a similar file and folder structure as shown here.

The last FTDI driver version which supports WinXP 32bit: CDM 2.08.24.

Next step demands the editing of ftdibus.ini and ftdiport.ini files. Just use a simple text editor. Search inside of the INI files for the PID number 6001. There should be in total 3 lines where PID_6001 appears. Replace the PID number 6001 with the newly found Opus 10 PID (e. g. D6B8).

Notice: Maybe it would be better to make a copy of the line to be edited and edit leave the PID_6001 line untouched just in case you plan to connect a FT232 based IC without custom Product ID! I haven’t tested it yet but it seems like a better approach.

ftdibus.ini and ftdiport.ini need to be edited as shown in this picture.

After modifying and saving the INI files, one can proceed with the DATALOGGER driver installation. Use the Device Manager and start the driver update. The driver installation wizard should be pointed to the directory with the modified INI files.

Both INI-files need to be modified in order to be able to install FTDI drivers for the Opus 10 device called “DATALOGGER”.

Since we’ve modified the drivers, the WHQL certification fails. This can be safely ignored. After two subsequent driver installations, the devices should appear as “USB Serial Port (COM3)” and “USB Serial Converter”.

Screenshots after successful FTDI driver installation.

No further changes are needed, the COM3 settings seem to be typical at 9600 baud, 8 data bits, no parity bit, 1 stop bit (a.k.a. 9600 8N1).

Default settings after FTDI driver installation: 9600, 8N1.

The last step demands the installation of the Lufft SmartGraph software. I’ve used version 3.0 from the year 2005. A newer, modern version v3.4.5 should work, too. The data logger should be visible as a new COMx device. With SmartGraph you can change settings of the data logger such as logging intervals, min/max alerts, physical units etc. Getting familiar with SmartGraph takes a bit of time so I leave this as an exercise to the reader 😉


I consider myself “lucky” because in hindsight, this fix was easy – but it was nowhere documented on the internet. The trial & error approach cost me about 2-3 days of fiddling but it was successful in the end. The other option would have been grim: the data logger would be rendered unusable unless doing further reverse engineering. This is so unacceptable! Reverse engineering wasn’t clearly my goal on a 20 year old device – otherwise I would have invested my time in DHT11/22 and Raspberry Pi programming. There was a discussion on a German Windows 10 forum dated back in the years 2018/2021 concerning Lufft Opus 10 driver installation problems but their posts didn’t provide any useful information except “tried this driver and it worked!”. One of the users apparently fixed the problem by using a Prolific driver which I have also tried out – without any success. I’ve even contacted Lufft’s Support on this matter and they kindly provided me some information and further hints what could be done.

For my part, I’ve learned again: The Internet DOES forget. Thanks to it was possible to browse old websites and get documents and files which I needed. It’s very important to download drivers and documentation and host them on independent sites. Otherwise it will become even more difficult in the years to come to have access to information of already discontinued products.

I’m hoping that this information will be useful to other amateur radio operators because there are some similar problem descriptions concerning the usage of programmable transceivers. Those transceivers also use a USB/RS232 IC which demand certain FTDI drivers and perhaps it’s possible to revive them with a simple modification of the INI files.

73, Denis

Trying out Mastodon at

The German Amateur Radio Club (DARC) has just recently set up their own Mastodon-based social network server. It’s basically a social network similar to Twitter with a decentralized server structure. I think I’ll try it out for the next couple of weeks and share bits and pieces of daily adventures which may not fit in a classic blog format. Currently there are 114 registered entities at DARC and perhaps more people and amateur radio districts will join.

I must admit that I strongly dislike the anti-social part of social networking which extends in the fields of politics, religion, manipulation, opinions, viral social debates and trolling. One word: internet toxicity. I like fun and memes. Let’s hope the toots stay technical and hobby-related 🙂

You can read my toots (this is how they call tweets in Mastodon) here:

If you’re member of the DARC, you can set up a Mastodon account with your existing login information at

Currently I’m preparing my equipment for the next SAQ broadcast on Sunday, July 2nd 2023. There will be two transmissions: first transmission at 11:00 and second at 14:00 o’clock (CEST).

Preparing for the SAQ transmission. Some items from the junk bin.

Have a wonderful day!

73, DH7DN

Observing the Night Sky During an Airplane Flight

During a flight back home from a recent business trip, I was lucky to get a window seat. I was thinking of the possibility to see some stars of the night sky above the clouds and I wasn’t disappointed. The flight was held entirely during night time with cabin lights turned off. This was crucial because cabin lights are an additional light source which make unwanted reflections visible. The reflections usually overcast faint light sources such as stars. I took some photographs with my smartphone Samsung Galaxy S22 at exposure duration of 20-30 seconds and ISO 3200. The exact location of the photograph is unknown, it must have been somewhere in a part of south-eastern Algeria over the Sahara desert while looking to the east. I would estimate the position as follows: 23° North, 8° East, flight attitude 11 km (36 000 ft).

Result of a shaky picture during long exposure duration (20 – 30 seconds). The stars appear “smeared”

I made about a dozen pictures of the night sky but due to minor turbulence and slight flight course corrections, most of the images were shaky and had to be discarded. However, I was able to get 1-2 pretty decent pictures of the night sky which turned out to be OK. I was pressing my smartphone against the window to avoid shaking motion and put a pillow over it to block most of the residual (emergency) cabin lights.

Beautiful night sky picture taken with a smartphone from an airplane window. 20 second exposure at ISO 3200

The taken pictures show some prominent stars from the constellations Cygnus and Lyra: Vega, Deneb, Albireo and others. I was able to identify some stars by using an web-based star map application such as Stellarium Web. During the flight I could observe meteor flashes occasionally (no picture taken though) and lightning of distant thunderstorms, which were perhaps >200 km away. There were virtually no city lights visible during the flight over Sahara desert. Just imagine being there and watching the night sky without any light pollution

Identified stars from the constellations Cygnus and Lyra
Stellarium Web

The 8-hour-flight was very tiring because of lack of space to move and stretch. Sitting for hours in an uncomfortable position wasn’t very pleasant but it worked out somehiw. However, I was able to catch some nice pictures of the world 11 km below my feet. #worthit

Voltnuts will hate this: Improve your DMM Resolution With One Simple Trick…

Measuring voltages accurately is a basic task for technicians, engineers and scientists. The voltages to be measured range from perhaps few picovolts to several megavolts – a dynamic range of 18 orders of magnitude! But every modern digital multimeter is kinda limited in resolution. The multimeter’s resolution can be stated in the number of digits it can resolve. A 6 digit multimeter can resolve six decimal places going from 0 to 9. In a decimal number system, this corresponds to \(10^6\) numbers or 1 million digitizing steps. Without going much into detail and exposing my limited knowledge on this matter, I’ll just link to Keysight’s Website where everything is well explained.

Older multimeter models such as the shown MeraTronik V543 can resolve only \(2 \cdot 10^4\) numbers in the selected measurement range (e. g. ±1 V = 2 V full scale:  \(2~V/2 \cdot 10^4 \rightarrow 100~µV\) resolution).

MeraTronik Type V543 (PRL T-189), 4.5 digit multimeter with Nixie tube display

One of the best and most accurate digital multimeters in present time – the HP 3458A – has “only” a resolution of 8.5 digits, which hasn’t improved for about 35 years.

HP/Agilent/Keysight 3458A 8.5 digit multimeter

The so-called “Voltnuts” (crazy electro-fanatics) buy those HP multimeters on a second hand market for $3k to $7k. This surely is crazy and overpriced and in my opinion just not worth it. How about buying a couple of cheaper 6.5 digit multimeters (e. g. HP 34401A for about $200 to $400) and combining them in a serial configuration? I’ve achieved a total of 19.5 digit resolution this way*. I was able to display 10 volts up to 18 decimal places, e. g. attovolts resolution and saved a lot of money.

Two HP/Agilent/Keysight 34401A 6.5 digit multimeters in an unusual configuration showing exactly 10 Volts on April 1st…

*If you don’t believe this nonsense, it’s fine. I can live with that. It’s April Fools’ day anyway 😉

Tauntek LogICTester – A TTL IC Tester


About a year ago I saw one of CuriousMarc’s YouTube videos on repairing a Xerox Alto computer. CuriousMarc published shortly afterwards an episode, which compared the Tauntek LogICTester with the TL866II+ EEPROM programmer which has some transistor-transistor logic (TTL) testing capabilities. 1970’s and 1980’s era test equipment used alot of those intergrated circuits (IC) in order to operate. Servicing or repair of older test equipment like oscilloscopes, multifunction calibrators, power supplies etc. will be much easier with tools such as a logic tester. After reading a very positive review from a friend at the Wellenkino, I thought it would be very nice to own such a tester for servicing or repairing my (broken) equipment.

Tauntek LogIC Tester

I contacted Bob Grieb of Tauntek and ordered one of his kits back in March 2022. The $35 kit contained the printed circuit board and two pre-programmed PIC microcontrollers. The shipment to Germany cost me about $19 with additional 10 EUR for customs and fees. The total cost for the kit ans shipment was in the order of $64 or approx. 60 EUR. The shipment from USA to Germany took about week and a half.

Shipment received from Bob Grieb of Tauntek.

After receiving Bob’s package, the project got delayed because I’m always kinda busy. I ordered most of the remaining parts via Mouser in December 2022. The ordered parts would cost additional 69 EUR. Many of the components on the bill of materials (BOM) list could have been easily skipped (e. g. resistors and 2x PIC microcontrollers, RS232 level shifter) resulting in 45…48 EUR price range. Nevertheless, I ordered few extra parts just to be sure if anything fails. Extra parts can be always used for different projects or experimenting with other circuits.

Two of needed parts on the BOM weren’t available at the time: the 74HC138 3-to-8 line decoder and LM358AN dual opamp. According to Mouser, the lead times for the decoder were four weeks and for the opamp approx. 1 year (which has been reduced to May 2023 in the meanwhile). So yeah, I had to order both parts on eBay instead. Waiting a year for an opamp wasn’t acceptable. I also ordered an USB to TTL FTDI Serial Adapter on Amazon (2 pieces for 8 EUR) so I could use the Tauntek LogICTester via USB instead of RS232. Everything arrived last week so I had to find few “quiet hours” for the soldering job.

Building the IC Tester

One starts with the printed circuit board and two PIC microcontrollers (U1 as Master and U2 as Slave) as shown in the picture below.

The unboxed Tauntek LogICTester.

I started populating the resistors and diodes in the first place. After soldering and cutting excess wires, I moved on to capacitors.

Starting the population with passive components is always a good idea….
Population continues, only few more parts…
Chaos unfolds when doing a soldering project…

After hours and hours, I finally got it finished. The pins in the top right corner needed to be removed. Also JP1 and JP2 (top right above the IC socket) were shorted by a solder blob in order to use the FTDI to USB adapter instead of the RS232 level shifter. The level shifter 16 pin socket on the top right remains unpopulated. The final assembly can be seen in the picture below.


After assembly I checked for cold joints or shorts. Everything looked fine and I turned it on.

Tauntek LogIC Tester: finally assembled and ready for IC testing.

After plugging in the USB cable of the FTDI adapter into the Windows 10 machine, the driver installation started automatically. No additional drivers were needed to be installed. The settings for communication via Serial connection were by default “8-N-1”, which corresponds to 9600 baud, 8 data bits, no parity bit, 1 stop bit and no flow control. The connection needs to be established via a terminal emulator such as PuTTY. After establishing a connecting to the tester, one has to press ENTER to get the welcome screen and voilà, We’re In Like Flynn.

The usage of the IC tester is pretty much straight-forward. Power up the tester, establish a PC connection and put the IC into the socket as shown in the picture above. Enter the IC model inside of the console.  If the IC is found inside of the database, type t and press enter to start the IC test. The results are presented in a very comprehensive way. Typing v and pressing enter displays the pin voltages.

Tauntek LogICTester menu via terminal emulator PuTTY.

That’s it – there isn’t much more to it. Very simple and effective when it comes to debugging the 1970s to 1980s era logic ICs. Few additional hints and comments:

  • Unfortunately the IC tester can not be used in order to recognize part numbers of ICs under test. The part numbers have to be looked up manually inside of the terminal emulator (or Bob’s list)
  • Bob maintains the firmware and the list of supported ICs. Perhaps by writing him an email and by sending him the missing or unsupported IC, Bob may update his firmware in the future and add support for the missing IC
  • The logic tester certainly isn’t free of bugs – some tests may result in a “FAIL” although the IC is still fine according to the datasheet specifications. Please, don’t blindly trust the machine. Take your time and try to sanity-check or interpret the results
  • The logic tester can’t check memory chips for faulty memory cells (such as Retro Chip Tester Professional from the
  • I’ve added a picture gallery to my Piwigo website if you want to check out some additional pictures

Have a nice Sunday and happy IC testing!

Having Fun with 75 Ohm Technology

If one wants to capture analog images or analog videos (e. g. images coming from a CCTV camera), those signals need to be digitized, decoded and displayed with a device called framegrabber. A framegrabber is basically a video capture card with fast video processing capabilities and onboard memory which is useful for image processing.

I wrote in my previous post how to make good quality screenshots of the Anritsu MS2661N front display. However, there is another ancient method how to acquire images of frequency spectra. In modern test equipment, the video signals are transmitted digitally via DisplayPort or HDMI. Some 20 to 40 years ago, the manufacturers offered instruments with an optional analog video output which could be connected to a television screen or to a video recorder for viewing or documentation purposes.

75 Ohm composite output can be seen on the back side of the Anritsu MS2661N spectrum analyzer

I’ve got myself a framegrabber card NI PCI-1405 for different projects. I wanted to test the card for its functionality. The quickest access to an analog video was via the composite output of my spectrum analyzer as shown in the previous picture.

NI PCI-1405 Video Framegrabber Card

The NI PCI-1405 framegrabber card has two inputs: a 75 Ohm video input and a 75 Ohm trigger. The video input is connected via a 75 Ohm cable (type RG-59) to the composite output of the spectrum analyzer.

The 75 Ohm coaxial cable (RG-59) needs to be connected to the video input of the framegrabber card

After installing the drivers from National Instruments, the framegrabber card was successfully detected and I was able to grab some frames inside of NI MAX (Measurement & Automation Explorer).

Framegrabber user interface inside of NI MAX

I didn’t bother to improve the image quality – this task will be relevant for future projects as soon as I get my Tektronix C1001 camera running 🙂  So far, it’s been a successful test!

Grabbed frame in a 640×480 resolution. The analog source signal was received in greyscale NTSC format at approx. 30 frames per second
Tektronix 2456B with attached Tektronix C1001 video camera

Anritsu MS2661N Spectrum Analyzer Readout


A spectrum analyzer (SA) is a very useful tool when it comes to measure spectra of radio frequency signals. I recently acquired a 2004 era spectrum analyzer. It’s from a Japanese test equipment manufacturer Anritsu and the model number is MS2661N. Luckily there are operating manuals available online but I wasn’t able to find service manuals for this type of spectrum analyzer on the internet. There are some service manuals available for similar models of spectrum analyzers (e. g. MS2650/MS2660) which would allow troubleshooting but I would be lost if the instrument breaks.

Anritsu MS2661N Spectrum Analyzer (100 Hz – 3 GHz). Those blue handles totally aren’t butchered from Rohde & Schwarz test equipment… Sacrilege! Don’t ask!

However, I’ve been looking for a decent SA for a longer time and stumbled upon the Anritsu MS2661N. It had a bunch of very nice and useful features: frequency range 100 Hz to 3 GHz, 30 Hz resolution and video bandwidth, oven controlled crystal oscillator (OCXO), GPIB interface, 10 MHz reference IN/OUT and a tracking generator ranging from 9 kHz to 3 GHz. I was looking for a similar SA from HP/Agilent 8590 Series or Tektronix but there were no attractive offers at the time. Either the SA frequency range was too low for modern ages (1 GHz) or outside of my measurement capabilities (26 GHz), the price was either too high or it was partially broken. There were also 75 Ohm spectrum analyzers which aren’t very useful for what I’m doing. On the other side, the documentation for HP/Tek hardware is the real deal so leaving this kind of test equipment ecosystems was a tough decision.

Long story short: I wasn’t disappointed and the SA works perfectly fine. I don’t want to write a lengthily blog about it. One of the first experiments was connecting my GPS disciplined oscillator to the signal generator and spectrum analyzer simultaneously in order to provide the same external reference for both instruments and checking if the frequency (1.5 GHz) and the amplitude  (-35 dBm) are accurate. Acquiring measurements was super easy and the operation of the SA is very straight-forward.

Agilent E4432B Signal Generator. Note that the EXT REF is on and the output signal is referenced to a 10 MHz GPS disciplined oscillator.
10 MHz reference signal distribution from a GPS Disciplined Oscillator (GPSDO).
Back side of the Anritsu MS2661N. The 10 MHz signal is fed into the REF IN.

Documentation of Measurements

I would consider the somewhat cumbersome recording of readings as a minor disadvantage of this SA. Taking a photograph of the display may be “quick and dirty” but you have to deal with bad image quality due to reflections, visible RGB pixels and picture alignment. It is possible to take screenshots in bitmap format (BMP) but one needs a special type of a Memory Card (basically a PCMCIA or PC Card) in order to save the screenshots on an external storage. That’s really unfortunate but measuring instruments of that era were either equipped by a floppy disk or Memory Carc. I was always afraid of damaging the fragile pins while pushing the PCMCIA card in its slot although it is rated for 10k mating cycles. The MS2661N type SA even has a 75 Ohm composite out – it’s possible to record video stills in the NTSC format. However, there are two elegant methods which I would like to show how to transfer the readout from the instrument to the personal computer (PC) by modern means.

A photograph taken of the frequency spectrum. The image shows LCD pixels, scratches on the surface of the front panel and reflections due to bad light conditions.

Method 1: Sending a Hard Copy from SA to a PC

Back in the days, the measurement results such as frequency spectra would be printed on a piece of paper as a part of the documentation. A device called printer or plotter was needed and the process was called “hard copy”. The difference between a printer and plotter is how the drawing is generated: while the printer generates text and images line by line, a plotter can draw vectors in a X-Y-coordinate system. HP developed its own printer control language back in 1977 for this purpose – the HP-GL or Hewlett-Packard Graphics Language. HP-GL consists of a set of commands like PU (pen up), PD (pen down), PAxx,yy (plot absoute) and PRxx,yy (plot relative) in order to control a plotter, which is basically an electro-mechanically actuated pen. The commands are transmitted in plain ASCII via GPIB or RS-232C interfaces. If we were somehow able to capture the HP-GL ASCII code, it should be possible to generate a lossless vector graphics instead of a lossy bitmap.

An example of the acquired HP-GL code in a text editor.

Hardware Requirements

Besides the already mentioned spectrum analyzer one needs either a GPIB/USB or GPIB/Ethernet adapter. I have tested it successfully with a National Instruments GPIB-ENET/100 on a Windows 10 machine with NI 488.2 v17.6 drivers. It should also work with a NI GPIB-USB-HS+ (Chinese clone) adapter.

Software Requirements

I was looking for a quick solution how to acquire hard copies. Thanks to einball on a certain Discord channel 😉 for showing me the KE5FX 7470.EXE HP-GL/2 Plotter Emulator. John Miles, KE5FX, already wrote a software back in 2001 which does emulate a HP 7470A pen plotter. The 7470.EXE is still maintained by John and supports popular spectrum analyzers from HP and Tektronix. His software is able to fetch the HP-GL ASCII via GPIB and render the hard copy image on the screen. The image may be saved in a bitmap format (BMP, TIFF, GIF) or in a vector format (PLT, HGL). I have tested John’s software with Anritsu MS2661N and it worked perfectly fine. I suppose this could work on similar Anritsu spectrum analyzer models, such as MS2661C.

Setting up the Spectrum Analyzer

Here is a brief summary how to obtain a hard copy from an Anritsu MS2661N spectrum analyzer:

  • Connect the spectrum analyzer to the GPIB adapter and boot up the device
  • Go to the Interface menu and use settings as followed → GPIB My Address: 1, Connect to Controller: NONE, Connect to Prt/Plt: GPIB, Connect to Peripheral: NONE
    The SA wants to send its data via GPIB to a plotter. It’s important to disable the “Connect to Controller” option, otherwise it won’t be possible to select GPIB as “Connect to Prt/Plt”. The GPIB address is set arbitrarily to 1
  • Go to Copy Cont menu (Page 1) → Select Plotter
  • Copy Cont menu (Page 2) → Plotter Setup → Select following options: HP-GL, Paper Size: A4 Full Size, Location: Auto, Item: AllPlotter Address: 2
    It’s important to set the “Plotter Address” value to a different number than the “GPIB My Address“. If both addresses share the same number, the hard copy will result in a timeout error

Install John’s 7470.EXE software and start the HP 7470A Emulator. There is no need to change the settings of the GPIB controller, it works out of the box. Click on GPIBPlotter addressable at 2. The selected address in 7470.EXE should be identical as the previously set Plotter Address. In order to obtain a hard copy, press the button w and the 7470.EXE should display a message like shown in the screenshot below. Once you press the Copy button on the spectrum analyzer, a data transfer progress should be visible. It takes about 10-15 seconds to transfer the data (approx 7-10 kb) from the SA to the PC. Once it’s complete, an image of the current frequency spectrum is shown on the display. That’s it.

Creating Publication-Quality Vector Images

At this point, it’s possible to save the acquired hard copy in a bitmap image format. If one needs a publication quality images – which should be free of compression artifacts – one should save the images in a vector format such as PLT/HPGL. This workflow proved to be a little bit inconvenient but it’s perfectly doable. Save the hard copy as .PLT and open the image in a HP-GL supported viewer. John suggests few of them on his website – I’ve tried CERN’s HP-GL viewer. It’s distributed free of charge and still maintained by the developers. Download their viewer and load the PLT-image. If the colors seem wrong, there is a setting where you can change the pen colors. Once done, it’s possible to export the PLT image as PostScript (PS) or Encapsulated PostScript (EPS) or print as PDF. EPS files can be embedded in LaTeX documents or can be imported in a vector graphics editor such as Inkscape.

The results turned out to be really good. Especially the vector images are crisp and sharp. One can zoom in without any image quality losses. The printouts on my laser printer are perfect. A little downside would be few breaks in the workflow: one has to use three different applications in order to obtain, convert and process the images. But it’s worth it 😉

Method 2: Readout Data via pyvisa and Plot it via Matplotlib

A different method to plot the frequency spectra would be by downloading the acquired raw data via GPIB and plot it directly. This is exactly what I’ve done. I’ll share the Python code down below. It’s possible to refine the plot by automating more stuff: one can generate annotations directly from queried instrument settings. Just put enough time in it and you’ll get superb results. The plotted image can be saved directly in a Scalable Vector Graphics (SVG) or any supported bitmap/compressed format.

Spectrum analyzer data plotted via Python’s library Matplotlib
# -*- coding: utf-8 -*-
Created on Tue Jan  3 16:45:39 2023

@author: DH7DN
import numpy as np
import pyvisa
import pandas as pd
import matplotlib.pyplot as plt

#%% Open the pyvisa Resource Manager
rm = pyvisa.ResourceManager()

#%% Create the Spectrum Analyzer object for Anritsu MS2661N at GPIB address 13
sa = rm.open_resource('GPIB0::13::INSTR')

# Print the *IDN? query

#%% Take a measurement
# Set frequency mode to CENTER-SPAN
sa.write('FRQ 0')

# Set the center frequency in Hz
cf = 1.5E9
sa.write('CF ' + str(cf) + ' HZ')

# Set span in Hz
span = 10000
sa.write('SP ' + str(span) + ' HZ')

# Take a frequency sweep (TS)

# Select ASCII DATA with 'BIN 0' according to Programming Manual
print(sa.write('BIN 0'))

# Create a Python pandas Series
data = pd.Series([], dtype=object)

# Fetch data, convert string to float, print the power level values
for i in np.arange(501):
    data[i] = float(sa.query('XMA? ' + str(i) + ',1')) * 0.01

#%% Plot the results
# Generate the frequency values for the x-axis
f = np.linspace(cf-span/2, cf+span/2, 501)

# Plot the results, set a title and label the axes
plt.plot(f, data)
plt.xlabel('f in Hz')
plt.ylabel('Power Level in dBm')
plt.title('CF: 1.5 GHz, Span: 10.0 kHz, RBW: 100 Hz, VBW: 100 Hz, \n Peak at 1.5 GHz and -35.85 dBm')

Few things to consider when using Python to obtain data from the spectrum analyzer:

  • Anritsu MS2661N acquires only 501 data points per sweep
  • The frequency axis values need to be generated manually. I used numpy‘s linspace method. It was a bit tricky because you one has to change the generation of frequency step values depending on whether parameters “Center Frequency & Span” or “Start/Stop Frequency” are used
  • Fetching the data takes quite some time (approx. 30 seconds). This is due to the fact that every single data point needs to be queried with the XMA? command in a for-loop. This is at least how it’s done in an example from Anritsu’s Programming Manual. I haven’t figured out yet how to fetch a block of data

Summary and Conclusion

I was clearly impressed how easy it was to obtain good quality frequency spectra images from a 20 year old instrument. I’ll refine the workflows and do further testing in Python. It should be possible to do all of this “automagically” via one little Python script. So far I’m really happy with the results where I don’t have to rely on smartphone pictures anymore. Thanks to einball for his help (basically googling for me) and to John (KE5FX) for writing his plotter emulator which helped me a lot to obtain hard copies from my SA. That’s it for today! Happy measurements! 😉

73 de Denis, DH7DN

Happy New Year 2023

Hi everyone,

let’s just forget 2022 and move on. Covid, inflation, wars and conflicts – it doesn’t get better. Nevertheless, I had many positive moments in 2022, too! I had some lucky test equipment acquisitions, I managed to sell unused test equipment and free up some space, did some Python and GPIB programming, did a bike tour, met lots of nice and interesting people throughout the year, finally published some decent blog posts and successfully reduced my weight from 132.9 kg (290 lbs) to 115.5 kg (254 lbs) in 365 days.

There is a lot more to do in 2023 and I’ll try to keep up with publishing interesting blog posts. My new year resolution in 2023? No new resolutions! They are useless – at least for me.  I have a bunch of interesting projects on my list and I hope they will happen some day… perhaps this year. If you take on too much, you will end up doing nothing at all.

Happy New Year 2023, stay positive, safe and sound 🙂

73 de DH7DN

Doesn’t always go as intended…