Hallo, ich möchte folgenden Thermo Drucker mit einem ATmega128 ansteuern: https://www.sparkfun.com/products/10438 Ich habe dazu eine Arduino Bibliothek gefunden (link gibts auf der Seite unten). Auf dem Arudino Board sitzt doch auch nur ein ATmega. Was ich jetzt brauch, ist eine Herangehensweise, wie ich diese Bibliothek auf dem ATmega128 zum laufen bekomme. Kann mir dabei jemand helfen? mfg
Gäst_5 schrieb: > Was ich jetzt brauch, ist eine Herangehensweise, wie ich diese > Bibliothek auf dem ATmega128 zum laufen bekomme. Der Drucker wird über eine ganz normale serielle Schnittstelle angesteuert. Im Handbuch sind die Escape Sequenzen für alle möglichen Sonderdinge angegeben, aber wenn du dem Drucker ganz einfach über die Serielle Schnittstelle ein "abcd" schickst, dann druckt der "abcd" (ein Crriage Return / Line Feed noch hinten nach. Die meisten Drucker drucken erst dann, wenn sie eine komplette Zeile haben. Und der Rest ist: Handbuch-PDF lesen. Das kann dir keiner abnehmen.
Also eine Bibliothek brauchst Du dafür nicht, wie schon gesagt einfach erst mal die serielle Schnittstelle zum Laufen bringen, dann mal das Alphabet hin schicken mit #13 #10 danach (carriage return, line feed). Dann sollte er das Alphabet drucken. Pack das dann in schöne Routinen, und spiele mal damit. Glaub mir die Befehle durchzuspielen macht Spaß. Die fangen in aller Regel mit dem Zeichen #27 ESCape an. Das ist anfangs vielleicht etwas schwierig zu verstehen.
okay - danke! Die Drucker werden an meinem µC an ganz normale I/O Pins angeschlossen, somit muss ich eine Art Software UART verwenden. Reicht es zu, wenn ich lediglich Daten an den Drucker sende, oder muss ich auch welche empfangen? Weil das Senden ja einfacher gehen soll...
Gäst_5 schrieb: > okay - danke! > > Die Drucker werden an meinem µC an ganz normale I/O Pins angeschlossen, > somit muss ich eine Art Software UART verwenden. Dir ist klar, dass du am Mega128 2 Stück USART hast? Und die sind beide schon belegt? Wenn ja, dann kannst du * eine Software UART benutzen * oder den Drucker über das parallele Centronics INterface ansteuern (sofern du genügend Pins frei hast) > Reicht es zu, wenn ich lediglich Daten an den Drucker sende, oder muss > ich auch welche empfangen? Im einfachsten Fall reicht senden. Ich hab jetzt die Doku nicht genauer studiert, ob man den Drucker befragen kann, ob zb das Papier alle ist. Dann musst du auch empfangen können. Aber im einfachsten Fall reicht senden (wobei sich auch noch die Frage nach dem Handshake stellen wird. Aber eins nach dem anderen)
> Dir ist klar, dass du am Mega128 2 Stück USART hast? > Und die sind beide schon belegt? Leider ja. > schliesst du mehrere an? 2 Stück sollen ran und 4 PINS sind dafür vorgesehen PB4,5,6 und 7 Am Layout lässt sich nichts mehr ändern. > wobei sich auch noch die Frage nach dem Handshake stellen wird Wird ein Handshake benötigt? Könnte ich das nicht durch ein Timing realisieren?
Gäst_5 schrieb: >> Dir ist klar, dass du am Mega128 2 Stück USART hast? >> Und die sind beide schon belegt? > > Leider ja. > >> schliesst du mehrere an? > > 2 Stück sollen ran und 4 PINS sind dafür vorgesehen PB4,5,6 und 7 > Am Layout lässt sich nichts mehr ändern. Dann brauchst du eine Software USART. > >> wobei sich auch noch die Frage nach dem Handshake stellen wird > > Wird ein Handshake benötigt? > Könnte ich das nicht durch ein Timing realisieren? Kommt drauf an. Der Drucker wird unterschiedlich lange brauchen, zb je nachdem wieviele Zeilen er vorschieben muss. Wenn der Drucker ein Handshake unterstützt, dann ist es die bessere Wahl. Wenn nicht, dann bleibt dir eh nichts anderes übrig, als Wartezeiten einzuplanen oder drauf zu hoffen, dass der Drucker über genügend Pufferspeicher verfügt um deinen Druckjob aufnehmen zu können.
Karl Heinz Buchegger schrieb: > Zeilen er vorschieben muss. Wenn der Drucker ein Handshake unterstützt, > dann ist es die bessere Wahl. Lustig. Man kann zwar per Commando Disable/Enable RTS/CTS aber es gibt keine RTS/CTS Pins. Mit dem Teil wirst du noch viel Freude haben :-)
> Dann brauchst du eine Software USART. Dazu hab ich folgenden gefunden: Beitrag "Software UART" Allerdings wird da geschrieben das ein "Input-Capture" Eingang und "Compare-Output" Ausgang verwendet werden soll, ich habe ja nun lediglich die I/O PINs zur verfügung - gibt es für meinen Fall auch was fertiges? > Wird ein Handshake benötigt? > Könnte ich das nicht durch ein Timing realisieren? https://www.sparkfun.com/datasheets/Components/General/Driver%20board.pdf Ich kann nirgendwo herauslesen das ein Handshake unterstützt wird.
> Man kann zwar per Commando > Disable/Enable RTS/CTS > aber es gibt keine RTS/CTS Pins. > > Mit dem Teil wirst du noch viel Freude haben :-) Was heißt das genau?
Gäst_5 schrieb: >> Dann brauchst du eine Software USART. > > Dazu hab ich folgenden gefunden: > > Beitrag "Software UART" > > Allerdings wird da geschrieben das ein "Input-Capture" Eingang und > "Compare-Output" Ausgang verwendet werden soll, ich habe ja nun > lediglich die I/O PINs zur verfügung - gibt es für meinen Fall auch was > fertiges? In der Codesammlung gibt es sicherlich auch was fertiges vom PeDa. Aber suchen musst du schon selber. > https://www.sparkfun.com/datasheets/Components/General/Driver%20board.pdf > > Ich kann nirgendwo herauslesen das ein Handshake unterstützt wird. Ich auch nicht. Zumindest nicht auf der Seriellen. Der einzige Hinweis ist das mögliche Einschalten von CTS. Die Centronics scheint hingegen vollständig zu sein. >> Mit dem Teil wirst du noch viel Freude haben :-) > Was heißt das genau? Oooch nur so. Du wirst es wissen, wenn du das erste mal Fluchen musst.
> In der Codesammlung gibt es sicherlich auch was fertiges vom PeDa.
- Welche Codesammlung?
- PeDa ?
Gäst_5 schrieb: >> In der Codesammlung gibt es sicherlich auch was fertiges vom PeDa. > > - Welche Codesammlung? diese Seite nach oben scrollen guckst du links in die 'Menüleiste'
1 | Home |
2 | AVR |
3 | ARM |
4 | ... |
5 | Forum |
6 | .... |
7 | Codesammlung |
8 | .... |
> - PeDa ?
Peter Danegger.
Er hat viele Basisroutinen für alles mögliche veröffentlicht.
Hallo, ich habe es nun geschafft ein Software UART zu programmieren, welcher zunächst nur sendet (was ja reichen sollte für meinen Drucker). Ich hab aber die Vorgehensweise noch nicht ganz verstanden. In folgendem pdf sind die Commands beschrieben: https://www.sparkfun.com/datasheets/Components/General/A2-user%20manual-1.pdf Die Commands machen zwar alle Sinn, aber wie kann ich dem Drucker letztendlich einen Text z.B. "Hallo Welt" schicken? Ich schicke ihm ein "FF" und sage ihm damit, dass er Daten in den Buffer schreibt, doch wie schicke ich ihm dann die Daten? Oder muss das FF einfach vor dem Text stehen? "FF Hallo Welt"
"FF" ist das Steuerzeichen Formfeed (0x0C, Ctrl+L), weder die Zeichenkombination "FF" noch die Hexadezimalzahl 0xFF. Das Kommando musst Du nur senden, wenn Du Deine Druckzeilen nicht mit LF (Linefeed, Zeilenvorschub) abschließt. Außerdem führt das Kommando einen Seitenvorschub durch; dazu hat anscheinend das Druckpapier/die Etiketten schwarze Markierungen, um die Seitenlänge zu bestimmen. Um Deinen Text zu drucken, musst Du nur den Text, gefolgt vom Zeilenvorschub an den Drucker senden.
>Ich schicke ihm ein "FF" und sage ihm damit, dass er Daten in den Buffer >schreibt, doch wie schicke ich ihm dann die Daten? Oder muss das FF >einfach vor dem Text stehen? "FF Hallo Welt" Vorsicht: Englisch! Da steht "print data in the buffer" nicht "into the buffer" wobei letzteres im Zusammenhang mit print eigentlich wenig Sinn machen würde. Karl Heinz hat Dir ja schon dazu geschrieben: Da steht "LF" wie LineFeed.
hm... das hilft mir grad gar nicht weiter... LF Gibt ein Zeichen aus und dann Zeilenvorschub, aber woher wird das Zeichen genommen und wie sieht z.B. der Befehl aus, wenn ich den Drucker einfach "Hallo Welt" drucken lassen möchte? Ich bräuchte einfach mal ein Beispiel um die Herangehensweise zu verstehen...
>LF Gibt ein Zeichen aus und dann Zeilenvorschub, aber woher wird das >Zeichen genommen Wieso "ein Zeichen"? Wo in der Doku liest Du das? Es gibt alle Zeichen im Buffer aus. "LF prints the data in the print buffer and feeds one line. When the print buffer is empty, LF feeds one line." >wie sieht z.B. der Befehl aus, wenn ich den Drucker >einfach "Hallo Welt" drucken lassen möchte? Hier ein C String dafür: [c] char * s = "Hallo Welt\x0a"; [\c]
Wie groß ist der Buffer? - Eine Zeile? > Hier ein C String dafür: > > [c] > char * s = "Hallo Welt\x0a"; > [\c] Warum \x0a am Ende? Wenn ich das dem Drucker schicke, wird es dann in den Buffer geschrieben und durch den Befehl LF druckt er?
Du schickst einfach den Text, so wie du ihn haben willst zum Drucker. Jaaaaa, es hat mal eine Zeit gegeben, da musste man nicht erst mit dem Betriebssystem die Details des Druckens aushandeln und es gab 85 Druckerspooler etc. Da schickt man dem Drucker einfach die ASCII Codes der Zeichen, die er drucken sollte und der tat das dann auch. Ohne das man Font oder Schriftgröße oder sonst was einstellen musste. Vielleicht einfach mal eine ASCII Tabelle studieren? Zb die hier http://www.torsten-horn.de/techdocs/ascii.htm Da findet sich bei den Steuerzeichen (die ersten 32) auch ein LF. Und der ASCII Code dafür ist, oh Wunder, 0x0A Da findet sich auch der FF wieder - 0x0C Und das eine Zeichen, dass du für Spezialsachen brauchen wirst - ESC - genannt Escape - mit dem Code 0x1B Wie hast du deine Software-Serielle getestet?
Warum sollte er? Und falls er das wider erwarten doch sollte, warum sollte dieser Umstand auf der zugehörigen Webseite/in der Dokumentation verschwiegen werden?
Bei Sparkfun und Adafruit gibts nur opensource projekte? Oder irre ich mich?
Die verkaufen Bauteile. Und Bauteile, wie z.B. µCs, sind nur ganz, ganz extrem selten Open Source. Ansonsten könntest Du ja mal versuchen, den zweiten Teil meiner Frage zu verstehen.
Was genau stellst Du Dir vor? Firmware zu Ansteuerung eines nackten Druckwerks? Oder geht es wenigstens irgendwie um das Threadthema (ganz nach oben scrollen ... lesen ... da geht es um einen Drucker mit serieller Schnittstelle, dem ein "A" zu schicken ist, wenn er ein "A" drucken soll)? Was für einen Thermodrucker hast Du denn?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.