Workstation-Monitor am PC mit LinuxBastelstundevon Andreas Bohne |
|
[Leserbriefe] [Neu: Fertiger Adapter von Lihas]
Nachdem bei uns eine alte SGI-Workstation das Zeitliche gesegnet hatte (Friede ihrem Silizium) blieb nur noch der SGI-Monitor über. Das gute an SGI Workstsations ist neben der Graphik-Engine auch der Monitor, selbst bei Workstations, mit denen man keine Dinos berechnet will. Also warum nicht einen Monitor mit einigen Zoll (in der Bildschirmdiagonalen) mehr unter Linux betreiben. Ein Adapterkabel, das den VGA zu RGB, HSync und VSync aufzweigt, war schnell zur Hand - aber warum hat der Monitor nur vier Eingänge (RGB und HS)? Ein Blick in das Manual zerstreute den letzten Tropfen Hoffung, den Monitor direkt mit dem PC verbinden zu können - der Monitor erwartet das Zeilensynchronisationssignal auf dem Grün-Signal. In der Fachsprache "Sync on Green" genannt.
| Abb. 1: Fahrplan | |
| 1) | Schaltung aufbauen (und testen). |
| 2) | Monitordaten bestimmen [1][2]. |
| 3) | Erste Einstellungen der /etc/XF86Config mittels xconfig.awk oder Modeline-Tool bestimmen. |
| 4) | Probieren bis der Monitor synchronisiert. |
| 5) | Eventuell weitere Mode raten. |
| 6) | Finetuning mittels xdivtune. |
| 7) | Bootwert in der /etc/inittab von 2 auf 3 setzen. |
Wer jedoch 10DM über hat, einen Lötkolben zur Hand und ein wenig Mut sowie Geduld besitzt, kann sich binnen einer 1/2 Stunde eine Schaltung zusammenlöten, die beide Synchronisationssignale (Vertikal- uns Horizontalsynchronisation) miteinander verknüpft und mit dem Grünsignal verbindet. Die Schaltung verknüpft die beiden Synchronisationssignale durch eine Exklusiv-Oder (XOR)-Funktion. Der Ausgang steuert einen Transistor, der bei einem high-Signal des XOR-Ausganges das Grünsignal des Monitors vonMasse zieht.
| Abb. 2: Liste der Bauteile | |
| 1 | Lochrasterplatine (mit Leiterbahnen) |
| 3 | BNC Stecker |
| 1 | BNC Buchse |
| 1 | IC-Sockel mit 14 Pins |
| 1 | 74LS86 (besser 74F86) |
| 1 | VN10KM oder MPF910 oder 2SK30A Mosfet |
| 1 | 1k Drehpoti |
| 3 | 47K Widerstäde |
| Koaxkabel | |
| 1 | 7805 (5V Spannungsregler), wer keine 5V hat |
| 1 | VGA zu RGB+HS+VS Kabel
Gibt es in jedem gutsortierten Computerladen. |
| Abb. 3: Schaltung "Sync on Green" | ||
|
||
| Abb. 4: Verschiedene Bauteile im Überblick | ||
7805 |
MosFet |
74LS86 XOR-Gatter |
| Abb. 5: Layout für die Leute, die gerne Platinen ätzen | |
|
|
Damit ist der Hardwareteil fertig, und wenn man keinen Fehler im Aufbau der Schaltung gemacht hat, kann man sich an den Softwareteil begeben - die Konfiguration der XF86Config-Datei (steht unter /etc). Ab hier kommt der Mut und die Geduld ins Spiel. Mut insofern, als manche Festfrequenzmonitore es vorziehen, einen nie wieder anzuschauen, wenn man sie mit einer zu hohen Frequenz ansteuert. Doch nur Mut, man muß ja nicht gleich eine vertikale Synchronisation (VS) von 90 Hertz versuchen. Im Internet gibt es diverse Seiten mit Datenblättern über die verschiedenen Monitortypen [1] und [2]. Anhand der Beschreibungen auf den Web-Seiten kann man schnell feststellen, welche Frequenz der Monitor verträgt, wenn das Handbuch des Monitors zu diesem Thema schweigt.
Die heutigen Graphikkarten sind weniger das Problem, da sie hohe Dot-Clock-Frequenzen (DFC) gut vertragen. Die Graphikkarte sollte eine DCF von 190 erlauben, Frequenzen frei programmieren können und über mind. 2MB Graphikspeicher verfügen. Mehr ist zu empfehlen, da man mit 2 MB gerade mal 8 Bit Farbtiefe bei einer Auflösung von1280x1024 realisieren kann. Für die Erzeugung eines gültigen Modeline-Eintrages kann man diverse Programme benutzen (siehe z.B. Abb. 7).
| Abb. 7: xconfig.awk-Script |
# xconfig.awk - awk script for calculating Xconfig parameters for
# XFree86, given the monitor specs and dot clock frequencies.
# The default values are for the Viewsonic 15.
#
# Example Usage:
# awk -f xconfig.awk HR=1024 VR=768 DCF=110 < /dev/null (or ^D input)
#
# The variable names and meanings are given below.
#
# Author: Richard Brown rab@tauon.ph.unimelb.edu.au
#
BEGIN{
# Sensible defaults if not specified:
#
# angepasst fuer ADI MicroScan 4A
# HR = 1024 # Horizontal Resolution
# VR = 768 # Vertical Resolution
# DCF = 65.0 # Dot Clock Frequency (MHz)
HFrontMIN = 0.50 # Horizontal Front Porch Minimum (us)
HsyncMIN = 1.20 # Horizontal Sync Pulse Width Minimum (us)
HBackMIN = 1.25 # Horizontal Back Porch Minimum (us)
HBlankMIN = 4.00 # Horizontal Blank Period Minimum (us)
HSFMAX = 60 # 56.0 # Max Horizontal Scan Frequency (kHz)
# HSFMAX = 35.2 # 56.0 # Max Horizontal Scan Frequency (kHz)
VFrontMIN = 0.0 # Vertical Front Porch Minimum
VsyncMIN = 45.0 # Vertical Sync Pulse Width Minimum
VBackMIN = 500.0 # Vertical Back Porch Minimum
VBlankMIN = 600.0 # Vertical Blank Period Minimum
VSFMAX = 90 # 100.0 # Max Vertical Scan Frequency (Hz)
verbose = 0
}
END{
# Horizontal Scan Lines:
Hfront = HFrontMIN * DCF + HR
if( Hfront%8 ) Hfront = 8 * (1 + int(Hfront/8) )
# if( (Hfront - HR) < HFrontMIN * DCF ) Hfront += 8
Hsync = HsyncMIN * DCF + Hfront
if( Hsync%8 ) Hsync = 8 * (1 + int(Hsync/8) )
Hblank = HBlankMIN * DCF
HFL = HR + Hblank
if( HFL%8 ) HFL = 8 * (1 + int(HFL/8) )
# Vertical:
Vtick = HFL / DCF # us
Vfront = VR + VfrontMIN / Vtick
Vsync = Vfront + VsyncMIN / Vtick
Vback = VBackMIN / Vtick
Vblank = VBlankMIN / Vtick
VFL = Vsync + Vback
if( VFL < VR + Vblank ) VFL = VR + Vblank
RR = 1000000 * DCF / (HFL * VFL)
HSF = 1000 * DCF / HFL
# Done: generate some output:
if( verbose ) {
printf "\n# Horizontal:\n"
printf "# Front Porch = %.2f us, Sync = %.2f, Back Porch = %.2f, ",
(Hfront - HR) / DCF, (Hsync - Hfront) / DCF, (HFL - Hsync) / DCF
printf "Blank = %.2f\n\n", (HFL - HR) / DCF
}
printf "# Refresh Rate: %.2f Hz, Horizontal Sync Frequency: %.2f kHz\n",
RR, HSF
printf " \"%dx%d\"\t%.2f\t%d %d %d %d %d %d %d %d\n", HR, VR, DCF, HR,
Hfront, Hsync, HFL, VR, Vfront, Vsync, VFL
if( HSF > HSFMAX )
printf("\nWarning: the Horizontal sync frequency
may be too high for the monitor!\n")
if( RR > VSFMAX )
printf("\nWarning: this refresh rate may be too high for the monitor!\n")
}
|
Wer keines zur Hand hat, kann den Eintrag auch mittels eines CGI-Programms [3] via Internet erzeugen (siehe Abb. 8). Dabei kann man zum einen die DCF oder zum anderen die VS als Kriterium für die Erzeugung des Eintrages benutzen.
| Abb. 8: Web-Modeline-Tool [3] | |
|
|
Zum Schluß sollte man noch in der /etc/inittab den Wert bei zwei (id:2:initdefault:) auf 3 zu setzen. Dieses Vorgehen bewirkt, daß nach dem Booten automatisch der X-Server hochgefahren wird und man sich via X-Login einloggen kann. Dieses Verfahren ist das Verfahren der Wahl. Den Monitor schon zum Zeitpunkt des Bootens mit einer festen Frequenz durch Linux anzusteuern bedarf einiger Klimmzüge und führt leider nicht immer zum Erfolg.
| Abb. 9: Die Modeline-Einträge |
Modeline "1280x1024" 104.00 1280 1336 1464 1696 1024 1024 1026 1060 Modeline "1600x1200" 152.97 1600 1680 1864 2216 1200 1200 1203 1241 Modeline "1536x1152" 140.00 1536 1608 1776 2096 1152 1152 1155 1192 Modeline "1024x768" 88.00 1024 1072 1184 1376 768 768 770 806 |
Einziger Wermutstropfen ist, daß die Ansteuerung des Monitors nur im Graphikmodus (unter einem X-Server) funktioniert. Leider greift hier noch nicht das neue Feature des Linux 2.2.x Kernels - das VGA-Boot. Denn die Kerneloption aktiviert nur solche Einstellungen, die auch im BIOS des Computeres verankert sind [6] und das sind nicht die, die der Festfrequenzmonitor mag. Hier wäre noch ein wenig Nacharbeit zu leisten.
Alles, was auf Konsolenebene passiert, wenn man nicht gleich in den Graphikmodus booten will, bleibt im Dunkeln. Hierfür gibt es eine Lösung: SVGATextMode ist ein Programm, das es ermöglicht, den Monitor im Konsolenbetrieb mit einer fest eingestellten Frequenz anzusprechen [2]. Beim Booten wird SVGATextMode durch ein Script unter /sbin/init.d/ gestartet. Das Problem ist, daß die Frequenzen für die Darstellung der Fonts im Textmodus eine andere ist, als die, die beim Graphikmodus eingestellt wird. Die maximale Frequenz für den Textmodus ist sehr viel niedriger als die für den Graphikmodus. Nur teuerer Graphikkarten können auch im Textmodus hohe Frequenzen erzeugen. Sollte man so eine Karte besitzen und SVGATextMode benutzen, so ist es ratsam beim Starten des X-Servers ein Script zu verwenden, das die TextVGA-Parameter beim Starten der X-Oberfläche speichert und nach dem Verlassen der selbern wieder restauriert.
| Abb. 10: Skript zum Abspeichern des VGA Textmodus-Fonts |
#!/bin/sh
# Script to save VGA textmode font, run X, and restore VGA textmode font.
# A more rigorous alternative is to run the 'savetextmode' script before
# running X, and 'textmode' after. This will restore the textmode registers
# and the VGA palette in addition to the VGA font.
TMPDIR=/tmp/${0##*/}.$$
mkdir $TMPDIR || exit
trap "rm -rf $TMPDIR" 0 1 2 3 7 13 15
echo Saving font in $TMPDIR/fontdata
restorefont -w $TMPDIR/fontdata
startx
echo Restoring font from $TMPDIR/fontdata
restorefont -r $TMPDIR/fontdata
|
Eine andere - nicht softwaregesteuerte - Art, um den Monitor auf einer festen Fequenz anzusprechen, ist, eine Graphikkarte zu verwenden, bei der man die Frequenz speichern kann [7]. Leider bieten die wenigsten Graphikkarten dieses Feature an.
| Infos |
|
[1] Monitordaten: http://www.griffintechnology.com/monitor.html http://www.telalink.net/~griffin/monitors/ [2] Monitordaten: http://hawks.ha.md.us/hardware/monitor.html [3] Modeline Tool: http://www.dkfz-heidelberg.de/spec/linux/modeline/ [4] Mehr Infos: http://wmad95.mathematik.uni-wuerzburg.de/%7Ebuckel/projects/schalt.html [5] SVGATextMode 1.9: http://metalab.unc.edu/pub/Linux/utils/console/ [6] Video Mode Selection Support 2.11: http://www.linuxhq.com/doc21/svga.txt [7] Bevorzugte Graphikkarten für Festfrequenzmonitore: http://www.si87.com/ [8] Eagle Dateien (Schema): http://www.dkfz-heidelberg.de/spec/art/green/sync2.sch [9] Eagle Dateien (Platine): http://www.dkfz-heidelberg.de/spec/art/green/sync2.brd |
| Der Autor |
|
Andreas Bohne weiß, warum Pinguine nicht fliegen können: Was nicht fliegt, kann auch nicht abstürzen! Zu erreichen ist er unter . |
Mit freundlicher Genehmigung vom Linux-Magazin Verlag Copyright © 1999