serieller Thermodrucker - bit image
nun_ja
- sonstiges
Bonjour!
Ich habe mir einen seriellen Thermodrucker von Seiko gekauft. Wollte damit bit images drucken, verstehe die Anleitung aber nicht so ganz :-(
Man soll wohl das an den Drucker schicken:
---------------------------------------------------------
ESC K + n1 + n2
n1: Low Level 8 bits
n2: High Level 2 bits
Prints number of data specified by n1 und n2 in the bit image mode. The maximum number of data one line is 166
---------------------------------------------------------
Ich hab Probleme mit n1 und n2. Die sollen wohl die "number of data" angeben. Ich hätte verstanden, wenn ich hier einfach ein byte mit der Länge schicken muss - aber 2 variablen?
Ich weiß auch nicht was Low/High Level heißt. Außerdem dachte ich, ich könnte nur bytes und nicht bits per seriellem Anschluss verschicken!
vll könnt ihr mir helfen!
Hier ein Scan der Seite der Anleitung (Punkt 7):
http://img828.imageshack.us/i/dpud.jpg/
Viele Dank schonmal und
gute Nacht!
Fabian
Hi there,
Ich weiß auch nicht was Low/High Level heißt. Außerdem dachte ich, ich könnte nur bytes und nicht bits per seriellem Anschluss verschicken!
Offensichtlich kannst Du ein Bit-Image 'rüberschicken, das maximal 1k haben kann (Nichts anders nämlich sagen Deine n1 und n2 - high und low sind die ersten 8 und die letzten 8 bit, wobei von den letzten eben nur 2 genutzt werden (= 2^10 = 1024bit = 1k). Im Prinzip verschickst Du also, wenn Du so willst, 2 Bytes, die im Drucker wieder aufgedröselt werden und in dem vom 2. Byte einfach 6 Bit weggeworfen werden.
Diese Drucker sind afaik für irgendwelche Spezialfälle zuständig, ich hab so ein Teil einmal programmiert, da hab ich aus meinem Programm heraus klitzekleine Etiketten für ein Juweliergeschäft gedruckt, das war auch irgendso eine Thermodrucker, anyway, weil diese Dinge eben so speziell und damit selten sind, darfst Du dir da beim Handling nicht wirklich viel Komfort erwarten, da heissts einfach reinbeissen und vor allem reindenken...;)
Vielen Danke! calvin und hobbes kann kommen!
Hallo,
Ich habe mir einen seriellen Thermodrucker von Seiko gekauft.
ist das etwas Älteres? Die Indizien deuten drauf hin.
ESC K + n1 + n2
Wow, es gibt noch Drucker, die ESC/P sprechen!
n1: Low Level 8 bits
n2: High Level 2 bits
Die Anzahl der Bytes ist damit also auf 1023 beschränkt.
Prints number of data specified by n1 und n2 in the bit image mode. The maximum number of data one line is 166
Oder auf 166 Bytes? Jetzt bin ich verwirrt ...
Ich hab Probleme mit n1 und n2. Die sollen wohl die "number of data" angeben. Ich hätte verstanden, wenn ich hier einfach ein byte mit der Länge schicken muss - aber 2 variablen?
Der ursprüngliche ESC/P-Code kannte die Steuerzeichen ESC K (Rastergrafik mit einfacher Dichte, 60dpi) und ESC L (Rastergrafik mit doppelterer Dichte, 120dpi) und konnte damit auf der üblichen Druckbreite von 8" bis zu 8*60=480 bzw. 8*120=960 Bytes Grafikdaten verarbeiten. Diese Anzahl kann man nicht mehr mit einem Byte ausdrücken, also hat man zwei Bytes für die Anzahl vorgesehen. Auch wenn das MSB dabei wohl häufig 0 sein wird.
Ich weiß auch nicht was Low/High Level heißt.
Ja, n1 ist das Low-Byte (LSB) der Anzahl der folgenden Bytes, n2 das High-Byte (MSB) davon.
Außerdem dachte ich, ich könnte nur bytes und nicht bits per seriellem Anschluss verschicken!
Genaugenommen kannst du am seriellen Anschluss nur Bits übertragen; die Serialisierung (Umwandlung von Bytes in eine Folge von Bits) übernimmt die Hardware aber automatisch. Du arbeitest also immer mit Bytes.
vll könnt ihr mir helfen!
Gern, wenn du sagst, womit du eigentlich Probleme hast.
Ciao,
Martin
Moin,
Rastergrafik mit doppelterer Dichte
Autschn! ;-)
Mann, morgens ist auch alles viel doppelter als sonst ...
Tschüssn,
Martin
Hi!
Du hast mir schon sehr geholfen (denk ich)!
Es ist ein DPU-201GS. Der ist definitiv schon älter, hab ich aber neu und günstig bei ebay bekommen. Ich will "calvin und hobbes"-comicstrips drucken - ist als Wecker gedacht :-)... dann mit arduino.
Der Drucker druckt Zeilen von 8 Pixel Höhe, mit 166 Pixel Breite. Für jede neue Zeile muss man "ESC K + n1 + n2" an den Drucker schicken.
1x8 Pixel werden als Byte kodiert - das heißt pro Zeile max 166 Byte - darum versteh ich nicht, warum man n1 und n2 braucht. n1 könnte ja eigentlich schon die max Länge sein von 166 kodieren!
aber vll ist das im Protokoll einfach so definiert und ich setze n2 einfach auf 0?
Ich würde es also zB so machen:
ich will volle Zeilenbreite (166) - also schick ich:
ESC K 166 0 166Bytes
Ja?
nochmal vielen Dank!!
Fabian
Hallo,
Der Drucker druckt Zeilen von 8 Pixel Höhe, mit 166 Pixel Breite.
bei 60dpi in der Horizontalen (was mit ESC K eingestellt wird) bedeutet das vermutlich, dass der Drucker nur eine Druckbreite von knapp 3" hat, ungefähr 70mm, wie für Kassenzettel und so. Auch Streifendrucker genannt. ;-)
Für jede neue Zeile muss man "ESC K + n1 + n2" an den Drucker schicken.
1x8 Pixel werden als Byte kodiert - das heißt pro Zeile max 166 Byte
Ja, das ist mir alles noch von früher geläufig.
darum versteh ich nicht, warum man n1 und n2 braucht. n1 könnte ja eigentlich schon die max Länge sein von 166 kodieren!
aber vll ist das im Protokoll einfach so definiert und ich setze n2 einfach auf 0?
Genau richtig. Das Protokoll lässt prinzipiell auch mehr als 166 Bytes in einem Rutsch zu, auch wenn das dein Drucker nicht kann.
ich will volle Zeilenbreite (166) - also schick ich:
ESC K 166 0 166Bytes
Ja. Nur dass du die Zahlen 166 und 0 nicht als Ziffernfolge schicken darfst, sondern als Einzelzeichen mit den entsprechenden Codes. Als Hexdump würde dein String also so aussehen:
1B 4B A6 00 XX XX XX XX ... XX XX
Dabei ist 0x1B der Code für das Steuerzeichen ESC, 0x4B ist der Großbuchstabe K, 0xA6 und 0x00 sind zusammen die Längenangabe, und die XX stehen stellvertretend für die eigentlichen Grafikdaten. Vermutlich musst du am Ende der Zeile noch einen Umbruch (CR/LF) notieren.
So long,
Martin
Viele vielen Danke!!! Hast mir sehr geholfen!!