Forum: Mikrocontroller und Digitale Elektronik Verbindung zwischen eigener Hardware <->PC


von Timo (Gast)


Lesenswert?

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

von Sebastian (Gast)


Lesenswert?

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.

von Tobi (Gast)


Lesenswert?

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

von Timo (Gast)


Lesenswert?

@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

von Sebastian (Gast)


Lesenswert?

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?

von Christof Krüger (Gast)


Lesenswert?

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.

von Sebastian (Gast)


Lesenswert?

@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?

von Timo (Gast)


Lesenswert?

@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ß!

von Christian Schifferle (Gast)


Lesenswert?

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

von MNR (Gast)


Lesenswert?

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

von Matthias (Gast)


Lesenswert?

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

von Andreas Auer (Gast)


Lesenswert?

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

von Timo (Gast)


Lesenswert?

@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.

von Martin S. (Gast)


Lesenswert?

"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

von Matthias (Gast)


Lesenswert?

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

von MNR (Gast)


Lesenswert?

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

von Tobi (Gast)


Lesenswert?

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