Forum: Mikrocontroller und Digitale Elektronik usb Drucker, au weia


von Chrissy (Gast)


Lesenswert?

hallo, liebe Gemeinde.
Ich habe ein Problem - und zwar haben wir ein Gerät, das am PC an usb
angeschlosen wird. Zwecks Datenübertragung. Weil ich so gut wie keine
Ahnung vom Eingemachten bei der usb Thematik habe (und da auch keine
Zeit ist, sich da entsprechend einzulesen, Protokoll zu studieren,
Treiber etc...) steckt in unserem Gerät so ein usb/seriell Chip.
Und zwar ein cp2102 von silicon laboratories.
Funktioniert auch.

Nu aber der Ärger. Jetzt soll ein Drucker (!) an das Gerät
angeschlossen werden.... Meiner Meinung nach gar nicht möglich. So ein
Umsetzer Chip braucht doch zwingend einen Gerätetreiber und macht mir
allenfalls ein usb Garät, aber keinen host, den wiederum der Drucker
bräuchte. Stimmts?
Und wie Umfangreich Druckertreiber für die heutigen usb Drucker sind
weiß ich auch nicht, könnte mir aber vorstellen, daß da auch mehr
notwendig ist, als bei nem ibm proprinter.

Bisher kämpfe ich aber noch gegen Windmühlen, um offiziell die
Anweisung als technisch nicht machbar vom Tisch zu bekommen.

Kann mir einer Ratschläge geben, Infos, irgendwas. Gibt es vielleicht
doch eine Möglichkeit, einen Drucker möglichst mit wenig weh zu tun an
unser Gerät zu bekommen? Vielleicht auch irgendeinen Parallelen oder
seriellen?
Obwohl ein Umsetzer Kabel usb (vom Brückenchiop am Gerät) <->
Paralleldrucker eigentlich mangels host und Treiber auch nicht
funktionieren dürfte?

Ist mein usb Verständnis extrem mau, oder bin ích auf dem richtigen
Weg? Und was kann ich bloß wegen des Druckers tun? Sei es Argumentativ
dagegen?

vielen Dank,

Christian

von Chrissy (Gast)


Lesenswert?

Ich habe gerade einen Chip von Phillips entdeckt:

ISP1261 USB OTG bridge controller

Was ist davon in dem Zusammenhang zu halten? Unproblematisch? Gehts in
die richtige Richtung?

von Weihnachtsmann (Gast)


Lesenswert?

Also wenn ich dich richtig verstanden habe willst du mit einem Gerät
einen USB-Drucker betreiben.

Meiner meinung nach ein hoffungsloses Unterfangen. Weil ich nicht
glaube dass der Hersteller die Techniker für Treiber/Protokoll dir
geben wird.


Gruss


Weihnachtsmann

von Rahul (Gast)


Lesenswert?

Du hast Recht! Der Chip ist ein USB-Device. Um einen Drucker o.ä.
anzusprechen braucht man einen Host-Controller.
Einfachster Weg wäre wohl ein PC inkl. Software dazwischen...

von Rufus T. Firefly (Gast)


Lesenswert?

Chrissy, mit dem von Dir gefundenen USB-OTG-Controller von Philips ist
es prinzipiell möglich, mit anderen USB-Devices zu kommunizieren.
Genau dafür ist dieser Controller gedacht.
Von Cypress gibt es auch geeignete Bausteine wie den CY7C67200, den
CY7C67300 oder den SL811HS.

Allerdings müsstest Du dafür einen USB-Host-Stack ('n ganzer Haufen
komplexer Software) in Deinem Gerät implementieren. Die grundlegende
Ansteuerung von USB-Druckern ist ein auch noch überwindbares Problem,
da die reine Schnittstelle, die der Datenübertragung dient, eine
Standard-Geräteklasse ist und sich bei allen USB-Druckern (und
USB-Parallelportadaptern) gleich verhält.
Der USB-Host-Stack muss halt die erforderliche Standard-Geräteklasse
unterstützen; kommerziell erwerbbare USB-Host-Stacks können sowas.

Richtig problematisch wird es bei der Ansteuerung eines konkreten
Druckers, da Du genau wissen musst, welche Steuersequenzen an den
Drucker zu übertragen sind, damit der irgendwas sinnvolles damit
anfängt. Das Problem tritt allerdings bei jeder Art von
Druckeransteuerung auf und hat nichts mit USB zu tun. Bei einigen
Druckern ist die "Druckersprache" halbwegs standardisiert (PCL und
Postscript), bei anderen Druckern gibt es Pseudostandards des
jeweiligen Herstellers (Epsons ESC/P) und viele Drucker, gerade
Tintenstrahldrucker oder GDI-Drucker sind völlig undokumentiert.

Somit stellen sich Dir zwei bzw. drei Probleme:
- Beschaffung eines USB-Host-Stacks, der auf Deiner Hardware
implementiert werden kann (auf der Philips- oder der Cypress-Website
finden sich möglicherweise einige Hinweise dazu), was aller
Wahrscheinlichkeit bedeutet, daß Dein Gerät komplett neu designt werden
muss, da ein leistungsfähigerer und mit mehr Speicher ausgestatteter µC
verwendet werden muss als bisher

- Beschaffung der Spezifikation(en) der anzusteuernden Drucker.

- Wenn Deine Marketingabteilung in der Lage ist, intellektuell zu
erfassen, daß nicht jeder USB-Drucker unterstützt werden kann, also
eine Einschränkung auf nur einige zu unterstützende Drucker getroffen
werden kann, dann bestehen halbwegs realistische Chancen.
Wenn aber die Marketingabteilung mit Argumenten analog zu "Wieso? An
meinem PC funktioniert doch auch jeder Drucker" kommt, dann ist das
ganze sowas von zum Scheitern verurteilt ...

Somit ist die Marketingabteilung bzw. der technisch inkompetente
Vorgesetzte das dritte Problem.

Viel Erfolg!

von Dieter (Gast)


Lesenswert?

Ist alles Quark. Lass Dich nicht irre machen.

1. Du brauchst keinen Host. Wo lernt man denn so einen Blödsinn?

2. Es ist kein hoffnungsloses Unterfangen.

Dein Ansatz ist im Prinzip schon richtig. Ein USB OTG-Chip ist ja exakt
dafür da, dass man keinen Host-PC mehr braucht.
Allerdings musst Du die USB-Printer-Klasse implementieren, weshalb Du
wohl nicht um das Lesen eines Teils der Specs herumkommst.

von Chrissy (Gast)


Lesenswert?

Dieter, kannst du da konkreter drauf eingehen? Hast du so etwas schon
erolgreich gemacht? Zeitaufwand?
Wie wird der USB-OTG Chip angeschlossen? Direkt an einem Uart, wie der
CP2102?
Kann mir noch nichts konkretes darunter vorstellen, was du meinst. Wär
schön etwas detaillierter.

Was ich bisher so gehört habe, deckte sich noch einigermaßen mit dem,
was ich mir selbst so überlegt hatte.

danke

von Chrissy (Gast)


Lesenswert?

@Dieter: Spezifiziere meine Frage. Klar einen host PC braucht man nicht,
aber ein usb host ist doch erforderlich, was doch eigentlich den von
Rufus erwähnten Aufwand nach sich zieht. Daher meine Frage, ob du das
schon ganz greifbar gebaut hast und über welches usb Wissen du
verfügst.
Bei Äußerungen wie 'geht eigentlich damit' schrillen bei mir die
Alarmglocken, da bin ich ziemlich konditioniert. Beim 'geht, aber du
wirst leiden...' von Rufus, hab ich das Gefühl, die Problematik ist
ernsthaft überdacht.

So wie ich beim überfliegen des Datenblattes des Cypress Chips
herausgefiltert habe, ist dieser Chip doch eher ein absolut
vollwertiger uc, mit entsprechend notwendiger Einarbeitungszeit,
Problemen, Ärger und Zeit...
Abgesehen davon, daß ich ja, wie erwähnt, vom usb an sich keine
intimeren Kenntnisse besitze, also wahrscheinlich auch Arbeit und
Recherche in dieser Richtung nötig sein wird. Ganz einfach, weil ich
zusätzlich zum Problem, mal eben einen neuen uc einzusetzen noch die
Hürde nehmen muss, mir erst mal klar werden müsste, WAS ich mit diesem
uc programmieren möchte/muss.

Verstehe ich die Angelegenheit grundfalsch?

Christian

P.S: Was hat es eigentlich mit diesen IDs auf sich, die man theoretisch
kaufen/mieten muss, nur bei den Brückenchips á la FTDI nicht. Würde das
bei meinem Problem zutreffen, daß so eine ID angeschafft werden muss,
wenn man einen host stellt?

von Markus (Gast)


Lesenswert?

Bei Linux sollte es da für alles Sourcecode geben: Für
USB-Hostcontroller, für den USB-Stack und auch eine ganze Menge
Druckertreiber. Damit sollte man den Aufwand ganz gut abschätzen
können.

Da die Sourcen allerdings meist unter der GPL stehen, solltest Du
vorher abklären, ob Du sie überhaupt verwenden kannst.

Markus

von Chrissy (Gast)


Lesenswert?

Bloß, hab ich wirklich viel von Linux Sourcen wenn ich gerade an meinen
uc im Gerät denke??

von Rufus T. Firefly (Gast)


Lesenswert?

@Chrissy:
Für die Implementierung eines USB-Hosts benötigst Du keine
USB-Device-/Vendor-IDs. Die sind nur erforderlich, wenn Du USB-Devices
herstellst.
Je nach dem, was für einen USB-Device-Controller Du verwendest, darfst
Du die Device-/Vendor-ID des Herstellers verwenden; das legt der
Hersteller des Bausteines im einzelnen fest.
Verwendest Du einen USB-OTG-Controller (das ist ein Hybrid aus einem
USB-Device und einem USB-Host mit eingeschränktem Funktionsumfang),
dann sind Device- und Vendor-ID spätestens dann erforderlich, sobald
die Devicefunktionalität des OTG-Controllers genutzt werden soll; das
Gerät also an einen anderen USB-Host angeschlossen werden soll.

Der Hinweis auf Linux-Sourcen ist so unpassend nicht; auf ausreichend
dimensionierten Controllern kann man ein embedded Linux oder ucLinux
laufen lassen, was einem sehr viel Softwareentwicklungsaufwand ersparen
kann.
Der Controller muss dann aber schon zwingend ein 32-Bit-Controller
sein, aber sowas gibt's ja auch - ich verweise da nur auf die
Controller mit ARM7-Kern. Der beliebte "Einsteiger-ARM" LPC2106 von
Philips scheidet hier als Grundlage leider gleich wieder aus, da er
viel zuwenig Speicher (sowohl RAM als auch ROM) mit sich bringt.
Wenn ich die Speicheranforderungen von ucLinux noch richtig im Kopf
habe, tut sich unterhalb 1 MByte wohl nicht viel.

von Gerd Laschinski (Gast)


Lesenswert?

Hallo Chrissy,

ich habe irgendwann mal das hier entdeckt:

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

ich habe keine Erfahrung damit, und dass die Firmware die
Version 0.1 hat, macht mich auch stutzig. Aber vielleicht
ist das was.

Gruß
Gerd

von Chrissy (Gast)


Lesenswert?

Scheidet leider aus. Ist ja schon ein Controller drauf... Und sonst wäre
das ja sonst mehr ein neu-design, anstelle eines re-designs. ;-)

Irgendwie sehe ich z.Zt. nicht wirklich Land, aber die Notwendigkeit,
sich der usb Thematik etwas intensiver anzunehmen. Hoffe da kommt mal
demnächst Zeit für.

Wie läuft es eigentlich mit Windows. Wenn ich auf solch einen usb-otg
Chip umsteige und den rs232 Umsetzer wegrationalisiere. Was ist dann
auf Windows Seite zu tun, um mit diesem device Daten auszutauschen.
Bisher läuft ja alles ganz prima mit den virtuellen com Treibern.
Ist das Ansprechen eines solchen, mit usb-otg ausgerüsteten, Gerätes
problemlos mit Windows möglich (via Standard apis), oder müsste ich
dann auf PC Seite noch einen Treiber erstellen, der sich mit meinem
otg-Chip gut versteht?
Denn dann würde das glaub ich wirklich meine Kompetenzen, bzw. den
Rahmen des vertretbaren sprengen....

von Rufus T. Firefly (Gast)


Lesenswert?

Der von Gerd zitierte Chip ist nicht uninteressant.

Das ist ein fertig programmierter ARM-Controller mit USB-Host-Stack,
der mit einem USB-Host-Controller von Philips verbunden werden muss
(einem ISP1160). Der ARM wiederum kann über eine serielle Schnittstelle
(oder SPI) mit der eigenen Hardware verbunden werden.

's wär natürlich schööön, wenn man an die Software 'rankäme, die in
eben jenem ARM implementiert ist ...

von Rufus T. Firefly (Gast)


Lesenswert?

@Chrissy:
Um ein USB-Device mit einem Windows-Host zu verbinden, benötigst Du
keinen OTG-Chip, ein USB-Device-Controller genügt hier vollends.

Sobald Dein USB-Device keine USB-Standard-Deviceklasse implementiert
(HID, Mass Storage oder was auch immer), musst Du Devicetreiber dafür
zur Verfügung stellen. Eine standardisierte windowseigene API, um mit
beliebigen USB-Devices ohne Devicetreiber zu kommunizieren, gibt es in
dieser Form nicht.
Allerdings gibt es verschiedene kommerzielle und auch freie generische
USB-Treiber, mit denen sich derartiges realisieren lässt. Ein Beispiel
dafür ist libusb-win32.

USB-Device-Controller gibt es oft als Bestandteil eines
Microcontrollers; Cypress beispielsweise vertreibt mit der Ez-USB-Reihe
einen um einen 8051 herum aufgebauten Controller (AN2131 etc.), einige
der neueren ARM-Varianten von Atmel haben USB-Device-Funktionalität und
auch Microchip stellt das mit einigen PIC-Varianten zur Verfügung.

Es gibt auch controllerlose USB-Device-Controller von verschiedenen
Herstellern, die also eigens mit einem anderen Microcontroller
verbunden werden müssen. Ein Beispiel ist der recht alte PDIUSBD12 von
Philips.

Mittlerweile gibt es auch zwei reine Software-Implementierungen eines
USB-Devices auf einem AVR ohne spezifische USB-Hardware, den
berühmten Igor-Adapter und eine andere, hier in den letzten Tagen
diskutierte Lösung aus Österreich.
Auf dem betroffenen AVR lässt sich allerdings nicht sehr viel
Funktionalität hinzufügen, da die Softwareemulation der USB-Hardware
doch so einige Anforderungen an den AVR stellt.

Insgesamt ist der Weg, ein eigenes USB-Device zu implementieren,
deutlich steiniger als die Nutzung eines vollständig fertigen
USB-Devices wie die verschiedenen FTDI-Varianten.

von Chrissy (Gast)


Lesenswert?

Das stimmt. Sieht wirklich nicht schlecht aus... Muss ich unbedingt im
Auge behalten, wenn der wirklich halten sollte, was er verspricht.

Mal schaun.

von Markus (Gast)


Lesenswert?

Die Linuxsourcen dienen zum einen als erster Anhaltspunkt, wieviel
Arbeit denn nun konkret dahintersteckt. Ist es eine Woche Arbeit oder
eher ein Jahr?

Zum anderen programmierst Du doch vermutlich in C und den Code zu
portieren ist wahrscheinlich einfacher als ihn komplett neu zu
schreiben. Du brauchst ja kein Linux auf dem Controller.

Markus

von Andreas (Gast)


Lesenswert?

@Markus:
Deine Argumente sind aber eher schwach. Er braucht doch nur den
Druckerteil und spezifische Treiber.
In Linux ist natürlich "alles" dabei, dazu ist das Ganze - für so
einen Spezialzweck völlig unnötig - auch noch in diverse Layer
aufgeteilt.

Als Anhaltspunkt zur Aufwandsabschätzung ist Linux sicherlich denkbar
ungeeignet. Höchstens als Einstieg in die USB-Programmierung, wenn man
gerade nichts anderes da hat.

von Marko (Gast)


Lesenswert?

wieso treiber?

es gibt doch tatsächlich noch Geräte, die DOS unterstützen.
HP z.B. baut noch tintenspritzer die das können.
meist kommen die mit centronix und usb-schnittstelle.

du kannst denen einfach direkt den klartext in ascii schicken
und mit CR zeilenumbrüche (chr(10) chr(13)) verpassen.

es gabda mal befehle wir dir>lpt1 oder dir>prn, die nix anderes
machten.
hab sogar n laserdrucker der das macht, keine sache.

nur die schrift ist dann halt druckerstandart, normalerweise times

von Markus (Gast)


Lesenswert?

Das können aber auch bei HP nicht alle Geräte, z.B. die relativ teuren
Business Inkjet(?) können das nicht.

von Marko (Gast)


Lesenswert?

mein 4000 TN Laser schon ;o)

von Danyo (Gast)


Lesenswert?

Hallo Chrissy!

Um nur einen Drucker anzusteuern, reicht zunächst einmal ein
ausschließlicher USB-Host-Controller, wie z.B. der ISP1160 von Philips,
welcher über einen 16Bit Datenbus mit einem uC kommunizieren kann. Ist
die Device-Funktionalität wirklich erforderlich, z.B. falls du mit dem
gleichen Gerät Messdaten an einen PC senden willst, würde ein
OTG-Controller in Frage kommen, wie z.B. der ISP1362. Wobei ich aber
dann eher den FTDI FT232BM empfehlen würde, da du dich beim
letztgenannten nicht mehr um die softwaremäßige Umsetzung von USB auf
Seriell kümmern musst und es eben auch schon frei verfügbare
VCP-Treiber gibt.

Da ich selbst gerade einen Host-Stack für den ISP1160 zur
Druckeransteuerung schreibe, kann ich dir erst einmal dessen Datenblatt
und das Buch "USB 2.0" von Jan Axelson empfehlen, welches zwar für die
Entwicklung von USB-Peripherie-Geräten (Devices) geschrieben wurde, aber
eine Menge Hintergrund-Infos zur Verfügung stellt. Die Linux-Sources
eignen sich nur bedingt, da sie (speziell der ISP1160-Stack) schlecht
kommentiert sind und sich einer großen Anzahl von Bibliotheken
bedienen.

Als anzusteuernde Drucker kann ich dir im Tintenstrahlbereich alle HPs
empfehlen, welche mit HP-PCL (Printer Command Language) angesteuert
werden; im Nadeldruckerbereich Epson mit ESC/P, welches dem PCL sehr
ähnlich ist; und im Laserbereich unterstützen fast alle Anbieter PCL
(siehe www.druckerchannel.de)! Canon und Lexmark z.B. sind GDI-Drucker,
die keinen eigenen Zeichensatz besitzen und ihn vom Betriebssystem (Win
oder Linux) beziehen, was etwas zu oversized wäre, um es zu
implementieren. PCL und ESC/P hingegen sind auf einem uC kein Problem!

Alles in allem ist es machbar! Du brauchst nur ne Menge Zeit!

Gruß Danyo

von Sebastian (Gast)


Lesenswert?

>Alles in allem ist es machbar! Du brauchst nur eine Menge Zeit!

hihi Du musst nur Deinem Chef klarmachen, was der Unterschied
zwischen einem USB Host und einem USB Device ist, weiterhin, dass Du 6
Monate Zeit brauchst, in denen Du Dich nur damit auseinandersetzt, und
dass ein Platinen-Redesign stattfinden muss, dann geht es. Wenn er dann
immer noch zustimmt, hast Du eine Menge bezahlte Zeit für Fortbildung.

Alternativ könnte man Ihm anbieten, doch eher Drucker mit paralleler
Schnittstelle zu verwenden. Die gibt es (noch) genug und die sind
einfacher anzusprechen. Um eine neue Platine, schätze ich, wirst Du
dann aber auch nicht herumkommen.

Gruß,
Sebastian

von Läubi (Gast)


Lesenswert?

>>Ich habe ein Problem - und zwar haben wir ein Gerät, das am PC an usb
>>angeschlosen wird. Zwecks Datenübertragung.

Warum sendet das "Gerät" nicht Steuersignale zum PC und dieser Druckt
dann (völlig relaxed) auf einem an den PC angeschlossenem USB Drucker
das gewünschte?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Einen USB-Host-Stack quasi "in Hardware" gibt es hier
http://www.ghielectronics.com/USBwiz.htm

Damit können folgede Geräteklassen angesteuert werden:

- HID USB class (Mäuse, Tastaturen etc.)
- Printer USB class
- Mass storage USB class

Letzterer Punkt ist für viele besonders interessant, weil das die
berühmten USB-Sticks oder USB-Festplatten sind.

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.