Wie genau sind Centronic Timings?

Hi,

ich will im Prinzip *nur* mit einem kleinen QuickBasic Programm einen Drucker simulieren wobei die Geschwindigkeit nicht so ne große Rolle spielt. Das, was ich dabei am wenigsten verstehe ist, wieso ich

*NICHTS* dazu im Internet finde :-(

Vor allem reichen ja einfache in's und out's nicht aus, die Timings sind das Problem, wobei die Zahlen von Seite zu Seite komplett unterschiedlich sind.

Hardwaremässig brauche ich eigentlich nur Steuerleitungen und Statusleitungen überkreuzen, da ich ja auf Status nur lesend; auf Steuer nur schreibend zugreifen kann, oder?

Und wie mache ich das jetzt wirklich am besten mit den Timern? Sind die Standard Windows Drucker Treiber so tolerant, dass sie es z.B. akzeptieren, wenn der Drucker STROBE für 1 Sekunde (also die sleep Funktion) setzt?

Könnte ich dann - zum Probieren einfach überall ein sleep 1 nehmen und ein paar Bytes senden oder kann ich das gleich vergessen.

Oder habe ich irgendwelche Winkerl im Internet nicht gefunden, wo doch was brauchbares für meine Anforderungen zu finden ist?

Vielen Dank!

Reply to
Markus Bauer
Loading thread data ...

???

Falsch gesucht.

[...]

Der Drucker hat an Strobe gar nicht rumzufummeln, der (sendende) rechner macht das!

--
Dr. Juergen Hannappel          http://lisa2.physik.uni-bonn.de/~hannappemailto:hannappel@physik.uni-bonn.de  Phone: +49 228 73 2447 FAX ... 7869
Physikalisches Institut der Uni Bonn Nussallee 12, D-53115 Bonn, Germany     
CERN: Phone: +412276 76461 Fax: ..77930 Bat. 892-R-A13 CH-1211 Geneve 23
Reply to
Juergen Hannappel

Juergen Hannappel dixit:

Was willst du mit den 3 Fragezeichen aussagen? Es geht um eine Datenübertragung in EINE Richtung, wobei die Senderseite keine Software benötigen soll, also einfach eine ASCII Daten drucken. Und das Empfängerprogramm fängt einfach und simpel alles auf und schreibt es in eine Datei.

Kann sein. Aber WAS wären dann die passenden Suchwörter?!

Sorry, nur falsch geschrieben.

Also bis jetzt hab ich ungetesteterweise folgendes zu Stande gebracht:

' Kabelbelegung: ' Vom SenderPC (Centronics, 30pol) Laptop (Sub-D, 25pol) ' 1 (STROBE) --> 11 (BUSY) ' 11 (\BUSY) --> 1 (\STROBE) ' 2-9 (DATA) --> 2-9 (DATA)

CONST PARPORT = &H378 ' LPT1 @ 0x378 CONST STROBE = &HFF ' von BUSY CONST BUSY = &H01 ' von STROBE

adr% = PARPORT

DO WHILE INKEY$ = "" IF ((INP(adr%)+1) AND STROBE) = 0 THEN ' Strobe ist LOW, d.h. neues Byte auf der Leitung

' BUSY auf HIGH OUTP adr%+2, INP(adr%+2) XOR BUSY PRINT "Neues Byte: " & CHR(INP(adr%))

' Bissi warten; wie lange wirklich?! MY_WAIT

' BUSY wieder auf LOW setzen OUTP adr%+2, INP(adr%+2) XOR BUSY END IF LOOP

FUNCTION MY_WAIT() DIM i AS INTEGER DIM v AS INTEGER FOR i = 0 TO 30000 ' void v = i NEXT i END FUNCTION

Dabei habe ich jetzt eben das große Problem, wie lang ich hier tatsächlich warten muss und vor allem, wie ich das implementiere. Und da wäre eben die Frage, ob das nach oben hin egal wäre, z.B. auch eine Sekunde.

Und noch was: Kann ich einfach die Datenleitungen 1:1 ohne Probleme zusammenschließen? Und kann ich ebenfalls ohne Probleme STROBE mit BUSY verbinden und umgekehrt oder braucht man da noch irgendeinen Widerstand; wenn ja, welchen und wohin?

Und irgendwie hab ich Angst davor, das ganze auszuprobieren (der Code ist natürlich noch nicht getestet). Besteht dabei Gefahr, dass mein Parallelport kaputt werden könnte; auf was soll ich bei der Aktion besonders achten?

thxx

mc

Reply to
Markus Bauer

Hi!

Schätze mal, es geht immernoch ums gleiche Problem. Hast Du das hier..

formatting link
..noch gelesen?

Gruß, Michael.

Reply to
Michael Eggert

Markus Bauer schrieb:

Dazu gibt es massig Literatur!

Timing ist überhaupt kein Problem! Das langsamste Gerät/Programm bestimmt den Ablauf.

Falsch! Bei Centronics wird nichts gekreuzt. Sender-Daten und Sender-Satussignale gehen auf die entsprechenden "Inputs" des Druckers. Und die Druckerausgänge auf die entsprechenden Inputs beim Sender. Das ist nicht wie bei der COM wo beide Seiten technisch praktisch gleich sind.

Die Centronics-Schnittstelle ist so ziemlich das einfachste was es von der Steuerung oder dem Timing her gibt.

Und wie gesagt, es gibt massig Literatur. In (fast) jedem Computerhardwarebuch ist das erläutert.

Simpleversion:

8 Steuerleitungen, Strobe (zum Drucker) und Ready (zurück)!

Weitere Steuerleitungen wie "select" oder "paperend" kann man in der Regel offen lassen oder legt sie auf einen definierten Pegel.

Die Steuerschleife sieht simpel aus:

Warte auf ready

Daten anlegen

Strobe (Puls) ausgeben

Zurück zum Anfang und nächstes Byte ausgeben

Je nach Drucker kann man auch das ACK verwenden um eine idealeres Timing hinzubekommen.

Und für den Empfang geht es genauso einfach

Lege "ready" an

Warte auf Strobe (interrupt)

nehme Ready weg

lese Byte und speichere es (oder was auch immer)

zurück zum Anfang

Ohne Gewähr so aus der Erinnerung geschrieben. So arbeiten im Prinzip alle Parallelportzusätze wie Relaiskarten oder einfache Softwaredatenempfänger. Z.B. mein alter Parallel-Seriellwandler mit einem Z80

Gruss Wolfgang

--
No reply to "From"! - Keine Antworten an das "From"
Keine privaten Mails! Ich lese die NGs, in denen ich schreibe.
Und wenn es doch sein muss, dann muss das Subjekt mit NGANTWORT beginnen.
Reply to
Wolfgang Gerber

Uwe Bredemeier schrieb:

ja - sollte es auf jeden Fall. 1 µs ist doch relativ lange.

Gruss Wolfgang

--
No reply to "From"! - Keine Antworten an das "From"
Keine privaten Mails! Ich lese die NGs, in denen ich schreibe.
Und wenn es doch sein muss, dann muss das Subjekt mit NGANTWORT beginnen.
Reply to
Wolfgang Gerber

Reicht es nur die Ausgabe zu capturen (da gäbe es Software dafür) oder willst Du eine Hardwarelösung ?

MM

Reply to
Martin Meier (MMC)

Michael Eggert dixit:

Ja, vielen Dank! Ich habe deine Lösung durchdacht und auch Informationen dazu im Internet eingeholt, nur bin ich dann doch wieder auf LPT gekommen - das mit der Soundkarte ist doch etwas zu stressig. In VB erst die SW schreiben, die mir eine WAV Datei schreibt, dann eine, die es mir wieder codiert, dann die lange Dauer, der ganze Aufwand und nicht zuletzt die nicht so geringe Fehlertoleranz haben mich wieder auf die LTP Lösung gebracht. Hier werden ja immerhin auch ZIP Dateien u.ä. übertragen und wenn da ein einziges Bit von den 8 Millionen nicht stimmt ist gleich die ganze Datei im Ar***.

Trotzdem nochmal Danke!

mc

Reply to
Markus Bauer

"Martin Meier \(MMC\)" dixit:

Her damit! ;-)

Ich will ja eben NUR eine reine SW Lösung! Mit Hardware wärs ja denk ich nicht soo schwer weil umgekehrt hab ich es schon mit dem 2333er von Atmel gemacht.

Wonach muss ich suchen? Ich suche schon tagelang und finde: NULL. Das wäre echt sie beste Lösung für mich!!!

Vielen Dank!!!

Markus

Reply to
Markus Bauer

Wolfgang Gerber dixit:

Schön wärs! STROBE ist nicht unendlich lang auf LOW...Beim Verarbeiten der Daten ist das egal, aber eben nicht bei STROBE.

Ja ich weiss, ich drücke es ja nur in meiner technischen Sachunkenntis so aus.

Ja, in mein QB Programm würde ja ca das tun. Wird der Interrupt ausserdem nicht von ACK ausgelöst?

Und das ist auch wieder genau das was ich nicht checke:

Siehe

formatting link
!!

Wenn ACK auf LOW geht, also der Interrupt ausgelöst wird, müssen sich die (korrekten) Daten ja gar nicht mehr auf den Datenleitungen befinden!

markus

Reply to
Markus Bauer

Wolfgang Gerber schrieb im Beitrag ...

Sag an, welches soll er auf seinem PC denn nehmen ?

-- Manfred Winterhoff, reply-to invalid, use mawin at despammed.com homepage:

formatting link
de.sci.electronics FAQ:
formatting link
Read 'Art of Electronics' Horowitz/Hill before you ask. Lese 'Hohe Schule der Elektronik 1+2' bevor du fragst.

Reply to
MaWin

| > Unterscheide bitte daß es auch richtige Basic gibt, die sehr wohl auch | > mit Intererupts unmgehen können! | >

| Sag an, welches soll er auf seinem PC denn nehmen ?

wie wäre es mit Purebasic? Das gibt wirklich sehr schnellen Code ab. Nur schade, dass die es mit langen floats nicht können, die Zahlenformate sind doch ein wenig antik, aber für Gamer reicht das wohl :-(

MArtin

Reply to
Martin Schönegg

Martin Schönegg schrieb im Beitrag ...

Ich hab mir zwar das Teil nicht gedownloaded (sind ein paar MB), auch das Handbuch nicht (auch ein paar MB), aber im Forum taucht 'Interrupt' auf der Wish-List auf. Nein, vermutlich kann PureBasic keine Hardwareinterrupts installieren und bedienen (mal abgesehen von eingebundenen Libraries in Assembler oder Inline-Assembler, aber das ist Maschinensprache, kein Basic mehr).

--
Manfred Winterhoff, reply-to invalid, use mawin at despammed.com
homepage: http://www.geocities.com/mwinterhoff/
de.sci.electronics FAQ: http://dse-faq.elektronik-kompendium.de/
Read 'Art of Electronics' Horowitz/Hill before you ask.
Lese 'Hohe Schule der Elektronik 1+2' bevor du fragst.
Reply to
MaWin

| > wie wäre es mit Purebasic? Das gibt wirklich sehr schnellen Code ab. | >

| Ich hab mir zwar das Teil nicht gedownloaded (sind ein paar MB), | auch das Handbuch nicht (auch ein paar MB), aber im Forum taucht | 'Interrupt' auf der Wish-List auf. | Nein, vermutlich kann PureBasic keine Hardwareinterrupts | installieren und bedienen (mal abgesehen von eingebundenen | Libraries in Assembler oder Inline-Assembler, aber das ist | Maschinensprache, kein Basic mehr).

Hallo Manfred, ich hab grad nochmal nachgeschaut... hast recht, die Interruptgeschichten waren in einer DLL hinterlegt, ich hab die dann über messages eingebunden. Ist schon lange her...

MArtin

Reply to
Martin Schönegg

MaWin schrieb:

z.B. Powerbasic

Gruss Wolfgang

--
No reply to "From"! - Keine Antworten an das "From"
Keine privaten Mails! Ich lese die NGs, in denen ich schreibe.
Und wenn es doch sein muss, dann muss das Subjekt mit NGANTWORT beginnen.
Reply to
Wolfgang Gerber

Wolfgang Gerber schrieb im Beitrag ...

Wie geht das denn dort ? In

formatting link
finde ich keine Funktionen, um Interrupts abzufangen und zu behandeln, und eine Registrierung beim Forum
formatting link
scheitert derzeit auch mit Server nicht erreichbar.

--
Manfred Winterhoff, reply-to invalid, use mawin at despammed.com
homepage: http://www.geocities.com/mwinterhoff/
de.sci.electronics FAQ: http://dse-faq.elektronik-kompendium.de/
Read 'Art of Electronics' Horowitz/Hill before you ask.
Lese 'Hohe Schule der Elektronik 1+2' bevor du fragst.
Reply to
MaWin

Ja; ich kenne eines für den TI-9900. Das kann auf (nummerierte :-) Basiczeilen als Interrupt-Ziel springen...

Gruss, Holger

PS: Ja, nicht auf dem IBM-PC verwendbar und auch nicht im TI-Homecomputer

Reply to
Holger Petersen

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.