Ingenieurbüro für Leistungselektronik und Antriebe
L-E-A | Dr. Volker Bosch
Beratender Ingenieur / Consultant

 

 

 

 

 

 

 

 

Digitale und analoge Elektronik

HP3478A: Emulation des RAMs durch einen Mikrocontroller

Das HP3478A ist ein sehr gutes 5 ½-stelliges Tischmultimeter, das von den frühen 1980er Jahre bis in die 1990er von Hewlett Packard hergestellt wurde. Es leistet auch heute noch gute Dienste im Messlabor, nicht zuletzt wegen des einfachen Abgleichs der Messbereiche. Die Korrekturdaten werden in einem batteriegepufferten, 4-Bit breiten CMOS-SRAM gespeichert. Dieses Merkmal stellt mittlerweile ein Problem dar, denn die fest verbaute Lithium-Primärzelle muss rechtzeitig erneuert werden, ansonsten droht eine große Ungenauigkeit der angezeigten Messwerte.
Glücklicherweise können die Korrekturdaten über das GPIB-Interface ausgelesen und auch zurückgeschrieben werden. Die Kommandos bestehen aus einem Befehlszeichen, W für das Lesen und X zum Schreiben. Es folgt die Adresse des 4-Bit-Worts (Nibble) und, beim Schreiben, als drittes Argument das zu schreibende Nibble, beide als vorzeichenloser 8-Bit Wert (unsigned char).
Das gewünschte Nibble befindet sich in den unteren 4 Bit des Datenbytes. Beim Lesen steht in den höheren Bits der Wert 4. Dadurch werden die 16 möglichen Werte der „Nutzdaten” als ASCII-Zeichen @, A, B, C, D, E, … O dargestellt. Beim Schreiben der Ablgleichdaten über das GPIB-Interface wird der Inhalt des höheren Nibbles vom HP3478A ignoriert.

Emulation des CMOS-RAMs

Mit einem vergleichsweise einfachen Umbau kann das batteriegepufferte CMOS-SRAM durch eine AVR-MCU ATtiny417 ersetzt werden, wie auf dem ersten Bild am rechten Rand dargestellt. Das Bild kann für eine größere Darstellung angeklickt werden.
Das Layout, im zweiten Bild dargestellt, ist ist sehr einfach: Port C.0…C.3 wird mit der unteren Hälfte des Datenbusses D0…D3 verbunden, Port B mit den unteren 8 Bit des Adressbusses und die obere Hälfte von Port A mit den Steuersignalen CE2, OD, /CE1 und R/W. Programmiert wird die MCU über die UPDI-Schnittstelle, die auf drei Pads geführt ist.

Die Abgleichdaten des HP3478A liegen in gepackter Form im EEPROM des Mikrocontrollers ATtiny417, jeweils zwei Nibbles in einem Byte, wobei das mit der niedrigeren Adresse im unteren Nibble liegt. Beim Einschalten kopiert das C-Programm der MCU die Daten aus dem EEPROM in ihr SRAM und springt eine Assemblerfunktion an, welche mit den Daten im RAM arbeitet, wobei Schreibzugriffe diese aktualisieren. Einen Reset des HP3478A erkennt die MCU daran, dass CE2 auf low geht. Das Programm springt dann zurück in die Funktion main() des C-Programms. Wurden die Daten aktualisiert, so werden die veränderten Bytes in das EEPROM der MCU geschrieben.

Da ich von den winzigen Leiterplatten eine große Anzahl herstellen lassen musste, biete ich hiermit an, ein paar unbestückte Exemplare kostenlos abzugeben — solange mein Vorrat reicht. Die Leiterplatte kann entweder in 70771 Echterdingen abgeholt werden oder gegen Zusendung eines ausreichend frankierten und adressierten Rückumschlags zugesendet werden. Bitte fragen sie vorher an, ob noch Leiterplatten verfügbar sind. Selbstverständlich erfolgt der Einbau dieser Schaltung auf eigenes Risiko. Es wird keine Haftung übernommen und kein Support geleistet.
Die Firmware wurde in zwei Modellen des HP3478A erfolgreich getestet (Datecodes: 1983 und 1988). Das Hexfile mit der Firmware für den ATtiny417 sende ich per eMail zu, wenn Sie mir eine entsprechende eMail senden. Hexfiles für die pinkompatiblen MCUs ATtiny817, —1617 oder —3217 kann ich erzeugen, aber nicht testen. Vermutlich passen auch ATtiny807 und ATtiny427, jedoch kann ich das nicht testen.

Format der Abgleichdaten

Die Kalibrierwerte für einen Messbereich stehen jeweils in 13 Nibbles, beginnend ab der Adresse 1. Die Adresse 0 wird von dem Messgerät genutzt, um den Schreibzugriff auf das CMOS-RAM zu testen, also, ob sich der Drehschalter CAL ENABLE auf der Frontseite des Geräts in der senkrechten Position befindet. Hierfür werden abwechselnd die Werte 0 oder F (hex) geschrieben.
In dem CMOS-SRAM befinden sich 19 Datensätze, von denen drei nicht genutzt werden. Die Zurordnung zu den Messbereichen des HP3478A ist wie folgt, beginnend ab der Adresse 1 des RAMs: 30 mV DC, 300 mV DC, 3 V DC, 30 V DC, 300 V DC, (nicht genutzt), V AC, 30 Ω, 300 Ω, 3 kΩ, 30 kΩ, 300 kΩ, 3 MΩ, 30 MΩ, 300 mA DC, 3 A DC, (nicht genutzt), 300 mA und 3A AC, (nicht genutzt).

Offset

Die ersten sechs Nibbles eines Messbereichs stellen dessen Offset dar. Dieser wird auf den rohen Messwert addiert, den der ADC liefert. Dazu werden die Nibbles als (vorzeichenlose) BCD-Ziffern interpretiert, beginnend mit der höchstwertigen Stelle. Ist die Summe der Nibbles größer als 499999 wird diese als negative Zahl interpretiert, indem von ihr der Wert 1000000 (106) subtrahiert wird.

Verstärkungsfaktor (Gain)

Die folgenden 5 Nibbles stellen den Verstärkungsfaktor (Gain) dar, mit welchem die Summe von ADC-Messwert und Offset multipliziert wird. Der Verstärkungsfaktor kann berechnet werden, indem das Nibble in eine vorzeichenbehaftete 8-Bit Zahl konvertiert wird. Hierzu wird eine sog. Vorzeichenwerweiterung (sign extension) durchgeführt. Diese hängt vom vierten Bit des Nibbles ab, welches als Vorzeichenbit interpretiert wird. Der Algorithmus läuft wie folgt ab: Die Verstärkung wird mit 0 initialisiert. In einer Schleife über die fünf Nibbles, beginnend mit dem niederwertigsten, fünften Nibble, wird die Verstärkung mit dem Faktor 10 multipliziert und der Wert des jeweiligen (vorzeichenbehafteten) Nibbles addiert. Aus der Summe wird eine Gleitkommazahl erzeugt, indem die so berechnete Verstärkung durch 106 dividiert und der Wert 1,0 addiert wird.

Prüfsumme

Die letzten beiden Nibbles eines Abgleichwerts stellen eine einfache binäre Prüfsumme dar. Dazu werden diese als vorzeichenlose 8-Bit Binärzahl interpretiert, wobei das erste Nibble als höherwertigstes interpretiert wird. Auf diesen Wert werden die vorhergehenden 11 Nibbles des Datensatzes, jeweils als vorzeichenlose 4-Bit-Binärzahl, addiert, wobei Überläufe über die 8-Bit der Summe hinweg ignoriert werden. Die erzeugte Summe muss den Wert FF (hex.) ergeben, wenn der Datensatz korrekt ist.

Umrechnung neuer Korrekturwerte in Binärdaten

Die Umrechnung eines neuen Offset-Werts in die benötigten Binärdaten ist trivial und soll hier nicht betrachtet werden. Die Umrechnung des Verstärkungsfaktors ist jedoch mit einer kleinen Tücke verbunden, denn der Wertebereich eines vorzeichenbehafteten Nibbles umfasst lediglich die Zahlen von −8 bis +7. Werte, die größer als +7 oder kleiner als −9 sind, müssen durch einen Überlauf in die führende Dezimalstelle erzeugt werden, so wird beispielsweise die Zahl 8 durch den Ausdruck 10 − 2 dargestellt, bzw. die Zahl −9 durch −10 + 1. Interessanterweise wendet HP diese Darstellung bereits bei Werten an, die betragsmäßig größer als 5 sind. Es wäre noch zu klären, ob diese Konvention bei der Berechnung des Anzeigewerts in der 8-Bit CPU des HP3478A Vorteile bietet?

 


Erstellt: 2025-02-24