LPT auch von einem mikrocontroller aus machbar?

Gast #4150014
Lesenswert?
• ▲
▼
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
Gast #4150040
Lesenswert?
• ▲
▼
d0..d7 an druckerkabel
pin Strobe an Strobe druckerkabel
1
so:
2

3
STROBE = 1;    // SIGNAL anlegen und Datenbus belegen
4
printf("hello world");  Datenwort schicken
5
STROBE = 0;    // SIGNAL ablegen und Datenbus freigeben
6

7

8
oder so:
9

10

11
STROBE = 0;    // SIGNAL anlegen und Datenbus belegen
12
printf("hello world");  Datenwort schicken
13
STROBE = 1;    // SIGNAL ablegen und Datenbus freigeben
14

15

16
oder ganz anders?

salute
Gast #4150044
Lesenswert?
• ▲
▼
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:
1
STROBE = 1;    // SIGNAL Neutralisieren
2
STROBE = 0;    // Pulsen für 0.5 bis 500 mikrosekunden
3
delay_us(100);
4
STROBE = 1;
5
printf("hello world");  Datenwort schicken
6

7
oder so:
8

9
printf("hello world");  Datenwort schicken
10
STROBE = 1;    // SIGNAL Neutralisieren
11
STROBE = 0;    // Pulsen für 0.5 bis 500 mikrosekunden
12
delay_us(100);
13
STROBE = 1;
14
// Drucker holt sich das Datenwort
15

16
oder doch ganz anders?
#4150053
Lesenswert?
• ▲
▼
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.
(Firma: Schweigstill IT) Persönliche Seite #4150056
Lesenswert?
• ▲
▼
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.
#4150059
Lesenswert?
• ▲
▼
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.
(Firma: matzetronics) #4150062
Lesenswert?
• ▲
▼
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.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.