Ola
Würde es funktionieren, wenn man über 8 bit breiten Port, ein
printf("hello world" an einen parallel Drucker schickt? ( Bondrucker )
Wie müsste die Pinbelegung auf dem Druckerkabel gemacht werden.
Welche zusätzlichen PINS müsste man vom Druckerkabel verwenden?
Stelle mir einen parallel Port vor, der anstatt ein LCD einen Drucker
beliefert, funktioniert sowas?
salute
Das geht problemlos. Die Belegung des Kabels findest du beispielsweise
bei
http://pinouts.ru/ParallelPorts/ieee1284b_pinout.shtml
Du brauchst in jedem Fall die 8 Datenleitungen, Strobe und Busy. Was
sonst noch notwendig ist, verrät dir dein Drucker Handbuch.
Hallo,
das "Protokoll" der Druckerschnittstelle ist eines der einfachsten
überhaupt, einfach nur Daten auf die Datenleitungen und einen Impuls auf
Strobe. Unterlagen dazu gibt's tonnenweise, z.B.
http://www.uni-protokolle.de/Lexikon/Centronics-Schnittstelle.html
Georg
Georg G. schrieb:> Das geht problemlos. Die Belegung des Kabels findest du beispielsweise> bei> http://pinouts.ru/ParallelPorts/ieee1284b_pinout.shtml> Du brauchst in jedem Fall die 8 Datenleitungen, Strobe und Busy. Was> sonst noch notwendig ist, verrät dir dein Drucker Handbuch.
Ah,..
"
STROBE Active low pulse used to transfer data into the printer. Pulse
with must be between 0.5 and 500 microseconds for most printers. "
dann:
druckerfrage schrieb:> oder ganz anders?
Strobe ist die Übernahmeleitung.
Erst legst du das Datenbyte an, dann erzeugst du einen Puls auf Strobe
um der Gegenstelle anzuzeigen: Datenbits liegen an, bitte übernehmen.
Ob die Strobe Leitung als Ruhepegel 0 oder 1 ansieht, verrrät dir das
Handuch deiners Druckers (oder die Doku zur sog. Centronics
Schnittstelle)
Karl Heinz schrieb:> Ob die Strobe Leitung als Ruhepegel 0 oder 1 ansieht, verrrät dir das> Handuch deiners Druckers (oder die Doku zur sog. Centronics> Schnittstelle)
In der Centronics Spec
http://de.wikipedia.org/wiki/IEEE_1284#Pinbelegungen
ist über der Strobe Leitung ein QUerstrich, was so viel heisst wie
'active Low'. D.h der Ruhepegel ist eine 1 (Spannung) und gepulst wird
nach 0.
druckerfrage schrieb:> ganz anders
char string[] = "hello world";
char *cp;
cp = string;
while(*cp) {
warten, dass der Drucker nicht busy ist;
*cp auf Datenleitung legen;
strobe auf 0;
etwas warten;
strobe auf 1;
cp++;
}
Als Zugabe dann noch abfragen auf Papier zu Ende, Fehler usw
druckerfrage schrieb:> oder ganz anders?
Ja, ganz anders.
Jedes Zeichen für sich muss durch das low-aktive STROBE-Signal getaktet
werden. Man sollte auf jeden Fall auch BUSY (high-aktiv) auswerten.
Hinsichtlich ACK (low-aktiv) muss man etwas aufpassen. Üblicherweise
wird ACK gesetzt, sobald der Drucker das aktive STROBE erkannt hat. Dann
deaktiviert man STROBE, wartet ggf. auf die Deaktivierung von ACK und
Busy und sendet das nächste Zeichen. Dadurch ergibt sich ein
"wasserdichtes" Handshake.
Einige Drucker aktivieren ACK aber erst nach Deaktivierung von STROBE,
d.h. bei dem zuvor beschriebenen Verfahren wartet der Sender ewig auf
ACK. Dann muss man STROBE schon nach einer angemessenen Wartezeit
zurücknehmen und auf einen Impuls auf ACK warten. Das ist sehr unschön,
weil auf diese Art und Weise auf einmal Zeitabhängigkeiten ins Spiel
kommen. Ich hatte früher dieses Problem einmal durch eine externe
Schaltung lösen müssen, die mittels Monoflop einen STROBE-Impuls für den
Drucker erzeugt. Wenn ich es recht erinnere, handelte es sich bei dem
Drucker um einen Oki Microline irgendwas; es gab aber auch andere
Drucker mit diesem ungünstigen STROBE/ACK-Verhalten.
druckerfrage schrieb:> printf("hello world"); Datenwort schicken
Das ist doch kein Datenwort. Das ist ein String!
Ein String wird gedruckt, indem Zeichen für Zeichen gedruckt wird.
EIn Zeichen wird gedruckt, indem man den ASCII Code des Zeichens an die
Datenbits anlegt und Strobe-0 Strobe-1, wobei es sicherlich noch Zeiten
zu beachten gibt.
Und es wäre gut, vor der Übertragung eines Zeichens noch einen Blick auf
die Busy Leitung zu werfen, mit der dir der Drucker anzeigt, dass er
beschäftigt ist und jetzt keine Zeit hat, sich mit dir zu beschäftigen.
Im allgemeinen ist /STROBE aktiv low, d.h. es wird kurz mal auf Masse
gezogen, während das Byte an den Datenleitungen liegt. Wimre latcht der
Drucker das Byte auf der steigenden Flanke. Wenn er keinen Speicher hat,
hebt er dann BUSY auf High und der Rechner muss warten, bis BUSY wieder
low ist. /ACK sollte auf low gehen, wenn der Drucker das Byte intus hat.
Manche Drucker brauchen ein /SELECT_IN Signal, das aber auf Masse
bleiben kann.
Aber das steht hier auch alles:
http://pinouts.ru/ParallelPorts/Centronics_pinout.shtml
Eineinhalb 8-bit Ports sollten ausreichen. Das einzig böse sind die
nicht unbeträchtlichen Ströme, die manche Drucker verlangen, aber ein
Bondrucker sollte nicht dazu gehören. Im originalen PC warens ja
richtige Bustreiber.