Hi, Ich habe schon lange immer mal wieder das Problem das ich meine selbstgebaute Hardware gerne mit dem PC verbinden würde aber nicht weis wie. Ich habe zwar schon recht fortgeschrittene Kentnisse in C++ Programmierung - Vererbung und objecktorinetierte Programmierung sind keine Fremdworte mehr und dennoch: wenn ich mir überlege was ich noch nicht kann bin ich wohl eher blutiger Anfänger. Meine Frage: Kann man sich die Kentnisse über die Hardwarenahe Programmierung und das Schreiben von eigenen Treibern selber aneignen? Bücher? Webseiten? Sonstige Quellen? Für ein Studium fehlt mir die Zeit, die Lust und das Geld. ;) Nochwas: Für alle die nun sagen ich sollte es an den Druckerport hängen, der ist nicht so schwer zu Programmieren oder dergleichen denen sei gesagt das ich zusammen mit einem Bekannten ein komerzielles Projeckt geplant habe. Das Gerät soll als Drucker arbeiten und unter den Windows Programmen als solcher erkannt und angesprochen werden. Es sollte also einen professionellen Charakter haben. Gruß Timo
Erst mal: Welches Interface möchtest du denn verwenden? Zu deinem Zweck fallen mir eigentlich nur ein: - LPT: Ist supereasy. Einfach die Zeichen der Reihe nach hinschicken, sowas kann man in einer paar Stunden programmieren. - Seriell (RS232): Auch recht einfach, weil die meisten µCs einen Hardware-USART haben und es auf dem PC für jede Programmiersprachen schon fertige Bibs gibt. - USB: Ziemlich schwierig, würde ich nur im Notfall verwenden. µC-seitig wohl noch sehr exotisch. - Firewire: Theoretisch wohl möglich, aber ich habe noch nie eine µC-Implementation gesehen.
usb geht auch: du nimmst einen fertigen usb ic und einen generischen treiber. da gibts so ein os projekt, dass sowas entwickelt. sollte als basis oder 'inspiration' recht gut sein. wenn du interesse hast schau ich mal ob ich den link noch hab. sonst mal sourceforge nach generic usb driver durchsuchen
@Sebiastian: Danke für die schnelle Antwort! Aber wenn du sagst LPT ist sehr einfach zu Programmieren würde mich interessieren wie? Das Ausgeben der Daten an den LTP von einem selbst geschriebenen Programm aus kann ich mir noch einigermasen einfach vorstellen aber wie sieht es aus wenn die Daten von unterschiedlichen Programmen wie z.B. Word oder Eagle an mein Gerät gesendet werden sollen. Wie erreiche ich es das Windwos mein Gerät als neue Hardware erkennt und es in die Liste der verfügbaren Drucker aufgenommen wird und u.u. mein selbstgeschriebener Treiber installiert wird und... und...? Ist das auch innerhalb einer Stunde so einfach zu Programmieren? Das sind alles Fragen auf die ich gerne irgendwo mal kompetente Antworten finden würde. Prinzipiell wäre ich erstmal mit dem Anschluss meines Gerätes an den Druckerport (LPT) oder seriell vollkommen zufrieden. Gruß Timo
Hm, bis jetzt hatte ich noch kein Interesse an USB, weil ich meinen µC problemlos über RS232 angebunden habe. Aber was neues kann ja nie schaden ... :-) Hast du mal eine Typenbezeichnung von so einem USB-IC zum googeln?
Für sowas brauchst du das Windows DDK (Driver Development Kit). Geh auf die Seiten von Microsoft und quäle mal etwas deren Knowledge Base. Da findet man eigentlich zu jeden Treibertypen entsprechende Beschreibungen, die das Treibermodell erläutern. PS: Nimm dir viel Zeit. Es ist alles nicht wirklich einfach, wenn man es noch nie gemacht hat. Wollte mich auch mal damit befassen und einen Audio-Treiber schreiben, habe es dann aber doch gelassen, da sich der Aufwand in meinem Fall nicht gelohnt hätte.
@Timo: Sorry, habe deinen Text aus Versehen nicht zu Ende gelesen. Du möchtest also eine PnP-Erkennung für deinen "Drucker"? Hm, das ist AFAIK unmöglich, da LPT-Drucker schlichtweg keine PnP-Geräte sind. Ich könnte mir auch nicht vorstellen, wei so etwas bei dem parallelen LPT-Port realisiert werden soll. Sprich: Parallele Drucker musst du immer per Hand installieren. Mit "einfach" meinte ich, dass du eben einfach ein Zeichen an den Port schickst und es vom µC passend annimmst. Aber du hast Recht, Word klarzumachen, dass es das tun soll, ist schwierig. Da müsstest du evtl. von einem anderen Ende ansetzen: Postscript-Emulation auf dem µC und von Word aus einfach an einen Standard-Postscript-Drucker drucken?
@Christof: Danke für deinen Tip. Auf der Suche nach einem Buch zu diesem Thema bin ich auch schonmal über das Windows DDK gestolpert. Wenn ich da anfange zu lesen habe ich immer das Gefühl mitten in eine völlig neue Welt zu stoßen. Giebt zwischen den "Grundkentnissen" von C++ und der Treiberprogrammierung noch eine Zwischenstufe die man sich aneignen sollte? Zudem bin ich eher der Typ der sowas lieber in Buchform am Schreibtisch liest, giebt es da noch eine andere Möglichkeit (Bücher?) als das ganze auszudrucken? Danke, Gruß!
Sofern du einen PC hast, welcher noch über eine serielle (RS232) Schnittstelle verfügt, dann ist es bestimmt am einfachsten, diesen Weg für die Verbindung zu nutzen, denn 1. Hat der Controller diese Schnittstelle in der Regel schon drin und 2. Mit entsprechenden Libraries oder DLL's lässt sich die serielle Schnittstelle auch aus Anwendungsprogrammen wie Word oder Access recht einfach ansteuern. denn 3. Ist der Empfang von Daten über die Parallele Schnittstelle auf dem PC doch schon mit erheblichem Programmieraufwand verbunden (wie du ja selber auch schon bemerkt hast, von wegen DDK etc.). Gruss Christian
Das ist ja alles recht wirr. Was genau willst du denn eigentlich mit dem PC verbinden? Was soll denn der PC dann machen? Das Thema DDK kannst du m.E. abhaken. Super komplizierte Sache. Und dann noch am Rande: schreibt man "gibt" mittlerweile wirklich mit "ie"? Kenne mich mit dieser Falschschreibreform nicht so aus, deshalb nur interessehalber mal nachgefragt. Gruß Matthias
Hi IIRC wurden parallel Drucker bereits von Windows98 beim booten erkannt. Wird wohl irgend einen Mechanismus geben der das ermöglicht (Windows stellt Anfrage auf Druckerport, Drucker antwortet mit seiner Modellbezeichnung) Braucht wohl EPP oder ECP oder ähnlichen Hack der parallelen Schnittstelle. Wenn du schon eigene Treiberentwicklung angehen willst würde ich gleich auf eine Schnittstelle setzen deren Tod nicht schon abzusehen ist. Also USB. Im DDK solls dazu angeblich ganz gute Beispiele geben. Auf der µC-Seite wirds dann entweder ein µC mit USB-Device oder ein extra Chip wie PDIUSBD12 von Philips. Matthias
Hi. Ich hab zwar keine Erfahrung mit der Implementierung der Treiber in Windows, damit man sie dann via Word oder anderen Windows Progs verwenden kann. Da aber weiter oben im Thread ein Beitrag ist, der behauptet, dass die serielle Schnittstelle in derartige Programme leichter zu implementieren ist, hätte ich folgenden Ansatz: Anstatt des Philips USB Chips auf uC Seite würde ich den FTDI Chip FT232BM oder FT245BM vorschlagen. Der Vorteil ist, dass es von FTDI fertige Windows Treiber gibt. Einer dieser Treiber stellt dir einen virtuellen COM Port (Serielle) zur Verfügung. Und wenn jetzt noch jemand weiß, wie sich diese serielle Schnittstelle auf leichtem Weg in die Windowsprogramme einbinden lässt, dann wars das!! Außerdem hättest bei USB auch noch den Vorteil, dass beim Einstecken des Gerätes, dieses auch gleich erkannt wird und die Treiber installiert werden können! mfg Andreas -- Andreas Auer aauer1 (at) sbox.tugraz.at Student of Telematics http://home.pages.at/aauer1 Graz, University of Technology
@Christian: Danke für deine Ideen! Jedoch war die Sache mit dem Word eher als Beispiel gedacht. In der Praxis wird es eher eine CAD Programm sein wie PROEE. Jedoch sollte es so sein, dass der Drucker mit jeder beliebigen Windows Software anzusprechen ist. @MNR: Wir haben begonnen einen DIN A2 Drucker zu entwickeln und zu bauen welcher für das ausdrucken von Plänen und Häusergrundrissen genutzt werden soll. Die Hardware funktioniert schon vielversprechend gut, getestet mit einem selbstgeschriebenen Testprogramm. Nun jedoch soll der Drucker wie jeder Handelsübliche auch unter Windows installiert werden können mit allen gewohnten Eigenschaften: Aufgelistet in der Systemsteuerung, von jedem Programm als Drucker auszuwählen und so weiter. Ich denke wir werden einige Interesennten haben und ihn in kleinen bis mittleren Stückzahlen verkaufen können (Geplant 20-50). Das bedutet das der Kunde einiges erwarten wird was die Bedienung angeht und daher sollte er sich in der Installation wen möglich nicht von einem HP Deskjet oder Konsorten unterscheiden. Ich denke nun, auch wenn du es für nahezu unmöglich hälst, dass ich um DDK nicht herum kommen werde. @Matthias: USB wäre natürlich schon eine feine Sache! Da DDK vermutlich so oder so schwer wird es sich nichts nehmen ob ich den LPT oder USB nehme. Daher werde ich mich mal nach den USB Beispielen umsehen, danke für den Tip. Gruß Timo PS: gibt schreibt man natürlich nicht mit "ie" jedoch lässt meine Rechtschreibung sehr zu Wünschen übrig was mir von Zeit zu Zeit auch recht unangenehm ist, jedoch wüsste ich nicht, wie ich das noch ändern könnte.
"IIRC wurden parallel Drucker bereits von Windows98 beim booten erkannt. Wird wohl irgend einen Mechanismus geben der das ermöglicht (Windows stellt Anfrage auf Druckerport, Drucker antwortet mit seiner Modellbezeichnung) Braucht wohl EPP oder ECP oder ähnlichen Hack der parallelen Schnittstelle. " Tja, es ist erst mal kein "HAck" sondern "normale" Windows Funktion. Je nach vorhandenem Interface (Standard-Paralleport, enhanced oder exteded Interface besteht de Möglichkeit, Druckdaten "unidirektional" oder "bidirektional" zu übertragen. Auch die Schnittstellengeschwindigkeit via ECP ist recht akzeptabel Wennd as ganze professionell sein soll, dann kommt man wohl um die Microsoft Doku etc. nicht drum rum. Alles andere mit "parallelport ist super easy, man braucht ja nur ein port zu programmieren" ist halt quick and dirty hack, und man kommt da schneller in (Interface und kompatibilitäts) Probleme als einen lieb ist
Hi @Martin S. das mit dem Hack war darauf bezogen das die ursprüngliche Hardware des IBM-PC nicht dafür ausgelegt war irgendetwas am Parport zu erkennen. Man hat dann einen Änderung vorgenommen die zwar funktioniert aber nicht das gelbe vom Ei ist da alte Geräte durch die automatische Erkennung evtl. gestört werden. Sie waren ja nicht darauf vorbereitet das da beim hochfahren "irgendwas" auf dem Parport passiert. Das ist für mich ein Hack. USB war dafür von vorneherein entwickelt. Deswegen ist es schlicht die bessere alternative wenn man eh schon einen Treiber schreiben muß. @Andreas Ich habe absichtlich nicht den FTDI-Chip empfohlen da man den wohl auch nur über Umbiegen der DLL-Version des Treibers "irgendwie" als Drucker nutzen kann. Würde ich nicht tun wollen. Wäre aber eine Alternative. Matthias
Ich verstehe. Und ist das wirklich ein Drucker (wieviel dpi) oder ein Plotter (Stifte)? Wenn das ganze Pixelorientiert ist, ist seriell m.E. ohnehin etwas langsam. Gruß Matthias
hier etwas was die usb treibe entwicklung stark vereinfachen könnte: http://libusb-win32.sourceforge.net/ und hier viele fertige usb module: http://www.beyondlogic.org/usb/usbhard.htm am besten mal in die datenblätter der verwendeten usb ic's schaun ob da steht wie die mit dem host kommunizieren. dann könnte man o.g treiber anpassen
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.