Forum: Mikrocontroller und Digitale Elektronik Messwertausgabe eines Mikrocontrollers an Drucker per USB


von Kevin Schrater (Gast)


Lesenswert?

Hallo miteinander,

ich möchte Meßwerte eines µC (nicht USB-fähig) am besten über UART per
USB an einen Drucker senden (ohne PC-Verbindung).
Welcher Kontroller eignet sich hierfür für den Anschluß an meinen µC?
Habt ihr Lösungsansätze?

Danke schon mal

Kevin

von Philipp Karbach (Gast)


Lesenswert?

such mal bei conrad unter "usb modul" aber ich denke nen usb drucker
anzusteuern ist irgendwie nicht so toll. paralleldrucker gehen viel
einfach, dann kannst du den ascii standardtreiber nehmen und dann schön
drucken. korrigiert mich wenn ich falsch liege :)

von Rahul (Gast)


Lesenswert?

>Welcher Kontroller eignet sich hierfür für den Anschluß an meinen µC?
Einer, der einen USB-Host mit entsprechendem Stack zur Verfügung
stellt. Weiterhin ist der Aufbau der Drucker-Protokolls von Nöten.
>Habt ihr Lösungsansätze?
Daten irgendwo (Flash-Card o.ä.) zwischenspeichern, dann Controller an
PC anschliessen, und dann an den Drucker ausgeben.
Ist wesentlich unanstrengender.

von SIGINT (Gast)


Lesenswert?

@Kevin:
  Das wird wahrscheinlich mit USB nicht funktionieren: Du brauchst
dafür einen USB-Hostcontroller... der wird
1.) wahrscheinlich schwer zu bekommen sein
2.) relativ teuer sein
3.) Nicht so einfach anzusteuern sein, wie die Schnittstellenconverter
4.) eine relativ breitbandige Anbindung benötigen

Als alternative wäre ein serieller oder paralleler Drucker
wahrscheinlich besser. Es gibt kleine "Kioskdrucker", die man leicht
irgendwo einbauen kann und seriell ansteuerbar sind... schau mal bei
Ebay.

Gruß,
  SIGINT

von walifogel (Gast)


Lesenswert?

Die meisten Preiswerden Drucker sind so genannte GDI Drucker, die Daten
werden im PC aufbereitet und dann an den Drucker Punkt für Punkt
gesendet.

Du müsstest den PC an dieser stelle emulieren.

Die einzige Möglichkeit ist, einen ''vollwertigen'' Drucker über
seine ESC Sequenzen zu steuern. Bei Grafik, musst du dann, deine
Grafik, in ein Punktmuster übersetzen und dann an den Drucker als ESC
Steuersequenz ausgeben.

Das heißt du musst einen eignen Druckertreiber schreiben.

wf

von Jadeclaw D. (jadeclaw)


Lesenswert?

Bei Atmel gehen Controller in Produktion mit USB-Hostmode on Board.
ATUSB1286/1287/646/647.
Ich empfehle mal, die Datenblätter gründlich zu studieren.
Sinnvoller erscheint mir, entweder einen Bondrucker (RS232/Centronics)
oder einen Postscript-Drucker(RS232/Centronics). Postscript ist voll
dokumentiert und deshalb ebenfalls implementierbar. Davon ab, Epsons
ESC-P ist noch lange nicht tot, z.B. für Arztpraxen gibt es immer noch
Nadeldrucker. Und das können viele Laser auch noch (Epson Emulation).

Gruss
Jadeclaw.

von Tubie (Gast)


Lesenswert?

Hallo,
solange es nur um Meßwerte (ohne Grafik) geht, könnte man doch fast
jeden "älteren" Drucker mit Centronics Schnittstelle nehmen. Habe
hier noch einen Epson Stylus Photo 700 und einen HP Laserjet 6L stehen.
Diese lassen sich unter DOS mit > copy autoexec.bat lpt1 < herforagend
steuern.

Gruß,
Tubie

von Rahul (Gast)


Lesenswert?

Philips hat den ISP1160. Der ist für 7,25 Euro bei Reichelt zu kriegen.
Das Problem wird aber trotzdem der Treiber für den Drucker sein:
Entweder gibt es dazu irgendwelche Dokumentation (linux-Treiber), oder
wenn er zu den "besseren" Druckern gehört (HP, Epson), dann
unterstützt er u.U. auch die entsprechenden Protokolle.

von Bernd Rüter (Gast)


Lesenswert?

Sieh mal auf http://www.saelig.com nach dem USBWiz! Ein Chip für alles.

von Philipp Karbach (Gast)


Lesenswert?

hmm jetzt bin ich aber auch stutzig, Tubie meinte ja auch man kann
einfach auf die schnittstelle ausgeben und mit basic gabs ja auch immer
lprint(). was für daten verschicken die denn dann auf den drucker? muss
man da wirklich nen komplizierten treiber schreiben?

von Rolf Magnus (Gast)


Lesenswert?

Es kommt drauf an. Zunächst mal gibt's, wie schon erwähnt wurde,
GDI-Drucker. Das sind Billigst-Spargeräte, wo man einen ausreichend
leistungsstarken Prozessor eingespart hat. Stattdessen wird der
Löwenanteil der Arbeit im PC gemacht. Die funktionieren dann auch nur
auf einem PC und nur unter Windows, weil der Treiber auch die
Druckerlogik enthält. Informationen über die Ansteuerung sind natürlich
nicht verfügbar. Sowas selbst anszusteuern ist daher aussichtslos.
Dann gibt's noch richtige Drucker. An die kann man z.B. einfach
ASCII-Text schicken, und den drucken sie dann einfach so aus. Wenn man
Grafik haben will, gibt's spezielle Protokolle, über die man die Daten
an den Drucker schicken muß. Da hängt's dann vom Drucker ab, welches
Protokoll er kann. Das ließe sich oft durchaus noch in einem µC
implementieren, denke ich. Bei USB wird's hier aber auch schon
schwierig, weil man dann auf der µC-Seite einen USB-Host braucht, über
den man den Drucker ansteuern kann. Ein paralleler (nicht-GDI-)Drucker
dagegen läßt sich einfachst ansteuern und ist mit Sicherheit die beste
Lösung für sowas.

von Philipp Karbach (Gast)


Lesenswert?

jo genauso hab ich mir das auch vorgestellt, auf ebay kriegt man für ein
paar münzen schon einen alten nadeldrucker (tinte ist irgendwie doof
weil die immer eintrocknet wenn man sie nicht benutzt), ich hab noch
nen alten star nl-10, der ist schon etwaaaaas älter hehe. Das ding
arbeitet immer noch mit den alten bändern und da könnte man
sicherlicher nen µC dranbauen. Irgendwann probier ich das mal aus. Ich
glaub im Handbuch steht sogar noch drin wie die ascii commandos gehen.
Sowas haben die hersteller ja damals reingeschrieben!

von Kevin Schrater (Gast)


Lesenswert?

Danke schon mal für die zahlreichen Antworten.

Wenn ich aber bei USB bleiben will, sollte mir ja der Hersteller das
USB-Protokoll zur Verfügung stellen.
Gibt es einen, der das macht? Brother z.B. macht es nicht.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Du musst hier zwei Dinge voneinander trennen.

Die Ansteuerung von USB-Druckern besteht aus zwei getrennten Teilen -
der reinen Datenübertragung (das ist eine USB-Standardgeräteklasse und
dürfte bei fast allen USB-Druckern identisch sein) und der Aufbereitung
der zu druckenden Daten.

Für den ersten Teil gibt es eine Lösung*, mit der Du mit zwei Chips
einen USB-Drucker quasi wie einen Paralleldrucker ansprechen kannst,
diese Lösung besteht aus einem fertig programmierten Microcontroller
(anscheinend ein ARM7 aus der LPC2xxx-Serie von Philips) und einem von
diesem angesteuerten USB-Host-Controller.

Deine Schaltung kommuniziert mit dem fertig programmierten
Microcontroller über SPI und kann über diese Schnittstelle die zu
druckenden Daten an den Drucker senden (soweit also "quasi", da SPI
ja nicht parallel ist ...).

Der zweite Teil hängt vom verwendeten Drucker ab und ist völlig
unabhängig von der verwendeten Druckerschnittstelle. Die hier zu
treffenden Entscheidungen sind für USB-, Parallel- und auch
Netzwerkdrucker die selben.

Es empfiehlt sich dringendst, einen Drucker zu verwenden, der über
"Eigenintelligenz" verfügt und über eine standardisierte
"Druckersprache" angesteuert werden kann - Kandidaten dafür sind
ESC/P2 (Epson), PCL und natürlich Postscript.

Nur bei der Verwendung einer solchen "Druckersprache" besteht die
Chance, den Drucker durch einen anderen ersetzen zu können, sollte er
ausfallen oder nicht mehr lieferbar sein.

"GDI"-Drucker oder "host-based"-Drucker verwenden meist völlig
undokumentierte und nicht standardisierte "Druckersprachen", so daß
eine Entwicklung für so etwas eine reine Insellösung wäre, die
spätestens beim Erscheinen des Nachfolgermodells ein Kandidat für die
Tonne/Neuentwicklung ist. Das ist leider auch bei den meisten der
einfachen Tintenstrahldrucker der Fall.

Für manche dieser Drucker gibt es Druckertreiber im Quelltext, diese
findet man als Bestandteil von Ghostscript.

*) http://www.ghielectronics.com/USBwiz.htm

von Rahul (Gast)


Lesenswert?

PCL5 (Julius Packard), ESC/P2 (Epson) etc müssten eigentlich
offenliegen...
Wie man das aber einem USB-Drucker verpult, wüsste ich nicht.
Linux-Kernel-Treiber vielleicht mal angucken.

von Kai R. (kairiek)


Lesenswert?

>ich möchte Meßwerte eines µC (nicht USB-fähig) am besten über UART per
>USB an einen Drucker senden (ohne PC-Verbindung).

UART per USB???

Dann würde ich wie oben schon genannt nach einem RS232 fähigen Drucker
suchen. Du ersparst die sehr viel Aufwand und Arbeit.

MFG

Kai

von Kai R. (kairiek)


Lesenswert?

PS: Ich glaube kaum, dass die Hersteller ihr USB-Protokoll rausrücken.

von Philipp Karbach (Gast)


Lesenswert?

warum auch den ganzen USB unsinn? das ist doch total viel aufwand und
man findet die drucker für ein paar euro bei ebay das ist doch wirklich
kein problem!

von Christoph Kessler (db1uq) (Gast)


Lesenswert?

Da das nur über einen USB-Host auf der Mikrocontroller-Seite geht,
vielleicht nach der USB-on-the-go Norm, ist der Áufwand hoch. Eine
fertige Lösung mit dem ISP1161 und einem LP... Prozessor von Philips,
die von RS232 auf USB-Host wandelt gibts hier:
http://www.ghielectronics.com/USBwiz.htm
Ich habe einen Laserjet mit seriellem und parallelen Anschluß, der
versteht auch HP-GL Vektorformat (sollte jeder LJ-kompatible können),
damit kann man Messkurven mit wenig Aufwand drucken.

von Christoph Kessler (db1uq) (Gast)


Lesenswert?

na Rufus hatte ja auf denselben USBwiz hingewiesen, habs erst jetzt
gelesen.
Was jedenfalls nicht geht, ist ein RS232-USB-Wandler mit FTDI oder
Prolific-Chip, das ist immer nur ein USB-Device, kein USB-Host

von Rahul (Gast)


Lesenswert?

@USBwiz:
Ein bischen pervers ist das ja schon, einen ARM als Sklaven für einen
AVR arbeiten zu lassen...

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Tja - wenn Du einen USB-Host-Stack für einen AVR hast, nur her damit!

von Rahul (Gast)


Lesenswert?

Ich meinte das eher so, dass der ARM dann gleich den Job des AVR
übernehmen könnte.
Ich könnte dir einen Stack USB-Hosts auf nen AVR kleben...

von Christoph Kessler (db1uq) (Gast)


Lesenswert?

Links auf USB-Projekte mit AVR gibts hier:
http://www.obdev.at/products/avrusb/benefits.html
aber einen Drucker so anzusteuern hat noch keiner geschafft

von Christoph Kessler (db1uq) (Gast)


Lesenswert?

Es gibt auch noch eine Japaner, der mit einem MPEG1-Video vorführt, wie
er eine USB-Maus am AVR betreibt:
http://www.asahi-net.or.jp/~qx5k-iskw/robot/usbhost.html
leider gibt es anscheinend keine englische Version dieser Seite, daher
sehe ich vor allem Fragezeichen. Die Quelltexte sind aber downloadbar.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

@Christoph:

Der OSBDEV-USB-Stack ist ein *Device*-Stack, damit kann kein Drucker
angesteuert werden.

Abgesehen davon unterstützen diese Software-USB-Stacks (OSBDEV und
Igor) auch nur low-speed-USB mit 1.5 MBit/sec, während USB-Drucker
full-speed-USB-Geräte (mit 12 MBit/sec) sind.

Das was der Japaner da in seinem MPEG-Video vorführt ist ein
low-speed-USB-Host-Stack (eben auch 1.5 MBit/sec), mehr ist in reiner
Software einfach nicht möglich.
HIDs (Tastaturen und Mäuse) sind i.d.R. low-speed-Geräte, deswegen
funktioniert sowas.



Was erforderlich wäre, ist ein USB-Host-Stack, der mit einem
(Hardware-) USB-Host-Controller wie dem Philips ISP1160
zusammenarbeitet.

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
Noch kein Account? Hier anmelden.