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