pic 18f4550 als CDC, wo stell ich das ein?

OP #1470535
Lesenswert?

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?
OP #1471806
Lesenswert?

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.
Gast #1472631
Lesenswert?

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
OP #1472674
Lesenswert?

@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.
OP #1472918
Lesenswert?

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?
Gast #1473356
Lesenswert?

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
OP #1475779
Lesenswert?

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
Gast #1476414
Lesenswert?

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?
Gast #1480800
Lesenswert?

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ß
OP #1481375
Lesenswert?

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.
Gast #1481747
Lesenswert?

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
OP #1485913
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren