Hi. Ich bin grad bei mich in die USB Schnittstelle des PIC 18F4550 einzuarbeiten. Ich habe mir das entsprechende Demopaket von der microchip Seite geladen. Jetzt möchte ich das ganze als CDC innitialisieren lassen. Ich find mich nur in dem Wust von Dateien nicht zurecht. In welcher von den 50 Dateien steht drin, als was sich der PIC am Conroller (PC) anmeldet?
www.sprut.de (ich weiss gerade den exakten link auch nicht, aber klicke dort etwas rum)
Die Seite kenne ich, allerdings hab ich das Problem, dass ich es nicht finde. Es steht zwar dort welche Modi es gibt, aber nicht wo ich sie einstellen kann. Zumindest finde ich es nicht.
ok, habe jetzt selbst die seiten angeguckt. naja ist einfach eine nachbildung einer rs232-schnittstelle und dafür sollte es im installationspfad ein beispiel von Microchip haben, wenn ich's recht im kopf habe ;-)
Joa. Ich hoffe ich hab überhaupt das richtige erwischt. Das hier hatte ich mir runtergeladen http://www.microchipc.com/sourcecode/index.php#pic18f4550usb Allerdings muss ich sagen, dass ich es da nicht finde.
Hier: http://www.holger-klabunde.de/usb/18f2550.htm gibts ein "CDC-Echo"-Beispielprojekt. Dort dann einfach den "echo"-Teil durch deinen Code ersetzen.
@Marco: Microchipc ist auch nicht Microchip. ;-) letzterer ist hersteller und stellt viele beispielprojekte und -code zur verfügung.
So nach nun doch etwas tieferer Recherche, bin ich schon etwas weiter. Ich kriege jetzt mit umgestellter Konfiguration zum laufen. Allerdngs habe ich die ConfigurationBits jetzt erstmal über die mplab ide verstellt. In welcher Datei befinden sich die Dinger denn. Ich find nirgendwo die #pragma befehle dazu. Allerdings sagt er mir, dass die irgendwo liegen sollen.
die musst du selber schreiben ;-) am besten "zu oberst" in der main-datei (oder welche es auch ist)
Hmm, naja gut, dass mach ich ja sonst auch, dass sollte nicht das Problem sein. Ich dacht nur weil er gemeckert hat, dass die irgendwo vergraben sind und ich mich zu dumm anstelle sie in dem Dateiwust wieder zu finden.
Wenn Du Windows als Betriebssystem verwendest, dann kannst Du den Explorer öffnen und den Ordner mit Deiner Firmware rechts-klicken. Es sollte sich dann ein Such-Formular öffnen bei dem Du nach und in Dateien suchen kannst. Gib in das entsprechende Feld einfach '#pragma' ein (ohne die Hochkommas). Gruß Windows User
@windows user Naja das Problem hatten wir ja jetzt schon geklärt. Der PIC wurde schlichtweg mit der default Einstellung geladen, weil nichts anderes definiert war. Ich weiß auch nicht, in wie weit du in der Programmierung von PIC µC steckst, aber es gibt etliche dieser pragma befehle, da wäre es glaube ich ein glückstreffer, das richtige zu treffen.
So. Ich hab das gute Stück jetzt soweit, dass er sich im CDC Mode anmeldet. Soweit ist auch alles schick, allerdings find ich nicht, wo ich die Baudrate einstelle. Ich würde zu Testzwecken gerne über den Hyperterminal kommunizieren. Dieser, sagt aber immer, dass er sich nicht verbinden kann. Ich vermute mal, dass das an der Baudrate liegt, oder ist das falsch?
Das ist falsch. Ein VCP verbindet sich immer (falls die Firmware passt) - egal welche Baudrate. Der USB überträgt die Daten immer so schnell wie möglich, also unabhängig von der eingestellten Geschwindigkeit. Es würde ja auch keinen Sinn machen, wenn Du 2400 Baud einstellst, und sich der USB-Host ewig damit rumquält. Gruß Terminal User
Der Snowman hat Dich ja schon auf microchip.com hingewiesen. Da suche mal nach MCHPFSUSB. Das ist deren USB-Stack - alles fix-und-fertig aber auch recht komplex. Gruß
Wie gesgat, ich kriege ja auch eine Verbingung. Das einzige was nicht klappt, ist die Kommunikation mit dem Hyperterminal. Ich krieg immer die Meldung "Com3 konnte nicht geöffnet werden. Überprüfen sie die Anschlusseinstellungen." Das ist das Problem was ich momentan habe
Hmm da bin ich nun auch ratlos. Ich kann Dir nur empfehlen die USB-Spezifikation zu lesen oder das Problem genauer zu beschreiben. Denn Dein Problem ist nicht der COM-Port, sondern Deine Firmware - die läuft nämlich nicht richtig. Der Anmeldevorgang (Enumeration) scheint ja noch zu klappen, da das Gerät im Geräte-Manager erscheint. Deine Firmware bedient aber offensichtlich die Endpunkt-Buffer nicht richtig. Um das genau zu beurteilen, benötigt man den Programm-Code. Woher soll hier irgend jemand wissen, was Du da programmiert hast?
So. Ich habe jetzt einmal das ganze Projekt gepackt. Ich werde mich dann aber gleich auch selber auf die Suche bei den Endpunkten machen. Ich hoffe, dass mir so besser geholfen werden kann.
Was ich eben vergessen habe dazuzuschreiben, die Konfiguration der Endpunkte steht in der Datei usb_config.h
Hi, Du solltest zuerst einmal ein Beispiel von Microchip (ohne Änderungen) zum Laufen bekommen. Wenn das klappt, dann kannst Du es entsprechend anpassen. Es wird keiner die Zeit und Lust haben, Deine Sourcen durchzuarbeiten - debuggen musst Du schon selber! Wenn das mit dem USB zu kompliziert ist für Dich, dann lies Dich ein (usb.org) oder nimm einen FTDI. Das heisst nicht, dass wir Dir nicht helfen wollen. Aber das geht nur bei 'konkreten' Fragen und nicht nach dem Motto 'helft mal, ich weiss nicht was ich da gerade mache'. Gruß
naja, ich habe im prinzip das Mircochip beispiel genommen und genau das bekomme ich nicht zum laufen. Und genau da liegt dann auch mein Problem. Ich erwarte jetzt auch nicht, dass sich da jemand für mich durchwühlt, ich dachte nur, dass ich vielleicht mal einen Anstoß kriege an dem ich ansetzen kann.
Zuerst mal eine LED zum leuchten bringen. Der USB hat bei der Enumeration in etwa folgenden Ablauf: 1. Reset (Funktion: USB_Reset() o.ä.) 2. Deskriptor anfordern (Funktion: USB_GetDescriptor() o.ä.) 3. Reset 4. Adressieren (Funktion: USB_SetAddress() o.ä.) 5. Deskriptoren anfordern 6. Konfiguration setzen (Funktion: USB_SetConfiguration() o.ä.) Du kannst jetzt bei jedem Abschnitt eine LED zum leuchten bringen :) (deshalb die Vorübung^^). Sollte irgendwo etwas nicht aufgerufen werden, dann ist wahrscheinlich Dein PIC nicht richtig konfiguriert (Typ, Takt o.ä.). Probier das mal aus. Gruß RalfH
So, ich habe mich jetzt weiter mit der Demo auseinander gesetzt. Ich habe jetzt auch die Stelle gefunden an der er hängen bleibt. Ich kann mir allerdings noch nicht erklären warum er das tut.
1 | BYTE getsUSBUSART(char *buffer, BYTE len) |
2 | {
|
3 | cdc_rx_len = 0; |
4 | |
5 | if(!USBHandleBusy(CDCDataOutHandle)) |
6 | {
|
7 | /*
|
8 | * Adjust the expected number of BYTEs to equal
|
9 | * the actual number of BYTEs received.
|
10 | */
|
11 | if(len > USBHandleGetLength(CDCDataOutHandle)) |
12 | len = USBHandleGetLength(CDCDataOutHandle); |
13 | |
14 | /*
|
15 | * Copy data from dual-ram buffer to user's buffer
|
16 | */
|
17 | for(cdc_rx_len = 0; cdc_rx_len < len; cdc_rx_len++) |
18 | buffer[cdc_rx_len] = cdc_data_rx[cdc_rx_len]; |
19 | |
20 | /*
|
21 | * Prepare dual-ram buffer for next OUT transaction
|
22 | */
|
23 | |
24 | CDCDataOutHandle = USBRxOnePacket(CDC_DATA_EP,(BYTE*)&cdc_data_rx,sizeof(cdc_data_rx)); |
25 | |
26 | }//end if |
27 | |
28 | return cdc_rx_len; |
29 | |
30 | }//end getsUSBUSART |
diesen Abschnitt scheint er in einer Endlosschleife zu durchlaufen. er kommt zwar immer bis zum Ende aber nicht darüber hinaus. Der Code-Schnipsel befindet sich in der usb_function_cdc.c Es wäre schön, wenn da vielleicht jemand einen Tipp hat, woran es liegen kann.
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.