Neues Spielzeug: Thermodrucker

Ich konnte einfach nicht widerstehen: Ein Kassenbon-Drucker (celectronic CardStar gkt) auf Ebay für ca. 17€. So ein Schnäppchen konnte ich mir natürlich nicht entgehen lassen.

Was ich damit will, mag sich der ein oder andere vielleicht fragen. Vieles. Meine Twitter Timeline live ausdrucken z.B.

Nachdem mein storygeiler Kommilitone Servaholics sich nicht zurückhalten konnte und schon vor mir berichten musste und mich auch gleich noch verlinkt hat, muss ich ja jetzt mal einen ausführlichen Bericht liefern 🙂

Erstmal ein paar Details zum Gerät:

Die Idee, mir so ein Ding zuzulegen, hatte ich ja schon lange, aber normalerweise kosten die Dinger ne ganze Menge. Mein Thermodrucker kann halt nur den Basis-ASCII Zeichensatz und er hängt über einen Parallelport am Rechner. Das mit dem begrenzten Zeichensatz ist etwas ärgerlich, aber vielleicht lässt sich das Ding ja auch noch ein bisschen modden. Ein Adapter Parallel-USB wird mitgeliefert, man braucht also keinen prähistorischen PC auszugraben. Eine Rolle Papier war auch dabei.

Was ich auch noch ändern will, ist die bisher externe Stromversorgung. Sollte man auch noch über USB lösen können.

Unter Windows funktioniert das Ding ziemlich einfach als Drucker, indem man es mit dem „Generic Text-Only“ Treiber einrichtet. Drucken geht das einfach über das Drucken-Menü in jedem Programm. Man sollte allerdings im Editor den Textrand ausschalten, sonst bleibt von den 24 Zeichen nicht mehr viel übrig…

Linux (mein Arch zumindest) erkennt das Gerät sofort und läd den usblp-Treiber. Allerdings mag CUPS den Treiber nicht und findet auch in der gepatchten Version den Drucker nicht. Ist aber eigentlich auch egal. Wir wollen ja nicht unsere Hausaufgaben da drauf drucken (auch wenn das mal ne trollige Idee wäre 🙂 ), sondern da live Dinge draufhauen.

Am einfachsten geht das, wenn man direkt in die Gerätedatei /dev/usb/lp0 schreibt und jede Zeile dabei mit newline, carriage-return („\n\r„) beendet. Mein aktuelles Skript dafür frisst einfach alles was man in es reinpiped, ersetzt Umlaute und druckt es dann. Z.B.:

cowsay -f small "Hallo Welt! " | ./thermo

Das malt eine kleine Kuh (die große ist zu dick, 24 Zeichen Breite max) auf den Kassenbon (vorrausgesetzt man hat cowsay drauf natürlich). Sehr praktisch ist auch das Programm figlet, mit dem aus Text ASCII-Art machen kann.

Twitter ausdrucken geht bisher noch nicht mit automatischer Aktualisierung, aber einfach die aktuelle Timeline drucken kann man mit dem Komandozeilenprogramm Python Twitter Tools. Installieren lässt sich das über setuptools:

pacman -S setuptools
easy_install twitter
twitter
twitter -l 5 | ./thermo

Beim ersten Aufruf von twitter wird das übliche oauth-Zeug gemacht. Mit dem -l (kleines L) bestimmt ihr die Anzahl der ausgegebenen Tweets.

Jetzt noch ein paar kleine Skripte, die lustige Dinge mit dem Drucker tun können und dann folgen noch ein paar Bilder. Anmerkung: die Skripte gehen jeweils davon aus, dass das Druckerskript („thermo„) im aktuellen Verzeichnis liegt und ausführbar ist. Möchte man sich z.B. die Zeitansage auf eine Tastenkombination legen, sollten überall feste Pfade drin stehen.

  • Zeitansage, benötigt figlet
  • Zufälliges Zitat, benötigt fortune
  • Aktueller Titel (MPD), benötigt mpc. Als Argument kann ein MPD-Server angegeben werden. Default ist localhost.
  • NetSocket, benötigt socat. Druckt alles, was über Port 4242 UDP kommt. So können andere z.B. mit „netcat -u EURE_IP 4242“ Dinge bei euch drucken.

Ihr habt euch das Teil immernoch nicht auf ebay gesucht? Selber schuld. Vielleicht überzeugen euch ja ein paar Bilder (Servaholics hat auch noch ein paar, die wurden sogar bei Tag gemacht 🙂 )

    • Broschart
    • 13. März 2012

    Hallo, einen schönen Beitrag haben Sie da verfasst.
    Ich habe mir schon vor längerem dieses Viehch zugelegt. Allerdings habe ich da so meine Probleme beim Ausdrucken.
    Könnten Sie mir sagen, unter welchen Bedingungen genau Sie in Windows Text ausgedruckt haben?.
    Ich besitze den identischen Thermodrucker und habe auch den Generic Treiber installiert. Bei mir druckt er allerdings nach einem (gewollten) Zeilenvorschub erst ab dem 6. Zeichen (vermutlich wegen Rand), dann folgen die 24 Zeichen der Zeile, wovon dann 6 natürlich in der nächsten Zeile landen, in dem Bereich, den ich nach einem Zeilenvorschub nicht bedrucken kann.
    Ich habe in Word die Seitenränder auf 0 gestellt und das Layout so verkleinert, dass nur 24 Zeichen in eine Zeile gehen.
    Beim Texteditor z.b. habe ich das gleiche Problem, wobei ich da den Rand erst garnicht deaktivieren kann.

    Ich hoffe Sie können mir weiterhelfen

    Mit freundlichen Grüßen
    Broschart

  1. Unter Windows hatte ich erst das gleiche Problem, es lag dann aber, wie von Ihnen schon vermutet, an den Seitenrändern. Wie Word das handhabt, weiß ich nicht, da ich den Drucker nur mit dem Editor ausprobiert habe. Dort gibt es irgendwo die Einstellung für die Ränder. Nachdem ich die auf 0 gestellt hatte ging es wie ich wollte.

  2. Hast du schonmal Rollen nachgekauft? Konntest du den Zeichensatz schon erweitern?

    Gruß
    Markus

    • Rollen habe ich schonmal nachgekauft, 5 Rollen bei Ebay für ein paar Euro, die sollten ein bisschen halten. Dumm ist nur, dass die dicker sind und nicht direkt in den Drucker passen, Zum Rumspielen aber egal.
      Um den Zeichensatz zu erweitern muss ich das ding wahrscheinlich ganz auseinander nehmen und vllt einen Arduino oder ähnliches als Controller dranhängen, hab ich aber bisher noch nicht ausprobiert.

      • Was heißt dicker? Mehr Papier drauf als reingeht oder die „Papp-Rolle“ innen?

  3. Deutlich mehr Papier

    • Mmh. Frage mich, ob der Drucker für Spielerein reicht (Einkaufszettel – evtl. mit eigner App fürs iPhone, ToDos). Ein wenige Grafik wäre aber nicht schlecht. Habe auch schon den Brother QL560 im Auge. Wobei 50€ schon wieder mehr sind… – Aber danke erstmal für die Antworten.

      Gruß
      Markus

      • Der QL560 ist natürlich nicht schlecht, da er Labels drucken kann und auch Grafiken kann. Habe da aber bisher nur die Windows-Software gesehen (die echt gut ist) und weiß nicht, wie gut man den aus externen Programmen nutzen kann

        • M
        • 7. Januar 2013

        Moin Markus, würde mich mal interessieren, ob du den QL560 bereits ausprobiert hast? Würde ihn ggf. auch für ein Projekt kaufen, habe aber noch ein paar Fragen.

        Bestes

      • Leider nicht. Hab die Tage mal wieder dran gedacht, nur erlauben die übringen Projekte das Basteln aktuell nicht.
        Gruß
        Markus

  4. Sollte ich übrigens mal erfolgreich den Zeichensatz erweitern können, werde ich darüber natürlich berichten, allerdings bin ich inzwischen unter nervengiftlabs.de zu finden, hier aktualisiere ich nichts mehr

    • Jonny
    • 1. Februar 2014

    Habe das Teil auch seit kurzem und es ist superleicht anzuesteuern, z.B. über ein Perl-Skript, etc.
    Man kann den Drucker problemlos über USB mitversorgen, man muss nur einen Step-Up-Wandler zwischenschalten, der auf etwa 8-9V hochwandelt und 200mA schafft. Gibt’s fertig für <2€. Innerhalb des Druckers ist ein 1A 5V Linearregler. Ich bin aber nicht 100% sicher, ob es nicht Teile des Druckers gibt, die etwas mehr Spannung brauchen. Mit 9V= jedenfalls läuft das Teil super.

    • Klaus
    • 1. April 2014

    Habe den celectronic am Arduino laufen. Zeichensatz nicht ANSI, sondern MS-DOS, Codepage 437 (mit deutschen Umlauten). Ausser chr(13) werden keine Steuercodes unterstuetzt. Centronix-Hardware: 8-bit-par, Strobe, Busy = 10 pins benoetigt.

      • Norman
      • 26. Mai 2014

      wow, das hört sich klasse an. das wäre super nett wenn du mehr darüber schreiben könntest. ich verzweifel gerade an einer verbindung mit arduino.

        • C64
        • 26. Juni 2014

        Das ist einfach. Zu druckendes Byte an die Datenleitungen an legen. Dann sofort „Strobe“ ziehen damit der Drucker weiß, dass er die Daten haben kann. Jetzt warten bis die BUSY Leitung kommt. Damit sagt der Drucker, dass er beschäftigt ist. Das macht er wenn sein Puffer voll ist oder wärend er die Daten abruft und verarbeitet. In dem Moment wenn BUSY also kommt, STROBE weg nehmen, dann warten bis BUSY wieder aus geht. Dann kann der Drucker das nächste Zeichen abholen, also wieder von vorne um das nächste Zeichen zu drucken.

        Den normalen Handshake (ACK) braucht man nicht, das kann nämlich die BUSY Leitung übernehmen und über die weiß man gleichzeitig auch ob der Drucker überhaupt Daten annehmen kann.

        Druckt man nur Buchstaben und Zahlen, einfach das 8. Bit am Drucker fest auf Masse klemmen, dann kann man die freie Leitung für STROBE verwenden, so kommt man mit nur 9 Leitungen aus, kann dafür aber keine Sonderzeichen mehr drucken.

    • Wolfi
    • 29. Juni 2014

    Das klingt super! Ich bin ich noch recht frisch am Arduino. Könntest du eventuell deinen Sketch und in etwa die Verkabelung hier posten? Ich würde zu gerne das mal selbst testen.

    Vielen Dank!!!

    C64 :
    Das ist einfach. Zu druckendes Byte an die Datenleitungen an legen. Dann sofort “Strobe” ziehen damit der Drucker weiß, dass er die Daten haben kann. Jetzt warten bis die BUSY Leitung kommt. Damit sagt der Drucker, dass er beschäftigt ist. Das macht er wenn sein Puffer voll ist oder wärend er die Daten abruft und verarbeitet. In dem Moment wenn BUSY also kommt, STROBE weg nehmen, dann warten bis BUSY wieder aus geht. Dann kann der Drucker das nächste Zeichen abholen, also wieder von vorne um das nächste Zeichen zu drucken.
    Den normalen Handshake (ACK) braucht man nicht, das kann nämlich die BUSY Leitung übernehmen und über die weiß man gleichzeitig auch ob der Drucker überhaupt Daten annehmen kann.
    Druckt man nur Buchstaben und Zahlen, einfach das 8. Bit am Drucker fest auf Masse klemmen, dann kann man die freie Leitung für STROBE verwenden, so kommt man mit nur 9 Leitungen aus, kann dafür aber keine Sonderzeichen mehr drucken.

    • C64
    • 2. Juli 2014

    Die Verkabelung musst Du Dir selber ausdenken, ich habe keinen Arduino, ich benutze die ATmegas „nackt“, mache meine eigenen Schaltungen.

    Hier ist ein Bild aus der Sicht des Steckers an den Du den Arduino anschließen musst. Die Pfeile zeigen dann die Datenrichtung aus dem Stecker heraus zum Drucker an:

    Grundsätzlich muß man wissen, dass die Druckerports ursprünglich auf 74xx TTL Technologie basierten. Das bedeutet, dass ein offener Eingang vom TTL Baustein automatisch auf HIGH gezogen wird. Das macht es heutzutage auch Gottseidank einfach den mit 3,3V Systemen anzusteuern, denn hier zählt was auf Masse gezogen wird und was nicht. Die TTL kompatiblen Leitungen, also „5V tolerant“ funktionieren also problemlos. Hat man reine 3,3V Leitungen, kann man Shottkydioden in Serie Schalten um die 5V vom Drucker die eventuell zurückschlagen zu blockieren.

    Da offene Eingänge als HIGH gesehen werden, sind einige Leitungen invertiert. So darf der Drucker bei gezogenem Stecker nicht ständig Daten sehen (Strobe), der würde Amok laufen! Anders herum darf der PC bei gezogenem Stecker nicht glauben da wäre ein Drucker dran, der erkennt höchstens einen dauerbeschäftigten Drucker (Busy).

    Die Leitungen bedeuten folgendes:

    D0 bis D7 (Pin 2 bis 9) sind die Datenleitungen, hier wird immer ein Byte gleichzeitig an gelegt, Im normalen Textmodus eines Druckers entspricht das genau dem ASCII Code (Zeichen 0..127) und der erweiterten Codepage 437 (Zeichen 128..255)

    Die STROBE Leitung (Pin 1) signalisiert dem Drucker, dass das an den Datenleitungen anliegende Bitmuster als Zeichen übernommen werden soll. Da wie gesagt ein gezogener Stecker HIGH liefert ist dieser Eingang invertiert. Erkennt der Drucker ein LOW, dann nimmt er das Muster als Zeichen an. Da man nicht weiß, wann der Drucker nach guckt ob STROBE LOW ist, muß man das halten bis der Drucker reagiert, dann sofort auf HIGH wechseln sonst könnte ein „dummer“ Drucker im nächsten Zyklus ein neues LOW sehen und das Zeichen immer wieder einlesen. Moderne Drucker enthalten ja einen Computer bzw. Mikrocontroller, aber die alten Typenraddrucker waren in der Beziehung ausgesprochen Dumm, die funktionierten überwiegend mechanisch. Deren logik war einfach: „Wenn das sich ständig drehende Typenrad in der Position ist die den Datenleitungen entsprechen AND Strobe=LOW, THEN löse den Hammer aus um das Zeichen zu Papier zu bringen“. Jede Umdrehung des Rades würde also bei ständig auf LOW gezogenem Strobe ein Zeichen drucken, immer wieder das selbe.

    Die ACK Leitung (Pin 10) sagt, dass der Drucker das Zeichen abgerufen hat und man das nächste an legen kann. Diese Leitung war bei den Typenraddruckern einfach an den Hammer angeschlossen. Für eine simple Datenübertragung braucht man die aber nicht, denn man kann dafür eine Eigenschaft der nächsten Leitung nutzen, denn die braucht man auf jeden Fall!

    Die BUSY leitung (Pin 11) wird gebraucht um den Datenverkehr zu stoppen. Denn irgendwann ist ja der Zwischenspeicher des Druckers voll und der PC muß warten bis der Drucker wieder Platz in seinem Puffer hat um weitere Daten an zu nehmen. Der Thermodrucker hat vermutlich 64 Bytes an Puffer, mehr nicht. Das reicht für 2½ Zeilen. Auch bei den Dummen Typenraddruckern spielte diese Leitung eine wichtige Rolle, die war an den Wagenmotor angeschlossen. Fährt der Wagen nach dem Drucken einen Schritt weiter oder kehrt an die Linke position zurück, liegt die BUSY Leitung auf LOW, damit wird der Datenaustausch unterbunden, sonst würde der fahrende Wagen munter weiter Buchstaben auf das Papier eindreschen wenn der PC weiter sendet. Damit kommt beim Typenraddrucker das BUSY jedes mal wenn ein Zeichen übernommen wurde, also gedruckt ist und der Wagen zur nächsten Spalte fährt. Alle anderen Drucker, also auch Nadel, Laser und Tinte ahmen dieses Verhalten aus Kompatiblität nach. Für ein simples Arduino Interface bedeutet das also, dass man am BUSY auch sehen kann ob der Drucker das Zeichen das man angelegt hatte auch genommen hat. Und gleichzeitig sieht man ob man auch das nächste Zeichen drucken kann. Also Platz im Puffer ist oder bei den dummen Typenraddruckern der Wagen auf der nächsten Position steht und ein neues Zeichen gedruckt werden kann. Mehr Info braucht man nicht!

    Die weiteren Leitungen sind für das drucken an sich völlig uninteressant:

    „Paper End“ (Pin 12) ist am Papiersensor des Druckers (früher ein Mikroschalter der durch das Papier gedrückt wurde) angeschlossen. Gleichzeitig wird BUSY auf LOW gezogen. Damit kann der PC rausfinden, dass der Grund für die „Dauer-BUSY Blockade“ fehlendes Papier ist. Auch der Thermodrucker hat einen Sensor, der funktioniert aber nicht richtig, der druckt oft erst mal fröhlich weiter „trocken“, manchmal funktioniert der Sensor wie er soll, meistens nicht. Der scheint den weißen Deckel über den Sensor auch als Papier zu erkennen. Kannst ja probieren den Deckel schwarz an zu malen wenn Du den Sensor brauchst. Auf dunkle Streifen im Papier reagiert der aber einwandfrei. LOL!

    „Select Status“ (Pin 13) dient nur dazu abzufragen ob der Drucker im Online oder Offlinemodus ist. Ältere Drucker kann man mit der „online“ taste abschalten, den Druck also unterbrechen. Zum Beispiel um das Farbband auszutauschen. Der Drucker geht auch bei geöffnetem Gehäuse auf Offline, deswegen feht vielen neueren Druckern die Taste. Gleichzeitig geht auch BUSY an (dauer-LOW) um den Druck zu stoppen, die Leitung braucht man also nur um herauszufinden warum der Drucker nicht mehr will. Gezogener Stecker (also HIGH) signalisiert „Offline“.

    „Auto Line Feed“ (Pin 14). Die Funktion dieser Leitung ist nicht wirklich einheitlich. Damit kann der Drucker dem PC sagen ob er beim Wagenrücklauf automatisch eine Zeile weiter schiebt oder nicht. Umgekehrt kann der PC dem Drucker sagen, dass er das tun soll oder nicht. Uraltdrucker können beides, hier wird per DIP Schalter („Mäuseklavier“) die Leitung am Drucker auf Masse geschaltet. So kann entweder der PC sagen was er will oder der Drucker wird fest auf „Auto-LF“ geschaltet und der PC kann das sehen wenn er die Leitung abfragt. Bei den meisten Tintenstrahlern fehlt diese Möglichkeit, die haben die Leitung gar nicht erst angeschlossen und haben kein „Auto-LF“. Der Thermodrucker hat den Zeilenvorschub mechanisch mit dem Wagenrücklauf gekoppelt, der kann nichts anderes als „Auto-LF“.
    Im Pinbelegungsbild ist deswegen der Pfeil in beide Richtungen, Drucker und PC können nur nach Masse ziehen und geben im Ruhefall eine schwache Spannung per „weak Pullup“ drauf. So kann der DIP_Schalter im Drucker die Leitung nicht kurzschließen und so das TTL Gatter im PC zerstören. Auch die Strobe-Leitung hat dieses Feature denn es gibt auch einen 8-Leritungs Modus (7x Daten und 1x Strobe), hier fungiert Strobe als „Busy“, der Drucker hält Strobe fest wenn er keine Daten will. Macht man aber nicht denn neuere Drucker können das sowiso nicht. War für billige Heimcomputer gedacht die nur 8 Leitungen hatten.

    „Error“ (Pin 14) sagt schlicht, dass der Drucker eine Fehlfunktion hat. Was und warum ist nicht vorgeschrieben. Die geht meistens auch zusammen mit „Paper Empty“ an. Die Aussagekraft ist also „Null“, es sei denn man kennt das genaue Druckermodell und weiß wann der das macht. Error wird NICHT bei gezogenem Stecker erkannt.

    „Innitiate Printer“ (Pin 15) ist eine Resetleitung. Damit wird der Puffer gelöscht und der Drucker wieder in den Normalmodus geschaltet, macht in der Regel auch einen Wagenrücklauf. Auch kann der Drucker dem PC sagen, dass er vom Bediener einen Reset bekam, auch hier ist die Leitung wie „Auto-LF“ Bidirektional. Bei gezogenem Stecker sehen beide Parteien den Reset, Drucker ist im Dauerreset und PC sieht, dass Drucker nicht bereit ist. Ist der Drucker angeschlossen und eingeschaltet, kann man das an dieser Leitung sehen. So kann man unterscheiden, dass der Drucker dran ist aber nicht bereit ist (Busy)
    Damit weiß der PC dann ob überhaupt ein Drucker angeschlossen ist.

    „Select Printer“ (Pin 16) dient dazu mehrere Drucker an einen Port anzusteuern. Über die Leitung kann dann ausgewählt werden welcher der Drucker drucken soll. So konnte man z.B. Nadel und Laserdrucker am selben Port betreiben. Ist schon beim PC völlig uninteressant, hier wird im Gegensatz zu den alten Großrechnern nicht gemultiplext. Ich kenne keinen handelsüblichen Drucker für „Normalsterbliche“, der die Leitung abfragt. Im Zweifel auf Masse legen (Nachbarleitung).

    Zum Zeichensatz:

    Legt man D7 fest auf Masse, kann man immer noch den vollständigen ASCII Code drucken, nicht aber die erweiterte Codepage, also Sonderzeichen.
    Hier ist eine Übersicht aller Zeichen die dieser Thermodrucker ausdrucken kann:
    http://de.wikipedia.org/wiki/Codepage_437
    Lässt man die 8. Datenleitung (D7) weg, dann kann man nur die Zeilen 0 bis 7 drucken, das ist der ASCII Code, immer gleich. Zeilen 8 bis F hängen von der Codepage ab. Der Thermodrucker und auch die meisten Parallelportdrucker (egal ob Tinte, Nadel, Typenrad oder Laser) nutzen ab Werk die selbe sofern die nicht umgeschaltet wurden. In Deutschland wurde Code 850 bevorzugt eingesetzt, in Frankreich ging das nicht anders.

    Die untersten 32 Zeichen (Zeichen 0 bis 31) sind sogenannte „Nicht druckbare Zeichen“. Ein Drucker wird mit den Zahlenbereich gesteuert. Es sind dennoch Zeichen definiert weil Videoterminals keine Steuerung in der Form braucht. Auch der billige Thermodrucker nutzt nur wenige Steuerzeichen, den Rest kann der tatsächlich drucken!

    Die wichtigsten „Nicht druckbaren Zeichen“ sind:

    11 – LF Line-Feed, also Zeilenvorschub
    12 – FF Form Feed, also Seitenvorschub. Einzelblattdrucker werfen die Seite aus und ziehen eine neue sobald das nächste Zeichen kommt.
    13 – CR Carriage Return, also Wagenrücklauf (Gleicher Code wie Enter Taste)
    27 – ESC, also „Escape“

    Für den Thermodrucker sind 11,12 und 13 (LF, FF, CR)identisch, der hat keine Seiten und der Wagenrücklauf kurbelt auch das Papier weiter. Normalerweise sendet man für eine neue Zeile „CR“ „LF“, beim Thermodrucker darf man das nicht machen sonst hat man zwei Zeilen weiter gedreht, hier nur „CR“ senden was man auch bei Druckern mit „Auto-LF“ macht.
    Sinn ist, man kann ja nur „CR“ Senden und der Druckkopf geht wieder auf Anfang der selben Zeile, dann kann man mit „_“ Wörter unterstreichen wie man das bei einer Schreibmaschine auch macht. Deswegen hat man im Normalfall kein Auto-LF eingestellt. Der Thermodrucker kann aber nicht anders!

    Und so schließt man den Drucker (egal welchen, hauptsache Parallelport) an:

    D0 bis D7 an einen parallelen Ausgangsport. Hier legt man einfach die Zeichen an die der Drucker bekommen soll. Über eine weitere Einzelleitung legt man dann STROBE im Ruhefall auf „1“, soll der Drucker ein Zeichen übernehmen legt man das auf „0“.

    Diese Leitungen sind am Arduino reine Ausgänge.

    Jetzt braucht man eine einzige Leitung für den Handshake, die verbindet man mit BUSY und ist am Arduino ein Eingang. Die wird „0“ wenn der Drucker beschäftigt, also „busy“ ist.

    Und so funktioniert der Handshake:

    Warten bis BUSY=1 ist, dann
    Zeichen als Byte an den Datenport anlegen, dann
    STROBE = 0 setzen, dann
    Warten bis BUSY = 0 ist, dann
    STROBE = 1 setzen
    – ENDE –

    Und das wiederholt man für jedes zu druckende Zeichen. Wärend der Warterei sollte man aber unbedingt ein Timeout berücksichtigen, denn ein fehlender Drucker oder ein Drucker ohne Papier (oder offline) lässt den Arduino sonst „ewig“ warten.

    • Lieber C64,
      da du hier in den Kommentaren das alles so schön erklärst (ich würde das grad total gerne mal selbst ausprobieren, aber Unistress -.-): Hast du das alles schonmal irgendwo beschieben? Einen Blogpost dazu geschrieben? Das Interesse daran ist ja anscheinend vorhanden…

        • C64
        • 4. Juli 2014

        Nein, als ich damals noch richtig viel mit den Dingern zu tun hatte, da gab es noch keine Blogs. Ich bin bis heute auch kein Blogger.

        Auf diese Seite bin ich gestoßen weil ich diesen Drucker bei Amazon für ein Projekt gekauft hatte und Infos suchte. Hier habe ich zwar nichts gefunden und musste daher alles selber ausprobieren, aber auch ich habe den Bedarf bemerkt und Teile mein Wissen gerne.

        Normalerweise nimmt man für so was einen RS232 Drucker wie er früher für Terminalsysteme eingesetzt wurde. Auch Kassendrucker waren noch bis vor kurzem alle über RS232 angebunden. Die sind richtig schön, so können die auch Grafik drucken (Nach dem altehrwürdigen EPSON FX80 Standard, klappt fast immer, egal was das für ein Drucker ist) und die schneiden einem auch das Papier.

        Da es aber ein Handheld Gerät war, musste es halt dieses Thermodrucker Werk sein das ich zusammen mit dem ATMEGA in ein eigenes Gehäuse eingebaut hatte.

        Unistress, klar. Aber es ist nicht schwierig, das kriegst Du in ein paar Stunden hin. Das eigentliche Programm ist ja sozusagen ein „Dreizeiler“ in C. Die Druckdaten kann man mit printf in einen Puffer aufbereiten den man dann stur mit seinem „Dreizeiler“ an den Drucker raushämmert bis zum Stringende „“.

        Die Hardware ist in 5 Minuten zusammengestrickt, einfach ein Parport Slotblech aus einem alten AT Computer ausschlachten, da hat man den passenden Stecker auf der einen Seite und alle wichtigen Leitungen auf Pfostenstecker auf der anderen Seite. Und da kann man starren Klingeldraht rein stecken.

  1. 25. Januar 2012

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden /  Ändern )

Google Foto

Du kommentierst mit Deinem Google-Konto. Abmelden /  Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden /  Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden /  Ändern )

Verbinde mit %s

%d Bloggern gefällt das: