Drucker ansteuern PDF Drucken E-Mail
Benutzerbewertung: / 0
SchwachPerfekt 
Mittwoch, den 27. Juli 2005 um 18:52 Uhr

Mit dem Mikrocontroller drucken

Für alle die mal etwas mit einem Mikrocontroller drucken wollen hab ich eine kleine Anleitung + Einführung erstellt.
Im Prinzip ist es das selbe Verfahren wie wenn man etwas auf einem Display anzeigen möchte.




2.0 Die Parallele Schnittstelle


Der Druckerhersteller Centronics führte in den 1970er die Schnittstelle ein die dann auch von anderen Firmen übernommen wurde und heute quasi einen Standard für Drucker darstellt. Die Schnittstelle arbeiten mit TLL- Pegeln (5V und 0V), daher sollte das Verbindungskabel die Maximale Länge von 3,5m nicht überschreiten. Die Länge ist aber stark von der Qualität des Kabels abhängig, es gibt spezielle Kabel mit denen sogar über 5m möglich sind.

Ursprünglich war die Schnittstelle auf beiden Seiten 36 Polig wie sie heute auch auf der Druckerseite zu sehen ist. Beim ersten IBM PC (1980er) wurde aber ein 25-poliger Sub-D Stecker auf der PC Seite eingesetzt da es sonst nicht gelang eine Standart Centronics Buchse mit einer RS-232 Buchse zusammen auf eine Steckkarte zu bekommen.
Die folgenden Pinbelegungen beziehen sich auf den 36-poligen Centronics Stecker.


2.1 Wie funktioniert die Parallele Schnittstelle?


Bei der Parallelen Schnittstelle (auch Centronics - Schnittstelle genannt) werden die Bits Parallel übertragen.
Das heißt für jedes Bit gibt es auch eine Datenleitung. Daher wird immer ein Byte auf einmal übertragen (bei einer Seriellen Schnittstellen werden die Bits nacheinander übertragen und ist daher auch langsamer).
Sobald die acht Bits an den Datenleitungen angelegt worden sind wird Pin1 (Strobe) auf Low (0Volt) geschaltet und der Drucker übernimmt die an den Datenleitungen anliegenden 8 Bits. ( 8 Bit = 1 Byte).

Der Übernahmeimpuls (Strobe) muss mindestens 0,5µs anliegen, darf aber maximal 50µs andauern.
Anschließend sendet der Drucker einen Übernahmebestätigungimpuls von ca. 12µs an Pin 10 (Acknlg).
Low besagt das die Daten verarbeitet wurden und der Drucker Empfangsbereit ist. Dieses Signal brauchen wir aber nicht beachten da wir für unsere Druckeransteuerung uns am Busy Signal orientieren.

Ist Pin 11 (Busy Signal) High, ist der Drucker nicht Empfangsbereit. Busy ist High wenn: Daten Empfangen werden, beim Drucken, Im Off- Line Modus und im Fehlerfall.

Zu beachten ist eigentlich nur noch Pin31 (Init). Ist dieser mindestens für 50µs auf Low Initialisiert sich der Drucker (Hardware Init, es gibt auch ein Software Init) und der Druckerpuffer wird gelöscht.


Meistens wird die Parallele Schnittstelle für den Drucker verwendet und wird deshalb auch häufig Druckerport genannt.
Die Parallele Schnittstelle wird auch für die alten Zip-Laufwerke benutzt.


3.0 Der Aufbau


Aufgebaut habe ich die Schaltung mit dem Experimentierboard von myavr.de.
Als Drucker wurde der Epson Stylus Photo 790 benutzt, wobei eigentlich das Druckermodell unwichtig ist. Wichtig ist nur das er ein ESC/P2, ESC/P Drucker ist.
Programmiert wurde alles in Assembler.


3.1 Anfertigung des Anschlußkabel


Um den Drucker an das Experimentier Board anzuschließen benutzte ich einfach ein durchgeschnittenes Paralleles Verbindungskabel an dem dann später einfach ein Druckerkabel angeschlossen werden kann.



Am besten numeriert man erstmal die Adern mit Tesastreifen durch um später nicht die Übersicht zu verlieren.
Die acht Datenleitungen kann man dann auch gleich auf einen Stecker löten damit man diese immer zusammen hat.
Die ganzen Masseleitungen werden einfach alle miteinander verdrillt und nachher mit einer Krokoklemme an Masse vom Kontrollerboard geklemmt.
Für die einfachste Version braucht man dann nur noch Ader 1 (Strobe zum übernehmen der Datenbits) und Ader 11 (Busy, schaut ob der Drucker Empfangsbereit ist).

Die restlichen Adern kann man dann zurück knicken und abkleben.





3.2 Anschluss am Experimentierboard


Die acht Datenleitungen kommen alle an PortD (Ausgang). Strobe zum übernehmen der Datenbits kommt an PortB (Ausgang) und Busy an PortC (Eingang).
Natürlich ist die Anschlussbelegung jedem selber überlassen und kann ganz einfach geändert werden.




Leider sind die Anschlüsse auf dem myavr Board versetzt, deshalb musste ich zwei Stecker anfertigen (nicht verwirren lassenzwinkern ).
Die ganzen Masse Pins werden eifach mit einer Krokoklemme an Masse vom Board angeschlossen.


4.0 Wie Steuert man den Drucker an?


Jetzt sollte erst einmal geklärt werde wie der Drucker überhaupt funktioniert. Dabei möchte ich jetzt mal nicht auf die Drucktechnik (wie ein Druckkopf funktioniert usw.) eingehen, solche Artikel gibt es im Internet genug.
Vielmehr möchte ich erklären was für Befehle man dem Drucker senden muss damit er z.B. ein "X" druckt.

4.1 Zeichen am Drucker ausgeben


Im Grunde ist es kinderleicht Daten mit einem ESC/P2, ESC/P Drucker zu drucken. Man muss nur die zu druckenden Zeichen im Ascii Code an den Drucker schicken. Die Zeichen werden z.B. im Hex Code über die Parallele Schnittstelle zum Drucker übertragen.


Die dazugehörige Hex Zahl wird von oben nach unten gelesen. Z.B. der Buchstabe S hat die Hex Zahl 0x53.



Diese Zeichen werden dann ersteinmal im Druckerpuffer abgelegt, ist der Puffer voll druckt der Drucker die Zeichen aus und der Puffer kann neu befüllt werden.
Mannchmal möchte man aber nur sehr wenige Zeichen drucken, da der Puffer aber sehr groß ist, und der Drucker erst druckt wen dieser voll ist, wird der Drucker noch auf andere Zeichen warten.

Da man aber nur diesen kleinen Text drucken möchte muss man also den Drucker auffordern den im Puffer befindlichen Text zu drucken.
Aber selbst wenn der Drucker jetzt den Text druckt bleibt ja das Blatt noch im Drucker, da das Blatt ja noch nicht voll ist und der Drucker dann noch auf Daten wartet. Also muss man dem Drucker mitteilen das er das Blatt ausgeben soll. Und genau jetzt kommen die Druckerbefehle (Steuercodes) mit ins Spiel.


4.2 Die Stuercodes


Die Steuercodes sind dazu da um den Drucker etwas mitzuteilen. So kann man dem Drucker z.B. sagen er soll doch Bitte den kommenden Text in der Farbe rot drucken und links einen Rand von 4cm lassen.

Es gibt zwei verschiedne Arten von Befehlen. Einmal Befehle die den Drucker auffordern etwas auszuführen, z.B. soll er die Daten im Puffer drucken und danach das Blatt ausgeben. Und dann gibt es noch die Formatierungsbefehle mit denen man unter anderem den Zeilenabstand, die Farbe und z.B. den Fettdruck wählen kann.

Druckbefehle werden mit dem ESC (HEX-Code 0x1B) Zeichen signalisiert.Dann werden die danach folgenden Daten als Befehle interpretiert.
Eine Ausnahme sind die befehle für den Papiertransport, diese können einfach so gesendet werden.

Unter anderem sind das die Befehle:

CR (0x0D) = Wagenrücklauf
FF (0x0C) = Seitenvorschub (Form Feed)
LF (0x0A) = Zeilenvorschub (Line Feed)


Bevor die ersten Daten an den Drucker gesendet werden sollte man den Drucker initialisieren. Dadurch wird der Drucker sozusagen zurückgesetzt und die Daten im Puffer werden gelöscht. Dann werden die ganzen Formatierungsbefehle gesendet ( Zeilenabstand, Ränder einstellen usw.). Erst dann sollte man die zu druckenden Zeichen senden.Selbstverständlich kann man jetzt auch zwischendrin Formatierungsbefehle senden.
Z.B. kann man dem Drucker jetzt einfach mitteilen den darauffolgenden Text in der Farbe blau zu drucken. Um das wieder rückgängig zu machen muss man den Drucker auffordern einfach wieder in der Farbe schwarz zu drucken. Das geht natürlich nur mit Farbdruckern. alte Nadeldrucker ignorieren den befehl einfach.

Das gleiche funktioniert so wenn man etwas Fett drucken möchte. Einfach den befehl für fettdruck senden, dann die Zeichen senden die fett gedruckt werden sollen, und anschließend wieder den Fettdruck deaktiviere.

Ist man mit seiner übertragung fertig, schickt man den Befehl LF (0x0A) und der im Puffer befindliche Text wird ausgedruckt. Bei LF springt der Drucker übrigens dann auch gleich in die neue Zeile, kann also auch als Absatz benutzt werden.

Damit das Blatt jetzt auch herrauskommt sendet man noch den Befehl FF (0x0C) und das blatt kommt schön braf aus dem Drucker herraus. Zu guter letzt läst man den Drucker nocheinmal initialiesierendamit der puffer gelöscht wird und die Formatierung wieder aufgehoben wird.

Der Drucker zieht übrigens das Blatt selber ein sobald Zeichen gesednet wurden.


Eine Liste mit den Steuercodes findet man im Im Handbuch alterer Epson Drucker. Wer keines hat kann es sich hier herunterladen. Die Steuercodes sind ab Seite 102.
Epson 1520 Handbuch


4.3 Drucken von Grafiken


Auch das Drucken von Grafiken ist sehr einfach möglich. Um den Drucker mitzuteilen das die folgenden Daten eine Grafik, und keine zeichen sind muss man den Grafik Modus aktivieren. Das ganze ist dann aber noch eine Sache für sich. Wer sich trotzdem damit beschäftigen möchte findet im Handbuch des Epson LQ 850 Nadeldruckers eine gute Einfürung zum Drucken von Grafiken. Leider ist aber das Drucken von Grafiken vom Drucker abhängig und funktioniert nicht bei jedem Drucker gleich.

Leider konnte ich kein Handbuch für den Epson LQ 850+ bei Epson finden, eventuell sind auch in anderen hanbüchern eine kleine Einführung zum Druck von Grafiken enthalten.

Das ESCP Manual gibt es hier: ESCP Manual (english)




5.0 Quellcode


Ich hab eine Routine zum Drucken geschrieben. Die Routine ist soweit gut mit kommentaren versehen, so as ich sie hier nicht noch einmal erklären brauche.

Download: Drucken.asm