Forum: PC Hard- und Software Light PEN / EGA - Dinosaurier gesucht


von Frickolino (Gast)


Lesenswert?

Hallo an alle älteren Forenbesucher,

vielleicht gibt es ja noch jemanden, der sich mit dem Thema auskennt.
Mich würde mal dringend interessieren, wie man ein CRT/Light Pen System 
durch einen LCD Touchscreen ersetzen kann.

Mich interessiert erst mal nur die nackte Theorie.

Meine Idee bis jetzt:

Die Framebuffer-Karte misst ja offenbar die Zeit die der 
Elektronenstrahl braucht bis er am Light Pen angekommen ist.
Ich vermute mal vom Zeitpunkt des H-Sync des Monitors an.

Wenn ich also eine kleine MicroIntelligenz habe, die die Koordinaten des 
Touchscreens ausliest und auf das H-Sync Signal des Monitors wartet, um 
dann einen den Koordinaten entsprechenden Zeitraum zu warten um dann ein 
Signal an die Light Pen Logik abzusetzen ... puuuhhh ... komme ich der 
Sache damit auf den Grund?

Inputs welcome :-)

Frickolino

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Frickolino schrieb:
> Wenn ich also eine kleine MicroIntelligenz habe, die die Koordinaten des
> Touchscreens ausliest und auf das H-Sync Signal des Monitors wartet, um
> dann einen den Koordinaten entsprechenden Zeitraum zu warten um dann ein
> Signal an die Light Pen Logik abzusetzen ... puuuhhh ... komme ich der
> Sache damit auf den Grund?

Genau das ist die Vorgehensweise. Allerdings brauchst Du auch noch 
V-Sync, um die Bildzeile zu bestimmen.

Die Wartezeit nach dem H-Sync-Signal ist vom Pixeltakt abhängig, der bei 
EGA glücklicherweise feststehend ist; EGA verwendet bei 640x350/60Hz 
einen Pixeltakt von 16.257 MHz und eine Zeilenfrequenz von 21.8 kHz; 
eine Zeile ist also inklusive Austastlücke etwa 746 Pixel "lang". 
Entsprechend ist das Bild inklusive vertikaler Austastlücke 363 Pixel 
hoch.

Mit einem µC müsste das hinzubekommen sein. Die SPI-Schnittstelle wird 
mit 16.257 MHz angesteuert, dabei werden kontinuierlich Daten in die 
SPI-Schnittstelle eingefüllt (das mit etwas über 2 MByte/sec).
Diese Daten sind immer Nullen, außer bei Erreichen der gewünschten 
Position.

Das dürfte durch zwei Pufferbereiche à 94 Byte umsetzbar sein, der eine 
bleibt komplett auf Null gesetzt, in den zweiten wird im gewünschten 
Byte an der gewünschten Bitposition eine 1 eingetragen.

In der Zeilenschleife wird in Abhängigkeit von der aktuellen 
Zeilenposition entweder die Leerzeile oder die Zielzeile ausgegeben.

Die SPI-Datenleitung wird mit dem "Lichtgriffel"-Eingang des Altsystemes 
verbunden. Mit einem Monoflop kann die Impulsdauer soweit verlängert 
werden, daß die Lichtgriffelmimik auch zuverlässig triggert.

von Frickolino (Gast)


Lesenswert?

Hallo Rufus,

sauber! Das sind ja mal ne Menge Infos. Danke schonmal dafür.

Hmm - irgendwie kann ich Dir aber noch nicht ganz folgen.
Ich dachte eher dass das V-Sync Signal ja ganz oben links triggert und 
ich dann eine definierte Zeit abwarte um den LightPen zu simulieren.

Ich glaube ein Bild lag so bei 16ms. Wenn also der Touchscreen mitten im 
Bild berührt wird, dann würde ich nach 8 ms dem Framebuffer vorgaukeln 
er hätte einen LightPen gesehen. Das Ganze natürlich in "genau".

Würde dann also mit nem Oszi ermitteln, welche Zeitdifferenz zwischen 
Sync und LightPen Puls bei welcher Position entsteht.
Dann mit nem AVR einen Touchscreen digital auslesen und Koordinaten in 
Delay umsetzen um dann den virtuellen Lightpen zu triggern.

Wat meenste? Bin ich in der richtigen Spur?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Auch Dein Bildschirm ist zweidimensional. Dein Touchscreen gibt eine 
X- und eine Y-Koordinate von sich, und der Lightpenlogik willst Du diese 
auch übermitteln. Also musst Du, beginnend mit einem V-Sync-Impuls erst 
mal die Zeilen zählen, bis Du zur Y-Koordinate gelangst. Beginnend mit 
dem H-Sync-Impuls für diese Zeile musst Du nun die Pixel zählen, bis Du 
zur X-Koordinate kommst.

Wenn Du den exakten Pixeltakt der Graphikhardware zur Verfügung stehen 
hättest, dann könntest Du natürlich auch den Pixeltakt beginnend mit 
V-Sync zählen und ausrechnen, wann der virtuelle Elektronenstrahl an 
Deiner Koordinate vorbeikommt.

Ich denke aber, daß Du durch Auszählen von Bildzeilen die vertikale 
Positionierung und darauf aufbauend die horizontale Positionierung 
präziser hinbekommst - die vertikale ist exakt, die horizontale ist dann 
nur so inexakt wie die Abweichung zwischen Deinem eigenen Referenztakt 
und dem angenommenen Pixeltakt.

von Frickolino (Gast)


Lesenswert?

Vielen Dank für Deine Geduld.
Das leuchtet mir soweit ein.

Gibt es denn variable Frequenzen?
Ich denke doch nicht.
Der Multisync Monitor der momentan dranhängt zeigt fH=30.6kHz und 
fV=59.0Hz.
Wenn ich also mal davon ausgehe, dass der Touchscreen mittig gedrückt 
würde, dann wäre dass doch übersetzt die 350/2 te Zeile auf dem CRT 
(Austastlücken unberücksichtigt). Bei einer angenommenen Zeilendauer von 
32 uS wäre es dann nicht rein rechnerisch 350/2-1 Zeilen * 32 uS + 32/2 
uS (die halbe Zeile) nach der V-Sync Flanke?

Jetzt bin ich gespannt ...

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Die alte Lightpen Hardware latchte mittels des Lichtpulses mehr oder 
weniger einfach die Adresse des Videoram der Grafikkarte, deswegen wurde 
der Lightpen auch direkt an die Karte angeschlossen. Die Latches wurden 
dann mittels Software gelesen und wieder zu XY umgerechnet.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Frickolino schrieb:
> Wenn ich also mal davon ausgehe

Kannst Du machen, aber das wird schlichtweg zu ungenau sein. Da Du aber 
sowieso einen µC verwenden solltest, kannst Du das ja einfach 
ausprobieren, erstmal mit "Deinem" Verfahren, und wenn das nicht reicht, 
mit den Vorschlägen von mir optimieren.

Viel Erfolg dabei.

von Frickolino (Gast)


Lesenswert?

@ Rufus,

ich verstehe was Du meinst.
Bei einer Verweildauer von nur wenigen uS pro Zeile kann es leicht um 
ein oder mehrere Pixel kippen.
Wie Du ja schon bemerkt hast bekommt man die Zeile mit dem x-ten H-Sync 
leicht getriggert. Die Position innerhalb der Zeile bleibt ohne 
Pixeltakt in jedem Fall schwer zu erzielen.
Das Ganze "stinkt" schwer nach zeitkritischer Assemblerprogrammierung.

Hast Du eventuell noch detailliertere Informationen zum EGA Timing?
Ich hab mir schon die Finger wund gesucht und immer nur VGA Geraffel 
gefunden.

Wenn ich wüsste wie klein die Auflösung sein muss könnte ich schonmal 
testen, ob ich das mit dem uC überhaupt so genau hinbekomme.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Frickolino schrieb:
> Hast Du eventuell noch detailliertere Informationen zum EGA Timing?

Die Angaben, die ich gemacht habe, sollten ausreichen.

Die von Deinem Monitor angezeigten Werte widersprechen dem allerdings; 
EGA hat keine 30 kHz Zeilenfrequenz.

Bist Du Dir sicher, daß das 'ne EGA-Karte ist?

von Frickolino (Gast)


Lesenswert?

Von den 30kHz war ich auch verwirrt.
Es handelt sich um einen proprietären VME Grafikprozessor aus den 80ern.
Hab dann doch noch zwei Zeilen dazu im Netz gefunden und es scheint 
tatsächlich eine VGA/XVGA Karte zu sein.

Macht die Angelegenheit durch die höhere Frequenz nicht wirklich 
einfacher.

Am Ausgang sitzt ein Bt471 RAMDAC.
Dessen Clock müsste eigentlich die Pixelfrequenz darstellen.
Würde es reichen die Pixelfrequenz zu kennen, oder brauche ich sie immer 
um einen Zähler zu bedienen?
Ich könnte auf der Karte durchaus messen, aber dauerhaft anzapfen möchte 
ich sie nicht. Die Dinger kann man mit Gold aufwiegen, so selten sind 
die geworden. Da möchte ich kein Risiko eingehen ...

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Frickolino schrieb:
> Dessen Clock müsste eigentlich die Pixelfrequenz darstellen.
> Würde es reichen die Pixelfrequenz zu kennen, oder brauche ich sie immer
> um einen Zähler zu bedienen?

Zwar wäre es präziser, wenn Du sie direkt verwenden würdest, wenn Du 
aber den Hsync-Impuls auswertest, um den Zeilenanfang zu bestimmen, 
dürfte die "Missweisung" durch einen eigenen Pixeltakt nicht kritisch 
werden.

Allerdings ist der Pixeltakt bei VGA so hoch, daß die angesprochene 
Microcontrollerlösung nicht umsetzbar sein dürfte.

von Frickolino (Gast)


Lesenswert?

Ich nochmal:

Hab's gerade nochmal weitergedacht.
Mal angenommen der Pixeltakt wäre 25 MHz (was dem Oszillator neben dem 
RAMDAC Chip entspricht).
Wenn ich jetzt einen 32 Bit Zählerbaustein mit Comparefunktion hätte 
(z.B. den LS7366R) und einen eigenen 25MHz Oszillator, dann müsste der 
AVR quasi nur die XY Koordinaten des Touchscreens auslesen, die 
Koordinaten in den gepixelten Timerwert umwandeln und in den Timer 
laden.
Der Timer würde dann vom V-Sync gestartet und bekommt die Clock vom 
Oszillator und im Compare Fall löst er das virtuelle Light Pen Signal 
aus.
Das bißchen Arbeit kann dann sogar noch ein Tiny bewältigen.

Das sollte doch ziemlich genau werden, oder?

von Frickolino (Gast)


Lesenswert?

Nachtrag:

ich bin voll mit Dir d'accord, dass der H-Sync der richtige Weg ist.
Das Problem sehe ich in der Zeile selbst. Hier bedeuten 100ns 
Unterschied schon fast mehrere Millimeter. Und hier habe ich nichts mehr 
zum syncen ...

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Frickolino schrieb:
> Hier bedeuten 100ns
> Unterschied schon fast mehrere Millimeter.

Ja, aber die Abweichung zwischen dem "Original-Pixeltakt" und dem 
nachgebildeten wird nicht so groß sein, daß Du 100ns Versatz hinbekommen 
wirst.

Du musst natürlich eine "Trimmfunktion" in Dein Konstrukt einbauen, mit 
der Du horizontalen und vertikalen Versatz des nachgebildeten 
"Lichtgriffels" kompensieren kannst, das brauchst Du schon, um die 
Austastlücken zu kompensieren.

Poste doch mal ein Bild der VME-Bus-Graphikkarte, mit der Du Dich da 
beschäftigtst.

von Frickolino (Gast)


Lesenswert?

Trimmfunktion ist sowieso Pflicht.
Dem VGA Standard entnehme ich einen Pixeltakt von 20.125 MHz - das haut 
schonmal hin.

Eben mit dem Oszi gemessen:

34us high Level und 2us low Level auf dem HSync.
Sollten eigentlich 32us H und 4us L sein ... hmmm ...

18ms H und ~0.1 ms L auf dem VSync.
Kommt in etwa hin.

Also -> VGA 640x480

Die GraKa ist absolut proprietär und offenbar für den OEM designed 
worden.
Kein Industriestandard - keine Datenblätter.
Dual Display - Dual Lightpen - 100% Blackbox

http://www.fdtgb.co.uk/graphics.htm


Apropos Austastlücken: Sind die nicht auch standardisiert?
ich bräuchte ja eigentlich nur die Obere und die Linke.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Frickolino schrieb:
> Dem VGA Standard entnehme ich einen Pixeltakt von 20.125 MHz - das haut
> schonmal hin.

25.125 MHz. Typo?

Graphikhardware mit HD63484. Fand' ich auch mal schick, wollte mir damit 
was basteln, dann aber ist irgendwas dazwischengekommen, und das Projekt 
kam nie über die drüber-nachdenk-Phase hinaus.

Frickolino schrieb:
> Apropos Austastlücken: Sind die nicht auch standardisiert?

Naja, sehr theoretisch schon, aber in der Praxis nicht unbedingt. Ist 
schließlich keine echte VGA-Karte mit VGA-BIOS, die wegen identischer 
Hardware das Timing des IBM-Originals einhält.

Mach das adaptierbar und gut ist.

von Frickolino (Gast)


Lesenswert?

Jepp Typo - 20,125 MHz

Und Du hast schon wieder Recht. Kein IBM VGA - kein Standard :-)


Bleibt das letzte echte Problem: Der LS7366R
Das Teil gibts schon ne Weile nicht mehr bei Farnell.
Gibt es denn Alternativen dazu?
Also programmierbare externe 32 Bit Counter für 20MHz?

Bin nicht erpicht auf CPLD und uC Programmierung für diese Anwendung.
Dafür bin ich zu doof. Ein normales C-Programm krieg ich hin, aber 
nichts suuuper zeitkritisches in Assembler ...

von Sebastian (Gast)


Lesenswert?

Kann man vielleicht einfach TTL oder HCMOS-Zähler kaskadieren? 20 MHz 
müßten mit Standardteilen noch gehen.

von Frickolino (Gast)


Lesenswert?

Es sollte programmierbar sein und ohne ein weiteres Studium 
funktionieren.
In meinem Fall also mit einem Pixelwert vorgeladen werden triggerbar 
sein und beim Match einen I/O Pin schalten.

Eigentlich alles so, wie im uC Timer/Counter.
Ich mag aber nicht sowas programmieren müssen - rabähhhhh

von Reinhard Kern (Gast)


Lesenswert?

Frickolino schrieb:
> Apropos Austastlücken: Sind die nicht auch standardisiert?
> ich bräuchte ja eigentlich nur die Obere und die Linke.

Hallo,

beim offiziellen Timing für 640x480 ist eine H-Zeile 800 Pixel lang (bei 
25,175 MHz), von denen 640 angezeigt werden. Du brauchst also einen 
Offest für vertikal; wenn du einfach durchzählst sind 800 Takte eine 
Zeile, aber viel sicherer ist es den H-Impuls auszuwerten, und von da 
gibt es nochmal einen Offset HSync->sichtbares Bild. Bei den alten 
Röhrenmonitoren war ja alles analog, da kam es nicht so genau drauf an, 
sondern da waren einfach Potis drin für V und H, mit denen man das Bild 
zurechtschieben konnte. So ungefähr solltest du das auch lösen, 2 
veränderliche Parameter sollten reichen, da du die einzelen Zeiten für 
Front Porch, Sync Pulse Length usw. garnicht wissen musst. Da gibt es 
oft Variationen, oft werden auch Oszillatoren mit 25 MHz statt 25.175 
verwendet oder sogar 24 MHz. Soll es ganz präzise sein, greift man am 
besten den Originalpixeltakt ab.

Gruss Reinhard

von Frickolino (Gast)


Lesenswert?

Hallo Reinhard,

danke für die Zusatzinformationen.
Ziemlich genau das habe ich mittlerweile auch bei Tobias' Arbeit 
nachgelesen:

www.uni-koblenz.de/~physik/informatik/ECC/vga.pdf

Seite 7 ...

Bei meiner Graka sind es offenbar 25,000 MHz.
Ich bin sicher, dass die Grafikkarte noch einige Überraschungen birgt.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Frickolino schrieb:
> Bei meiner Graka sind es offenbar 25,000 MHz.

Nun, miss das genaue Timing der Graphikhardware, also die Zeilen- und 
Bildwechselfrequenz und baue Deinen Zählermechanismus darauf auf. Als 
Hardware dürfte sich ein FPGA/CPLD vermutlich recht gut eignen, da das 
deutlich weniger "Verdrahtungsaufwand" mit sich bringt als eine diskret 
aus einzelnen 74xx-Logikbausteinen aufgebaute Variante.

von Frickolino (CPLD Noob) (Gast)


Lesenswert?

Hab bereits beide Frequenzen mit nem HP Counter gemessen.
Leider hänge ich bei dem LS7366R Problem fest.

Auf eine schnellere CPU zu gehen macht - denke ich - keinen Sinn, da 
diese ja > 40MHz laufen müsste und da sind wir bereits in dem für mich 
unbekannten ARM Bereich.

Dann bleibt wohl nichts als das CPLD übrig.

Ich melde mich dann in einem oder zwei Jahren wieder, wenn ich VHDL 
gelernt habe ...

Bis dahin geht es vermutlich darum die LCD's durch Hologramme zu 
ersetzen :-)

von Reinhard Kern (Gast)


Lesenswert?

Frickolino (CPLD Noob) schrieb:
> Bis dahin geht es vermutlich darum die LCD's durch Hologramme zu
> ersetzen :-)

Lightpen war gestern, Schubsen auf dem Display ist heute und Gesten im 
freien Raum sind morgen - wird allerdings schon getestet.

Gruss Reinhard

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.