Contents
|
GPIB zu USB Interface, Elektor 04-2011
Herr Rainer Schuster war so freundlich, und hat einen im guten Stil programmierten GPIB zu USB Wandler mit Win32 Demo Programm zum auslesen eines Tektronix Oszillographen TDS210 im Heft Elektor 04-2011 vorgestellt. Das ganze ist deutlich preiswerter als kommerzielle Schaltungen.
Leider ist es durch den Verzicht auf GPIB Bus Treiber nur möglich maximal 1 Gerät anzuschließen. Der R8C kann in Summe maximal 60 mA an den I/O Ports liefern. Pro Ausgang sollten es aber nicht mehr als 2 mA sein, um die Spannung von 0.8V für den LOW Pegel nicht zu überschreiten. Per IEEE-488 Standard hat jedes GPIB Gerät am Bus einen Widerstand Abschluss mit 3 KOhm nach +5V und 10 KOhm nach 0V.
Entwicklungs Software
Nach 5,5 Jahren ist die Toolchain von Renesas etwas durcheinander geraten.
Gute Erklärung für Anfänger: Erste Schritte mit Renesas M16C und GCC
Probleme:
Da im Release Ordner kein GPIB_USB.MOT File gefunden wurde, wollte ich neu compilieren, nach Anleitung Elektor 12-2005.
- Der Monitor/Debugger KD30 lässt nicht nicht unter Win7-32 installieren.
Nach dem installieren von NC30 wurde durch Renesas AutoUpdate eine neue Version von HEW eingespielt, bei der die WorkSpace Verwaltung geändert wurde.
Bei der Software GPIB_USB fehlt der Workspace File GPIB_USB.hws.
Der alte Workspace Project File GPIB_USB.hwp ist ungültig. Bei dem aufsetzen eines neuen project files kamen ein paar Fragen:
Heap size = 100
Stack size = 80
Die Entwicklungsumgebung HEW (High-performance Enbedded Workshop) zeigt nicht das Menü Build.
Das konnte behoben werden, durch Angabe von Target = Simulator.
Der Linker ln30 meldet einen Fehler: ROMDATA' section 'vector' is overlapped on the 'interrupt' from FEDCH to FF68H.
Lösungs Vorschlag: In file sect30.inc in Zeile 609 ein Änderung machen:
.org 0c800H ; war 0e000H
Leider hat die Änderung die Interrupt Vektor Tabelle verlegt. Damit funktionierte der Zeichenempfang nicht mehr.
Lösung: Beim neu aufsetzen des Projekts wurde ein neuer File sect30.inc geschrieben, mit rom_NE_top = 0e000H. Die Version im heruntergeladenen ZIP File hatte den Wert 0d000H an dieser Stelle. Durch die vorgeschlagene Änderung auf 0c800H hat der Interrupt Vektor für den UART1 nicht mehr gepasst. Nachdem der File sect30.inc aus dem ZIP Archiv in den Workspace kopiert wurde, hat das Programm funktioniert.
Zu Softwareproblemen findet man hier einige Hinweise.
Vereinfachte Hardware
Da in der Bastelkiste noch ein Elektor R8C Starterkit (Beilage im Heft 12-2005!) vorhanden war, wurde nach einen passenden USB-Serial Wandler gesucht. Da bei Ebay für nur 5 EUR (inkl. Versand) ein Nokia CA-42 Clone (Chip Polific PL2302) zu haben war, wurde er ausprobiert. Dabei gab es folgende Schwierigkeiten:
Der Nokia Stecker war vergossen, so war die Pin Belegung nur schwierig zu bestimmen, siehe Bild rechts. Bein anklicken wird das Bild vergrößert. Wenn die Farben zu Pin Nummer Bestimmung erfolgt ist, kann es an das löten gehen. Meine Zuordnung: |
Now I have learned, that only the cable with the blue USB plug housing (rubber like) does have a pl2303 chip inside. The cable with a black USB plug hard plastic housing does have a seldom used OTI 6858 chip (Ours Technology Inc.), which has drivers for Windows and Linux only. Jetzt habe ich gelernt, dass nur das Kabel mit blauem USB Stecker Gehäuse (Gummi ähnlich) einen pl2303 chip hat. Das Kabel mit dem schwarzen USB Stecker Gehäuse mit Hart-Plastik Schalen hat den selten vorkommenden OTI 6858 chip (Ours Technology Inc.), zu dem es nur Treiber für Windows und Linux gibt. Dafür hat man eine DTR Leitung und die USB +5V leicht zugänglich.
- Auf der Serial Seite gab es nur eine Signalspannung von +3.3 V. Es werden nach R8C/13 Datenblatt aber mindestens +4 V benötigt. Das wurde mit einem IC LM339 (Quad Comperator, bei Reichelt 0,20 EUR) behoben.
Die +5 V von der USB Schnittstelle waren nicht am Kabelende vorhanden. Also wurde der, leider vergossene, USB-Stecker vorsichtig aufgeschnitten, und ein Draht von dem +5 V Anschluss zum Kabelende geführt. |
|
Der Aufbau wurde auf einer Lochraster Platine von Firma Vero gemacht. Da waren die GND und +5 V bereits als Leitungen quer durchgezogen. |
|
Die ganze Schaltung wurde in ein altes Gehäuse (4-fach USB-Hub) eingebaut. Der GPIB Stecker ließ sich dort gut befestigen. Verdrahtet wurde mit WireWrap Draht, der bei 18 Leitungen nicht so stark aufträgt. Die Maxime war schnell und preiswert. Ich habe ein Schaltbild mit Eagle5 gezeichnet und angehängt: GPIB_USB.sch |
|
Damit man gleich etwas vom Schaltbild sieht, hier als PNG Datei. Dazu noch als PDF Datei, zum besseren ausdrucken GPIB_USB.pdf. |
Test der Schaltung
Um das prinzipielle funktionieren des Programms und der Schnittstelle zu testen, braucht man ein Terminal Programm. Dazu empfehle ich PUTTY, es funktioniert auch unter Win 7-32.
PUTTY Einstellungen, Session: Connection Type: serial Serial line: COMx (x = USB Serial Emulation Nummer, z.B. 6) Speed: 38400 Tastatur Eingabe (blind, ohne Echo): "I", strg"J" (Großes I, Steuerung+J = LineFeed) Antwort: GPIB/USB converter V1.0 oder Set local echo ON Text from the clipboard is inserted into the terminal window via the middle mouse key. oder mit dem MAC OS X Terminal (sudo wegen /var/spool/uucp Zugriff): $ sudo cu -l /dev/cu.PL2303-0000103D -s 38400 Hilfe zu "cu" (Call Up another system): ESCAPE: strg + alt gr + N = ~ Terminate: ~. Variable: ~v Komandos: ~? \ = SHIFT + alt + 7
Das ganze wurde in der Virtual Box V.4.0.6 unter MAC OS X 10.6 getestet.
Firmware Kommandos
Die Kommandos können manuell in einem Terminal an den GPIB-USB Konverter geschickt werden. Alle Kommandos müssen mit LineFeed (strg+J) abgeschlossen werden.
C - Reset und Init GPIB Bus
Gx - Sende Kommando byte, x = Zahl 0..255
I - Gibt die Kennung des GPIB-USB : GPIB/USB conveter V1.1
Ra,s - Sende String und lese Antwort zurück, a = GPIB Adresse, s = String, Einlesen Ende bei LineFeed
S - Prüfe GPIB SRQ Leitung
Tn - Setze GPIB Timeout in n = ms
Wa,s = a = GPIB Adresse, s = String
Änderungen an der Firmware
Leider gibt es einen Bug im File GPIB_functions.c.
Ursache:
Da bei dem Port 0 das Bit 0 für die serielle Schnittstelle gebraucht wird (TxD), müssen die Daten um 1 nach links geschoben werden. Das Bit 7 wird dann über Port3, Bit 1 ausgegeben. Da leider zuerst geschoben und dann auf Bit 7 geprüft wird, bekommen alle ASCII Zeichen > 0x3F dann das Bit 7 gesetzt. Einige GPIB Teilnehmer werden das klaglos korrigieren.
Mein Logic Analyzer HP1631D leider nicht.
Lösung:
Im Programm GPIB_functions.c in Funktion send_gpib_byte() muss die Befehlsfolge sein:
if (data & 0x80) p3_1=0; else p3_1=1; data = data <<1; //shift to p0_1..p0_7 p0= ~data;
Erweiterung von GPIB_USB.c
Um meinen HP Logic Analyzer HP1631D sinnvoll mit dem Interface betreiben zu können wurden noch ein paar Befehle dazu programmiert:
B addr, byte LF - sendet ein Kommando Byte zum adressierten Gerät, zum Beispiel "B4,1\n" für den Befehl Go To Local, um von dem Remote Modus zurück in den Local Modus zu schalten, damit er wieder von der Frontplatte her bedient werden kann.
D LF byte - sendet ein Datenbyte, wenn vorher mit L-Befehl das Gerät adressiert wurde. Das dient zum hochladen einer Datei zum GPIB Gerät.
E addr, command LF - Das funktioniert wie der R-Befehl, nur das nicht LineFeed das Ende der Antwort signalisiert, sondern EOI. Sonst wird das einlesen mehrzeiliger Daten, zum Beispiel eine Bildschirm Hardcopy aufwendiger.
L addr,LF - das schaltet das adressierte Gerät um auf Listener, um anschließend eine Datei hochzuladen.
U LF - damit wird der Listener wieder abgeschaltet, mit der Sequenz: LF+EOI, UNL, UNT. Das könnte man auch mit anderen Befehlen machen, aber so ist es einfacher.
Die erweiterten Dateien sind hier hinterlegt: GPIB_USB.c , GPIB_functions.c und binary Release.zip.
Anwendungsprogramm hp1630.py für Logic Analyzer
2016-08-21 Software update - eine aktuelle Software Version gibt es hier. Das erneuerte Programm hp1630_p23.py wurde für Python 2 und 3 kompatibel gemacht und getestet unter Linux Ubuntu 16.04-32, Mac OS X 10.11.6 El Capitan, und Windows 7-64. Damit kann es jetzt als Beispiel Programm auch für andere GPIB Instrumente universell eingesetzt werden.
Um den HP Logic Analyzer HP1631D komfortabel bedienen zu können, wurde ein Python Programm hp1630.py geschrieben. Es läuft zur Zeit unter MAC OS X, kann aber auch leicht an Win32 oder Linux angepasst werden. Wenn man das Programm ohne Kommando Zeilen Parameter aufruft erscheint eine Hilfe Meldung. Als GPIB Adresse ist fest die 4 eingestellt. Es sind folgende Befehle eingebaut, als Kommando Zeilen Parameter:
-a --printall - drucke den Text Bildschirm aus, auch den unsichtbaren Teil. Filename default: printall.txt
-b --beep - damit dann man bei dem Logic Analyzer einen Ton auslösen.
-d --date - damit bekommt der Logic Analyzer das aktuelle Datum gesetzt und läuft dann bis zum ausschalten mit der Uhrzeit weiter. Es gibt aber keine Pufferbatterie im Gerät (27 Jahre alt).
-f --file - damit wird ein Filename eingegeben.
-i --id - damit kann man dem Gerät die Kennung (hp1631D) entlocken.
-l --local - damit wird das GPIB Gerät von dem Remote Modus auf Local Modus zurückgeschaltet, damit man es wieder von der Frontplatte bedienen kann. Das ist zwar auch per Taste machbar, aber so ist es bequemer.
-p --print - damit wird das Oszillografen Bild ausgelesen und im Format PBM (Portable Bit Map) gespeichert. Das kann man gut zur Dokumentation verwenden, zum Beispiel in OpenOffice.
-r --restore - damit wird der Inverse Assembler für den HP 10269B Preprozessor (GPIB, RS232, RS449) hochgeladen. Damit kann man den GPIB Bus im Klartext mitschreiben, bis 1000 Zyklen.
-t --timeout - GPIB timeout in Sekunden angeben.
-u --usb damit wird die Kennung "GPIB/USB converter V1.1" vom GPIB-USB Konverter ausgelesen.
-v --verbose damit werden Statusausgaben zum debuggen temporär eingeschaltet.
Wenn man ein anders GPIB Gerät damit betreiben will, muss man das Programm entsprechend anpassen. Da Python eine Multi-Platform Interpreter Sprache ist, sollte eine Anpassung nicht so schwierig sein.
Zum Schluss noch ein hardcopy Bild von dem HP1631D im Waveform Modus:
Liste der Seiten in dieser category:
-- RudolfReuter 2011-06-17 08:43:38
Go back to CategoryLogicAnalyzer or StartSeite ; KontaktEmail (ContactEmail)