mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik pic 18f4550 als CDC, wo stell ich das ein?


Autor: Marco Schulze (sharkman)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Master Snowman (snowman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
www.sprut.de (ich weiss gerade den exakten link auch nicht, aber klicke
dort etwas rum)

Autor: Marco Schulze (sharkman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Master Snowman (snowman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 ;-)

Autor: Marco Schulze (sharkman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Εrnst B✶ (ernst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier:

http://www.holger-klabunde.de/usb/18f2550.htm

gibts ein "CDC-Echo"-Beispielprojekt.

Dort dann einfach den "echo"-Teil durch deinen Code ersetzen.

Autor: Master Snwoman (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Marco:
Microchipc ist auch nicht Microchip. ;-) letzterer ist hersteller und 
stellt viele beispielprojekte und -code zur verfügung.

Autor: Marco Schulze (sharkman)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Master Snowman (snowman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
die musst du selber schreiben ;-)
am besten "zu oberst" in der main-datei (oder welche es auch ist)

Autor: Marco Schulze (sharkman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Windows User (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Marco Schulze (sharkman)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Marco Schulze (sharkman)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Terminal User (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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ß

Autor: Marco Schulze (sharkman)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Marco Schulze (sharkman)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Marco Schulze (sharkman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was ich eben vergessen habe dazuzuschreiben, die Konfiguration der 
Endpunkte steht in der Datei usb_config.h

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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ß

Autor: Marco Schulze (sharkman)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: RalfH. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Marco Schulze (sharkman)
Datum:

Bewertung
0 lesenswert
nicht 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.
BYTE getsUSBUSART(char *buffer, BYTE len)
{
    cdc_rx_len = 0;
    
    if(!USBHandleBusy(CDCDataOutHandle))
    {
        /*
         * Adjust the expected number of BYTEs to equal
         * the actual number of BYTEs received.
         */
        if(len > USBHandleGetLength(CDCDataOutHandle))
            len = USBHandleGetLength(CDCDataOutHandle);
        
        /*
         * Copy data from dual-ram buffer to user's buffer
         */
        for(cdc_rx_len = 0; cdc_rx_len < len; cdc_rx_len++)
            buffer[cdc_rx_len] = cdc_data_rx[cdc_rx_len];

        /*
         * Prepare dual-ram buffer for next OUT transaction
         */

        CDCDataOutHandle = USBRxOnePacket(CDC_DATA_EP,(BYTE*)&cdc_data_rx,sizeof(cdc_data_rx));

    }//end if
    
    return cdc_rx_len;
    
}//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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.