Hallo zusammen, Ich benötige mal wieder Eure Hilfe. Ich probiere nun schon seit Stunden zu verstehen wie ich den USB Stack von Microchip in mein Projekt implementiere. Mein Ziel ist es eine einfach Datenverbindung über USB herzustellen. Also eine serielle Schnittstelle zu emulieren. Als uC verwende ich einen dsPIC33EP256MU810. Die Microchip Libraries habe ich mir schon heruntergeladen. Jedoch finde ich mich darin überhaupt nicht zurecht. Es gibt nur fertige Projekte für alle möglichen Demo Boards. Nirgends finde ich eine Beschreibung was wo zu finden ist und wie die die Source Files aufgebaut sind. Meine Frage ist nun gibt es irgendwo eine Anleitung was alles konfiguriert werden muss und welche Files alle benötigt werden? Hat jemand von euch schon einmal eine USB Kommunikation mittels einem PIC realisiert? Über eure Hilfe würde ich mich sehr Freuen.
Also bei mir gab es nach der Installation der Libraries folgenden Ordner: \Microchip Solutions v2012-04-03\USB\Device - CDC - Serial Emulator\Firmware in dem ein komplett fertiges Projekt für deinen PIC drin ist. (der Pfad kann sich mit neueren Versionen der Libraries geändert haben.) Das kannst du dir mal anschauen, in der main.c alles PIC18/32 Sach löschen, damit das für dich relevante ersichtlich wird. Ansonsten um mal die grundlegenden Grundlagen zu verstehen fand ich diese Anleitung zu einem Demo-Board sehr gut: http://ww1.microchip.com/downloads/en/DeviceDoc/41356B.pdf worin dir die Grundlagen der USB Firmware, deren Aufbau und der Aufbau von USB generell erklärt wird. Natürlich nicht für deinen PIC, aber es ist am Ende ja eh überall das gleiche.
Vielen Dank. Dieses PDF hat mir schon ziemlich geholfen. Ich habe das Projekt nun einmal übernommen. Jedoch bekomme ich immer Unknown Device im Geräte Manager von Windows. Wahrscheinlich ist der Interne Quarz doch zu ungenau für eine USB Kommunikation.
Nach Spezifikation ist er der RC Oszillator in einigen PICs zu ungenau. (gibt spezielle die einen genaueren RC Oszillator wegen USB haben) Praktisch hatte ich bisher aber noch keine Probleme (PIC24FJ256GBxxx) bei normalem USB Betrieb (also nicht Full Speed). (Die Option auf einen Quarz bei fertigen Platinen würde ich trotzdem offen halten, man weiß ja nie) Du musst bei CDC aber noch einen speziellen Treiber installieren, hast du den installiert? Willst du das umgehen, musst du auf HID umsteigen, dafür verlierst du dann halt die Serielle Schnittstelle und somit den Komfort ein normales Terminal zu verwenden. Auch sehr gut und umfangreich, in dem auch letzteres (HID zum debuggen) erklärt wird: http://www.engscope.com/pic24-tutorial/14-1-usb-an-introduction/
Ja leider habe ich nicht sehr genau hin geschaut als ich das Board gelayoutet habe und jetzt im nachhinein einen Quarz zu montieren ist nicht so praktisch. Ich habe jetzt noch einmal ein bisschen mit den Oszillator Settings herumgespielt und jetzt geht gar nichts mehr. Wie hast du den die passenden 48MHz für das USB mit dem internen 7.37MHz Oszillator hinbekommen? Ich habe nun schon viele PLL Multiplier und Divider durchrechnet und liege meistens ziemlich weit daneben. In den meistens Beispielen wird ein 8MHz Quarz verwendet. Ja der Treiber sollte eigentlich installiert sein. Einen Treiber zu installieren ist eigentlich kein Problem. Mein Ziel ist es schlussendlich Bilder vom PC aus auf das Display welches an dem PIC hängt zu senden. Im Moment funktioniert dies über UART. Jedoch ziemlich langsam. Wenn es keine allzu grosse Sache ist mittels C# Daten an ein HID Gerät zu senden überlege ich mir später vielleicht noch einmal umzusteigen. Vorerst wäre ich aber Froh wenn überhaupt irgendeine Kommunikation funktionieren würde. Das Tutorial sieht sehr viel versprechend aus. Da werde ich mich aufjeden Fall auch noch durcharbeiten.
Hallo, ich habe das für einen PIC24FJ128GC006 durchgezogen. Die Makros und #ifdefs in den Microchip examples sind allerdings wirklich schlimm... Im Endeffekt würde ich mit dem CDC - USB-Seriell "Basic example" nehmen. Das Projekt enthält schon fast alles was man braucht und nicht allzu viel mehr. Am besten speichert man dann das Projekt "Basic Example" als "Package" weg, das resultierende Zip hat alle notwendigen Files drin. Die sind nämlich ganz gut verstreut, ich habe die ganzen Files aber lieber im Projektordner. Dann ein leeres Projekt für deinen Controller erstellen und alle Files dem Projekt hinzufügen und die nötigen Header inkludieren -dazu mit dem Microchip Projekt vergleichen. Am besten vorerst auch main.c aus dem Microchip Projekt übernehmen. Danach muss man einen header "HardwareProrfile dsPIC33EP256MU810.h" erstellen, mit einer Vorlage von Microchip. Wichtig sind vor allem die Clockdefines. Die usb_config.h muss man auch anpassen vor allem #define USB_INTERRUPT ist sinnvoll, das mach das ganze Interruptgesteuert und erspart lästiges pollen. Die wichtigsten Funktionen sind: USBDeviceAttach(); : meldet das Device am PC an ProcessIO(); : der IO-Prozess für die seriellen Daten Das ist das woran ich mich so adhoc noch erinnern kann. Eventuell hilft dir das weiter. @Frank M.: Es gibt Lösungen für USB 2.0 ohne Quarz, z.B. den oben genannten PIC24FJ128GC006. Der verwendet eine Taktregeneration - der interne RC wird über USB nachgeregelt. Das machen auch andere Hersteller so (ST, SILABS).
Dominic A. schrieb: > Ja leider habe ich nicht sehr genau hin geschaut als ich das Board > gelayoutet habe und jetzt im nachhinein einen Quarz zu montieren ist > nicht so praktisch. > Ich habe jetzt noch einmal ein bisschen mit den Oszillator Settings > herumgespielt und jetzt geht gar nichts mehr. Wie hast du den die > passenden 48MHz für das USB mit dem internen 7.37MHz Oszillator > hinbekommen? Ich habe nun schon viele PLL Multiplier und Divider > durchrechnet und liege meistens ziemlich weit daneben. In den meistens > Beispielen wird ein 8MHz Quarz verwendet. Ich weiß nicht inwieweit du es für den dsPIC übernehmen kannst aber so sieht bei mir die Konfiguration aus:
1 | //******************************************************************************
|
2 | // Configuration Bits
|
3 | //******************************************************************************
|
4 | #define PLL_96MHZ_OFF 0xFFFF
|
5 | #define PLL_96MHZ_ON 0xF7FF
|
6 | |
7 | // Using the FRC (8MHz) // NOTE: USB operation is not guaranteed
|
8 | _CONFIG2(IESO_OFF & PLL_96MHZ_ON & PLLDIV_DIV2 & FNOSC_FRCPLL & POSCMOD_NONE & IOL1WAY_OFF) // Primary osc disabled, FRC OSC with PLL, USBPLL /2 |
9 | _CONFIG1(JTAGEN_OFF & ICS_PGx2 & FWDTEN_OFF) // JTAG off, watchdog timer off |
Und ich sehe gerade, ich nutze USB_FULL_SPEED ohne Quarz.
@Dingens23 Wenn ich das die Basic Demo nehme und ein Package mache sind aber auch alle möglichen Files irgendwie in diesem Package verstreut. Ich habe einfach ein ziemliches Problem exakt 48MHz für das USB Modul hinzubekommen. Die von euch benutzens PICs haben ja immer schönen einen internen 8MHz Oszillator. Mit diesem ist es ja recht einfach 48MHz zu bekommen. Meiner jedoch hat einen 7.37 MHz Oszillator. Dieser lässt sich zwar ziemlich stark über das OSCTUN Register Trimmen aber nie auf einen schönen geraden Wert. Was haben sie sich dabei gedacht? @Frank Ich dachte die Register Einstellungen für den Quarz: Also soetwas in dieser Art:
1 | PLLFBD = 38; /* M = 60 */ |
2 | CLKDIVbits.PLLPOST = 0; /* N1 = 2 */ |
3 | CLKDIVbits.PLLPRE = 0; /* N2 = 2 */ |
4 | OSCTUN = 0; |
5 | |
6 | ACLKCON3 = 0x24C1; |
7 | ACLKDIV3 = 0x7; |
8 | |
9 | ACLKCON3bits.ENAPLL = 1; |
10 | while(ACLKCON3bits.APLLCK != 1); |
Ich habe am Quarz direkt, außer den geposteten configuration bits, nichts eingestellt. Vielleicht hilft dir das weiter: http://www.microchip.com/forums/m524417.aspx Ansonsten hilft wohl nichts und du musst es mal mit einem externen Quarz probieren um wenigstens eine Fehlerquelle mal ausschließen zu können. Im Notfall eben direkt an die Beinchen löten wenn dein Gehäuse vom PIC noch nach außen liegende Beinchen hat.
Hallo, dass die Files auch im zip verstreut sind, stimmt schon. Man kann aber das Package entzippen (in einen Ordner) und mit dem Explorer nach allen *.c und *.h - files suchen. In dem Fall hat man alle nötigen Files und keine Überflüssigen. Ich könnte auch ein Beispielprojekt hochladen, bin mir aber nicht sicher, ob man einzelne Teile aus der MAL einfach so anpassen und hochladen darf. Weiß hier jemand näheres?
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.