Hameg-Interface - Hardware

Ein Oszilloskop ist schon eine feine Sache, denn es gibt einen echten Einblick in den Verlauf eines Signales und ermöglicht so ein gutes Verständnis für die Vorgänge in einer Schaltung. Mit einem Digitalspeicheroszilloskop kann man darüber hinaus Signale und sogar einmalige Ereignisse erfassen, festhalten und auf dem Bildschirm analysieren. Ärgerlich aber, dass man interessante Aufnahmen nicht auf Dauer festhalten kann - nach dem Ausschalten des Oszis ist der Speicher leer, und die schönen Bilder landen im Nirvana und treffen die Daten, die beim letzten Festplattencrash draufgegangen sind. Blöd !

Hameg-Oszilloskop

Höchste Zeit also, dagegen etwas zu tun. Nicht umsonst befindet sich an der Rückseite meines HM305 eine Schnittstelle, die nach einem eigenen Protokoll arbeitet und an die "normalerweise" (also wenn es nach der Firma Hameg geht) ein schweineteures Interface rangehängt wird, dass dann die Daten auf gebräuchlichere Standards umsetzt. (Die neueren Geräte haben übrigens eine echte RS-232 dran ...)

Da muss aber doch was zu machen sein ;-)

Features

Das Interface soll die Daten vom Oszilloskop auslesen und über eine serielle Schnittstelle an einen PC übermitteln. Dabei sind zwei Modi vorgesehen: Zum Einen ein direktes Auslesen, d.h. das Oszi ist direkt über das Interface mit dem PC verbunden und die Daten werden einfach durchgereicht. Damit ein weiter entfernt stehendes Oszi nicht jedes Mal zum PC geschleppt werden muss, gibt es die zweite Variante, bei der die Daten in einem internen Speicher des Interface gehalten werden. Das Interface kann dann zum PC gebracht werden, wo es die Daten an selbigen übergibt; eine direkte Verbindung PC - Interface - Oszi ist so nicht mehr nötig.

Tücken der Technik

In der Anleitung zum HM305 ist die Schnittstelle grob beschrieben. Das "grob" ist allerdings das Problem, denn Feinheiten wie Signalwechsel und -polaritäten bleiben unklar. Für einen Satz wie "Nach einer positiven Flanke an soundso auslesen" gibt es eben viele Deutungsmöglichkeiten. Deswegen wurde die Softwareentwicklung des Interfaces zum try-and-error-Hürdenlauf. Die Hardware war schnell aufgebaut (siehe unten), aber bis das Oszi endlich die Daten seines Speichers preisgab ... Eine Hilfe brachte mir die Webseite von Uwe Bredemeier, der ein ähnliches Interface für das HM1007 und HM205 auf Basis einer alten Elrad-Schaltung vorstellt.

Und ich kann Euch noch eine echt heiße Anekdote erzählen. Ungefähr eine Woche lang habe ich an einer For-Schleife Debugging betrieben. Diese Schleife sollte exakt 8192 mal ausgeführt werden. Um das zu prüfen, habe ich meinen Frequenzzähler (einen FC7008 von ELV) an einen Portpin des Controllers angeschlossen, der innerhalb der Schleife getoggelt wurde. Das angezeigte Ergebnis war bei jeder Messung 8191, also genau ein Durchlauf zu wenig. Also hab ich die Schleife nur 5 mal ausführen lassen und das ganze im AVR-Studio simuliert. Das Ergebnis: 5 Durchläufe, genau wie es sein soll ! Aber der Frequenzzähler zeigt wieder nur 4 an ...

Was war los ? Als ich zufällig mal vergessen habe, den Frequenzzähler zurückzustellen, bekam ich als Ergebnis nach ZWEI Durchläufen 9 angezeigt, also 4 + 5. Ein weiterer Durchlauf, und das Ergebnis war 14 (4 + 5 + 5). Man fasst es nicht: Ein Bug in der Software des Frequenzzählers ! Eine Anfrage bei ELV brachte das Ergebnis, dass es sich dabei um einen bekannten Fehler handelt, der aber systembedingt ist.

Ich habe also EINE WOCHE LANG Debugging bei einer FUNKTIONIERENDEN Schaltung betrieben !!

Manchmal kann man gar nicht soviel essen, wie man kotzen möchte ...

Keanu kotzt!

Die Schaltung

Die Schaltung des Interfaces kann man sich hier herunterladen.

Zentrales Element ist ein ATmega16, dessen Ports A und C über Schutzwiderstände direkt mit dem 25poligen Sub-D-Stecker verbunden sind, der zum Oszi führt. Für Eingänge wurde ein Wert von 12 Kiloohm verwendet, für Ausgänge ein Wert von 150 Ohm, weil sich gezeigt hat, dass das Oszi an einigen Eingängen eine recht kleine Eingangsimpedanz hat; größere Werte führen hier zu undefinierten Pegeln.

An PB0 ist ein Taster angeschlossen (aktiv low), der den Auslesevorgang startet und die Daten vom Oszi in den Speicher schreibt. Alle anderen Betriebsarten können über den PC ausgelöst werden, nur wenn kein PC angeschlossen ist, ist eben ein Taster nötig. Die beiden LEDs an PB1 und PB2 signalisieren ein angeschlossenes Oszilloskop (D1, grün) bzw. einen aktiven Auslesevorgang (D2, rot). K2 ist eine 5polige Stiftleiste zum Anschluss eines ISP-Adapters, über den der Controller programmiert wird.

Als Taktquelle dient der Quarz Q1. Er hat auf den ersten Blick einen krummen Wert (3,6864MHz), der ist aber durchaus sinnvoll, weil er ein ganzzahliges Vielfaches der Baudrate der seriellen Schnittstelle (115.200 Baud) ist. Apropos Schnittstelle: Die 5V-Pegel des ATmega16 werden mit dem Treiberbaustein IC1 vom Typ MAX232 in RS232-konforme Pegel überführt, welche dann an der 9poligen Sub-D-Buchse bereitstehen. Hier wird der PC angeschlossen.

Als Datenspeicher dient ein EEPROM vom Typ 24C32 (4kByte). Es ist gerade groß genug, die Daten von zwei Kanälen aufzunehmen (pro Kanal 2048 Werte à 8 Bit). Am Anfang wollte ich ein paralleles RAM verwenden, jedoch wäre dafür eine Pufferung der Betriebsspannung nötig gewesen und die Portpins des ATmega16 wären langsam knapp geworden ... Das EEPROM hat zwar nur eine begrenzte Anzahl Schreibzyklen (ca. 1 Mio.), hält die Daten dafür aber 10 Jahre lang ohne Pufferung und braucht gerade mal zwei Portpins (nämlich die des TWI-Interfaces).

Die Stromversorgung übernimmt entweder das Oszi selbst oder - wenn das Interface ohne Oszi am PC hängt - ein nahezu beliebiges Steckernetzteil (AC oder DC, mind. 6V). Dessen Spannung wird gleichgerichtet und mit IC3 stabilisiert. Über die beiden Dioden D4 und D5 werden beide Spannungen (vom Oszi und vom Steckernetzteil) entkoppelt, D5 ist eine Schottky-Diode, damit die 5V des Oszis nicht allzu viel kleiner werden. Die LED D6 leuchtet, sobald das Interface versorgt wird.

Ansicht des Interface

Hier noch ein Bild des fertigen Interfaces. Es ist auf einer Lochrasterplatine aufgebaut und in ein Gehäuse von Reichelt integriert. Auf der Vorderseite (im Bild rechts) befinden sich die drei LEDs sowie der Taster, an der Gehäuserückseite die beiden Sub-D-Anschlüsse für den PC und das Oszi sowie die Buchse zur Stromversorgung.

Die Software

Die fertige Software kann hier als ZIP-Archiv downgeloaded werden.

Das Archiv enthält das Hauptprogramm (hameg.c), zwei Files mit I2C-Routinen zur Ansteuerung des EEPROMS (i2ceeprom.c, i2ceeprom.h) sowie das fertige HEX-File zum direkten Programmieren des Controllers (Fuse-Bits nicht vergessen !). Als Compiler wurde der kostenlose AVR-GCC verwendet.

Bedienung des Interfaces

Um mit dem Interface zu kommunizieren, ist ein normales Terminal-Programm nötig, das auf eine Baudrate von 115.200 Baud, 8 Datenbits, 1 Stopbit und keine Parität konfiguriert wird. Folgende Befehle werden vom Interface erkannt:

Alle anderen Kommandos werden vom Interface zurückgesendet.

Wesentlich komfortabler geht das Auslesen des Interfaces mit dem passenden Programm, das im zweiten Teil vorgestellt wird.