Hifle gesucht: USB-Kommunikation PIC18F4550 <-> PC



  • Naja, bei mir geht's um GPS, es ist im Prinzip für Segelschiffe, da die ja Schreiber haben müssen, da wird dann ein Gerät über USB angeschlossen, das doe GPS-Daten vom Schiff erhällt und diese Daten auswerten und abspeichern... dazu noch eine Oberfläche und das war's, aber ich weiß nicht, wie ich den USB-Anschluss überhaupt anspreche, darin liegt das Problem, aber auch ich freue mich auf eine gute Zusammenarbeit 😉

    Achja, eine Frage noch: Mit welchen Compiler arbeitest du?

    Hast du ICQ? - Meine: 170060601
    Email? - Meine: nico@cpp-club.net

    - Windoof



  • hi,

    @SoaD85

    normalerweise brauchst Du einen USB Device Treiber, der über den PnP Vorgang und ein INF File installiert wird. Der Treiber kommuniziert über irgendwelche Pipes (wahrschein Controlpipe) mit deinem Controller.

    Um vom User Mode aus auf den USB Chip zuzugreifen muß der Treiber einige Device Io Control Aufrufe bereitstellen.

    @windoof
    Ein GPS Gerät mittels USb wird in der Regel im System als Serieller Treiber bereitgestellt. Auf USB Ebene gibt es ein definiertes Interface für diese Art
    von Treibern (CDC siehe www.usb.org). Dieses Interface muß von einem USB Treiber dann als Serielles Interface für den User Mode abgebildet werden.

    Für Leute vom Fach Trivialprobleme 🙂

    Für Euch wird es schon schwer mittels DDK einen Device Treiber zu schreiben. Den dann auch noch zu Debuggen (Es gibt ja geile Bluescreens) geht wahrscheinlich doch über Euer Wissen hinaus.

    Es gibt ein Projekt auf Source Forge der den ganzen USB Kram in den Usermode
    zieht. Bzw noch weitere Projekte die dann C# darauf aufsetzen. Das könnte schon eher ein Ansatz für Euch sein.

    elli



  • Hi

    @SoaD85

    ich würd euch/dir auch dringend davon abrahten selbst ein usb device zu entwickeln. Steckt ein ganzen haufen software allein schon USB Device seitig drinnen. Wenn der Baustein nicht schon jede menge HW seitig mitbring bzw funktionierende SW dabei ist macht das wirklich keinen spass. USB enumeration, Device klassen, .... auserdem fehlt euch dann die notwendigen analyze tools um fehler zu finden wenn das usb protokoll abstürtzt. (sollche analyse tools leigen im 4 bis 5 stelligen euro bereich) und ohne ist das ein stochern im heuhaufen.

    für spielereien mit usb gibts einen IOWarrior, ganz nettes teil. ist glaub ein Pic mit usb und kostet nicht die welt. Damit lassen sich IO pins ansprechen, LCD zeilen displays anschliessen und ein IR empfänger ist glaub auch dabei.

    und wieso sollte man einen eigenen Windows treiber entwickeln wollen bzw müssen. normalerweise reichen die standart Treiber für Windows aus wenn du nicht gerade eine neue USB Klasse erfindest ( aber wozu das. das meiste ist doch schon abgedeckt, bzw die vorhandenen reichen für euere anforderungen locker aus ) das einzige was du machen must ist in der inf datei die verbindung zwischen deiner usb Vendor ID und USB Device ID mit den notwendigen Treiber herzustellen. (so hab ich das zumindestens bei unserem projekt verstanden). und danach kanst du dann über die windows seitig vorhandenen schnistellen mit dem geräht kommuniziehren, normalerweise geht das ganz normal über HANDELS nur haben die dateinamen ganz hässliche namen \.\HDC???? Normalerweise ermittelt man die über eine der folgenden schnistellen Setup API und HID API

    gruss Termite



  • Windoof schrieb:

    Naja, bei mir geht's um GPS, es ist im Prinzip für Segelschiffe, da die ja Schreiber haben müssen, da wird dann ein Gerät über USB angeschlossen, das doe GPS-Daten vom Schiff erhällt und diese Daten auswerten und abspeichern... dazu noch eine Oberfläche und das war's, aber ich weiß nicht, wie ich den USB-Anschluss überhaupt anspreche, darin liegt das Problem, aber auch ich freue mich auf eine gute Zusammenarbeit 😉

    Achja, eine Frage noch: Mit welchen Compiler arbeitest du?

    Hast du ICQ? - Meine: 170060601
    Email? - Meine: nico@cpp-club.net

    - Windoof

    Hallo!

    Die USB-Schnittstelle kannst du unter einem System >= Win98 nicht mehr direkt ansprechen, da musst du schon an den Treiber ran (ohne WinAPI geht wohl nichts)

    Bei meinem Projekt müsste ich den Drucker an der USB-Schnittstelle ansprechen.
    Wäre auch an einer Zusammenarbeit interessiert.
    Mail: jakob@cpp-club.net

    MfG CSS



  • Hi CSS

    um einen Drucker anzusprechen gibt es eine entsprechende Schnistelle unter Windows. Direckt auf usb must du normalerweise gar nicht runter gehen.

    sollte es keinen treiber geben, gibt es meines wissens 2 möglichkeiten.
    a. Treiber selber implementieren ( aufwendig da hier einiges an technologie dahintersteckt Printprovider, Spooler, ..... )
    b. über usb direckt ansprechen.
    beides wird aber ohne informationen des druckerherstellers nicht so ohne weiteres gehen. Wie müssen die daten aussehen damit der drucker sie versteht.

    @windoof.

    stöpsel den gsp emfänger doch mal an deinen windows rechner und schau mal in Gerähtemänager nach was sich da verändert. (Start/einstellungen/Systemsteuerung/system/Hardware/Gerähtemanager) Sollte da unter Anschlüsse eine zusätzliche com Schnitstelle auftauchen, kanst du dein gps geräht ganz einfach wie ein serielles mit dem NMEA protokoll bzw Herstellereigenen auslesen. Dort laufen dann dauernd datensätze ein über gps position, Signalgüte, Uhrzeit, Datum,.......

    Auserdem hat MS mitlerweile 3 bis 4 verschiedene Treiberformate seit windows 95/98 NT4 aus der taufe gehoben die teilweise schon wieder veraltet sind. sprich XP treiber laufen nicht under win98 bzw NT4 und umgekehrt NT4 treiber nicht unter xp und 98 und 98 treiber nicht unter xp und NT4. und was Longhorn mit sich bringt weis ich nicht.

    gruss Termite

    ICQ 52252754



  • @CSS: Kein Problem, wir können zusammenarbeiten. Je mehr Leute desto schneller geht's 😉

    @Terminate & elli: Das Gerät ist schon produziert, ist in Serie gegangen, kommt auch nicht von mir bzw. der Firma, für die ich das machen soll und Treiber ist höchstwahrscheinlich auch schon vorhanden... ich hab das Gerät nicht, müsste ich mir schicken lassen, k.a. wie lange das dauern würde... aber ich hab Zeit *g*

    @SoaD85: Wie wär's, wenn wir eine kleine Community dazu einrichten? - Ist schließlich ein nicht gerade unaufwendiges Projekt, und vielleicht kommen noch mehr Leute, die daran mitarbeiten möchten...

    Und wenn wir etwas basteln, bin ich dafür, dass wir das Kostenfrei und OpenSource machen, da ich selbst fast nur OpenSource verwende... ^^ und viele andere auch...

    - Windoof



  • Hi

    @Windoof. besorg dir mal das Geräht bzw die dazugehörigen Datenblätter und Dokumentation. Das ist doch keine grundlage für eine vernünftige Softwareentwicklung. ggf anrufen und nachfragen.

    Ich würd fast meinen allterwertesten darauf verwetten, das das geräht über usb eine serielle schnitstelle abbildet über die dann NMEA gefahren wird. Denn wozu haben die den NMEA erfunden wens keiner nutzt.

    ich wünsch euch viel spass noch mit USB. Ich selber kämpf grad mit nem USB storage device das den USB stack abschiest. ist jetzt nur die frage ist das device schuld oder Windows zu blöde? Ist auch nicht gerade eine altägliche aufgabenstellung die den fehler produziert.

    gruss Termite



  • Hi leutz
    fals es jemanden interessiert habe schon einmal eine USB-Lüftersteurungs-platine entworfen und das zugehörige programm entwickelt.

    Ich kann euch den I/O Warrior 40 nur emfpeheln.

    Der Chip hat 40 pins davon sind 32 je nach wahl ein oder ausgänge.
    Zu diesem Chip gibt es code ein SDK wo alles drin enthalten is was man braucht um ihn unter windows anzusteuern.
    Es liegen die nötigen header datein usw in c/c++ und delphi für windows, linux, MAC-OS vor. Leider liegt kein Layout dabei was man benötigt um nur die USB-Schnitstelll aufzubaun.
    Diese könnte ich aber bei intresse euch zuschickn. Der einzige nachteile bei diesem Chip sind der Preis von 20€ und das er mit einem 2pin 6mhz Kermaik-Resonator betrieben werden muss und nicht mit einem 6mhz quarz wie es in der anleitung und auf den schatlplänen heist.
    An dieser Stelle is mein Projekt gescheiter da ich dies erst 2 tage vor projekt abgabe termin erfahrn habe und den Resonator net mehr rechtzeitig bekommen konnte.
    Wenn für diesen chip entscheiden sollte helfe ich gerne den diesen chip kenn ich nun nach 8 wochen arbeit mit ihm 😉 .

    mfg Beelze

    link: http://www.codemercs.com/IOWarriorD.html



  • Ich würde für ein einfaches und günstiges Projekt den FT245BM von FTDI empfehlen, gibts mitlerweile bei Reichelt für 6,50 EUR und man braucht sich um Treiber nicht zu kümmern, einfach nen Mikrocontroler an den 8bit Port anschließen und fertig.
    Einziger Nachteil: Man hat 2 Chips auf dem Board.

    PS: PID's gibts von FTDI gratis dazu!



  • Tja, die Sache scheint sich in die Länge zu ziehen.

    @Windoof: Das mit dem FTDI-Chip habe ich mitbekommen, ist ein recht gutes Produkt, was ich so aus den Datenblättern erfahren habe, ist mir aber zu teuer Microcontroller und FTDI-Chip zu kaufen.
    Das mit Open-Source geht von mir aus klar, glaube kaum dass ich was bahnbrechendes geschaffen habe, wenn ich über USB kommuniziere, das zu schützen gehört. Haben schon zu viele gemacht.

    @Termite: Der PIC18F4550 (und ähnliche) hat eine vollständig integrierte USB-Hardware, die das gesamte Protokoll abarbeitet und dann in einem Ringspeicher, sofern ich das richtig verstanden habe, die Daten in 8Bit-Format ablegt.
    Das Problem liegt nicht beim Assembler-Code für den Pic, eher bei der Einbindung des ganzen unter Windows (vorerst mal), dass ich mit den Daten auch was tun kann.



  • Hi

    ok ich hab das Datenblatt nicht genau angeschaut. ich weis nur soviel, das USB nicht ganz einfach ist, und sagen wir mal aus mehreren protokollschichten besteht. Das die unterste in HW erledigt wird ist klar. per software geht das leider nicht. ( Eventsauslösen wenn datensätze für das geräht da sind, wenn ein busreset ausgelöst wurde,...) nur drüber sind noch weitere schichten. Lowspeed / Highspeed. Classenlayer HID, Masstorrage, DFU,...(sogenau kenn ich mich da nicht aus. ich weis nur das da ein ganzer wust an datenpakete über den USB bus geht.)

    Wo wird deine Vendor und deine Produckt ID eingetragen? muss ja dann ein Register sein.
    Wo die Seriennummer, Produktbezeichnung und Hersteller (zwar meist optional. wird aber trotzdem bei machen Klassen gefordert) kann ja wohl nicht sein, das alle gerähte die bezeichungen des chipherstellers übernehmen müssen ( was auch rein lizenztechnisch nicht gehen sollte. Wie soll der pc 2 verschiedene gerähte von verschiedenen Herstellern mit dem gleichen chip Treibertechnisch unterscheiden können?)

    Schau dir den USB part noch mal genau an. Besorg dir die sorcen vom Demobord (gibt glaut ein Demobord für die Prozessor familie siehe datenblat 17.10) und schau die dir mal genau an. ggf gibt das mehr aufschluss.

    Und Protokollfehler auf dem USB bus zu tracen ist kostspielig. Seriell ist dagegen einfach da braucht man ja nur ein passendes kabel, einen PC und Software.

    gruss Termite



  • @Termite: Ja seriell ist mir schon klar, das das auch klappt. Mich reitzt aber die Herausforderung an USB und deshalb werde ich nicht locker lassen.
    Es braucht noch eine weile, bis ich alle nötigen Resourcen wie Sample-Chips und ein Buch, das ich bestellt habe, bekomme. Aber dann gehts an die Arbeit und ich werde dir gerne die Fortschritte mittteilen, falls du interessiert bist.

    mfg
    SoaD85


Anmelden zum Antworten