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
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 :)
>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.
@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
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
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.
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
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.
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?
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.
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!
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.
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
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.
>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
PS: Ich glaube kaum, dass die Hersteller ihr USB-Protokoll rausrücken.
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!
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.
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
@USBwiz: Ein bischen pervers ist das ja schon, einen ARM als Sklaven für einen AVR arbeiten zu lassen...
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...
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
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.
@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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.