Forum: Mikrocontroller und Digitale Elektronik PIC24FJ128GB110 CDC Probleme


von Roman F. (Firma: DHBW Ravensburg) (chevellino)


Lesenswert?

Guten Tag lieben µC-Freunde!!

Mein Kumpel und ich, wir studieren beide Elektrotechnik und sind nun 
dran, den gennanten Mikrokontroller zu programmieren.

Das schon seit mehr als einem Monat und dabei haben wir bis jetzt das 
Teil nur so weit gebracht, dass Windows merkt, da wurde was eingesteckt.

Nun zunächst zur Beschaltung. Der PIC ist mit den D+ und D- Leitungen 
auf Pins 57 und 56 angeschlossen. Er wird auch vom Strom der 
USB-Schnittstelle versorgt und hat keine eigene Spannungsversorgung. 
ID-Leitung vom Mini-USB-Anschluss auf unserer Platine hängt in der Luft.

Nun folgendes haben wir gemacht.

Wir haben von microchip die kompletten Solutions runtergeladen. Darin 
sind unzählige Demos erhalten. Wir wollen jedoch einen COM Port 
simulieren und über diesen unsere Daten (temperatur und paar andere) 
verwenden und da dafür haben wir die "USB Device - CDC - Basic Demo" und 
näher angeschaut.

Bei dem von Microchip zur Verfügung gestelltem Projekt, wurde der 
PIC24FJ256GB110 verwendet. Bei einer Änderung von 256 auf 128 im MPLAB, 
lies sich das Programm nicht mehr komplilieren. Darum haben wir dann die 
Datei "Hardwareprofile" mit unserem Kontroller ergänzt. Nach unzähligen 
weiteren Änderungen in Main.c und anderen files, ließ sich das Programm 
irgendwann kompilieren.

Nach dem Programmieren des µC trennen wir den USB-Kabel mit dem PC und 
stecken es neu an.

Windows sagt uns nun, dass es ein unbekanntes Gerät eingesteckt wurde, 
und es auch nicht richtig erkannt wird.

Dann dachten wir uns, wir müssen den Treiber dem PC zur Verfügung 
stellen. Bei "www.spruts.de" haben wir gelesen, dass CDC Treiber schon 
von Haus aus beim Windows vorhanden sind, aber mit dem .inf (oder 
ini???) File darauf hingewiesen werden muss, welcher das ist.

Da Microchip im selben Ordner, wo die Demos sind, auch einen Ordner 
namens "inf" hat, dachten wir uns, dass es die Datei sein muss. 
Allerdings bringt es keine Änderung mit sich: Windows sagt, der 
aktuellste Treiber wurde installiert.

Nun brauchen wir Hilfe an folgenden Punkte.

1. Sind Demos überhaupt der richtige Ansatz für dieses Problem? Was 
brauchen wir wirklich an Dateien und Methoden die zur Kommunikation 
notwendig sind?!

2. Wie bringen wir unseren µC dazu, dass beim Einstecken in den PC der 
CDC Treiber installiert wird und automatisch ein COM-Port eingerichtet 
wird?

3. Wo ändern wir die Einstellungen, welcher COM-Port eingerichtet wird 
??

4. Wir können wir am schnellsten eine Verbindung mit dem µC testen, 
sprich auf der PC-Seite irgend ein kleines Programmchen, dass Daten hin 
schickt und welche zurück bekommt.

Das wäre schon ein riesen Schritt.

Vielen Dank im Voraus.

Grüße,
Roman

von Arc N. (arc)


Lesenswert?

Roman Frei schrieb:
> Guten Tag lieben µC-Freunde!!
>
> Mein Kumpel und ich, wir studieren beide Elektrotechnik und sind nun
> dran, den gennanten Mikrokontroller zu programmieren.
>
> Das schon seit mehr als einem Monat und dabei haben wir bis jetzt das
> Teil nur so weit gebracht, dass Windows merkt, da wurde was eingesteckt.
>
> Nun zunächst zur Beschaltung. Der PIC ist mit den D+ und D- Leitungen
> auf Pins 57 und 56 angeschlossen. Er wird auch vom Strom der
> USB-Schnittstelle versorgt und hat keine eigene Spannungsversorgung.

Kein Spannungsregler von 5V auf 3.3V?
"Absolute Maximum Ratings(†)
Voltage on VDD with respect to VSS -0.3V to +4.0V"
Wie sieht die restliche Beschaltung insb. USB aus (Datenblatt 18.1)?
Alle Errate beachtet 
(http://ww1.microchip.com/downloads/en/DeviceDoc/80369k.pdf)?

von Roman F. (Firma: DHBW Ravensburg) (chevellino)


Lesenswert?

HI!

habs ganz vergessen, natürlich haben wir da 3.3 Volt. Die 
Spannungsversorgungsleitungen vom USB gehen auf einen Spannungsregler 
LM1117IMPX-3.3.

Was meinst du mit "Datenblatt 18.1"?

Die D+ und D- Leitungen vom USB sind direkt mit den entsprechenden USB 
Leitungen angeschlossen.

ID-Leitung hängt wir gesagt in der Luft.

µC lässt sich auch einwandfrei programmieren.

Grüße,
Roman

von Roman F. (Firma: DHBW Ravensburg) (chevellino)


Lesenswert?

hallo Leute,

kann den niemand weiterhelfen?

Wir wollen's verstehen, wie das funktioniert und was wir machen müssen.

Grüße,
Roman

von Roman F. (Firma: DHBW Ravensburg) (chevellino)


Lesenswert?

Hallo Leute!

Wir sind langsam am verzweifeln, aber einen kleinen Schritt weiter.

Folgendes. Wir haben nun heurasgefunden, dass wir einen anderen Quarts 
verwenden, nämlich einen 16 MhZ. Daher sollten wir den PLL Devisor für 
das USB-Interface anders einstellen.

Wir finden in der Demo aber nicht die Stelle, wo wir es ändern sollen.

Die Demo ist ja für alle möglichen µC von Mikrochip geschrieben worden. 
Nur definiert man ja beim programmieren genau den KOntroller, welchen 
man auch benutzt.

Anhand dessen, wird dann auch nur der Teil vom Code in der Main Methode 
aktiv, welcher in der entsprechenden If-Else Verzweigung dann true 
ergibt.

Auszug aus der Main:

#elif defined(EXPLORER_16)
    #if defined(_PIC24FJ256GB110_)
        _CONFIG1( JTAGEN_OFF & GCP_OFF & GWRP_OFF & FWDTEN_OFF & 
ICS_PGx2)
        _CONFIG2( 0xF7FF & IESO_OFF & FCKSM_CSDCMD & OSCIOFNC_ON & 
POSCMOD_HS & FNOSC_PRIPLL & PLLDIV_DIV2 & IOL1WAY_ON)
    #elif defined(_PIC24FJ128GB110_)
        _CONFIG1( JTAGEN_OFF & GCP_OFF & GWRP_OFF & FWDTEN_OFF & 
ICS_PGx2)
        _CONFIG2( 0xF7FF & IESO_OFF & FCKSM_CSDCMD & OSCIOFNC_ON & 
POSCMOD_HS & FNOSC_PRIPLL & PLLDIV_DIV2 & IOL1WAY_ON)


So, da stehen nun lauter einstellungen, aber wir finden nirgendwo die 
Einstellschrauben dazu. Also die Stellen, wo wir den PLLDIV_DIV2 ändern. 
Wir brauchen einen DIV von 4! Standartmäßig ist er vielleicht auf 3 
eingestellt, und klar, dass da nichts funktioniert.

Weiß da einer Bescheid?

Viele Grüße,
Roman

von Michael H. (morph1)


Lesenswert?

Roman Frei schrieb:
> #elif defined(PIC24FJ128GB110)
>         _CONFIG1( JTAGEN_OFF & GCP_OFF & GWRP_OFF & FWDTEN_OFF &
> ICS_PGx2)
>         _CONFIG2( 0xF7FF & IESO_OFF & FCKSM_CSDCMD & OSCIOFNC_ON &
> POSCMOD_HS & FNOSC_PRIPLL & PLLDIV_DIV2 & IOL1WAY_ON)

Augen auf, Ohren auf! Helmi ist daaaa :)

ich seh da groß und deutlich PLLDIV_DIV2 und das is nur bei einem Takt 
von 8Mhz richtig.

von Dieter W. (dds5)


Lesenswert?

> Also die Stellen, wo wir den PLLDIV_DIV2 ändern.
> Wir brauchen einen DIV von 4!

Das "PLLDIV_DIV2" ist ein symbolischer Name für die Configurationbits 
der PLL.

Für einen Teilerfaktor von 4 sollte es reichen, den Namen in 
"PLLDIV_DIV4" zu ändern.
Hab's aber nicht ausprobiert!

von Lehrmann M. (ubimbo)


Lesenswert?

Servus,

ihr setzt an der flaschesten Stelle die es gibt an.

Fangt mit einer LED an die ihr blinken lasst. Ihr beherrscht wie alle 
Anfänger noch nicht mal die trivialsten Grundlagen. Darum rate ich euch 
zu einem Grundlagentutorial.
Dann versteht ihr auch alles von Grund auf.
Wenn ihr dann irgendwann USB gut beherrscht, dann könntet ihr ein 
Tutorial schreiben. Es gibt leider keinerlei deutsches Tutorial zu 
diesem Thema.

von Roman F. (Firma: DHBW Ravensburg) (chevellino)


Lesenswert?

Wow,

gleich 3 Beiträge, vielen Dank dafür Leute.

Wie man eine LED zum Blinken bekommt, weiß ich schon längst. Wir haben 
auch schon den ganzen USB-Kram von Sprut verinerlicht.

Zum jetzigen Zeitpunkt weiß ich nicht, wie genau ich USB am 
Miktrokontroller konfigurieren muss, damit dieser mit dem CDC-treiber 
kommuniziert.

Um das zu erkunden, wollten wir die Demo ja zum Laufen bringen, aber 
nicht mal das klappt Ansatzweise.

Der PC merkt, dass wir USB-Port einstecken, sagt aber, das das Gerät 
nicht erkannt wird.

Wenn der Takt nicht stimmt, kanns auch nicht.

Wir haben die Hardware vom Jahrgang vor uns zur Verfügung gestellt 
bekommen und sollen nun weiter entwickeln, aber es klappt eben nicht. 
Die ganzen Sensoren die Dabei sind, die sind schon fast fertig, alles 
lauft. Nur mit der USB-Schnittstelle sind wir noch bei 0.

Wenn wir die Einstellungen wüssten, welche der CDC Treiber benötigt, 
dann würde ich anfangen es auch ohne der DEmo zu fuß Schritt für Schritt 
zu programmieren, sprich die Register beschreiben, damit USB richtig 
konfiguriert wird und dann Daten schreiben oder auch abholen vom 
Endpunkt.

Aber diese Demo hat bis jetzt kein einziges mal funktioniert, das 
frustriert einfach total. Ich hoffe, ihr könnt es nachvollziehen.

<<<Für einen Teilerfaktor von 4 sollte es reichen, den Namen in
"PLLDIV_DIV4" zu ändern.
Hab's aber nicht ausprobiert!<<<<

Wir haben in jedem File gesucht, in dem das PLLDIV_DIV2 steht, aber 
nirgends ist es der Fall. Wenn es so einfach ist, da statt einer 2 eine 
4 an zu hängen, dann wär es doch zu einfach... kann es das sein... heute 
abend probier ich es daheim aus.

Wenn jemand weitere Tipps und vielleicht etwas Zeit hat, diese mit zu 
teilen, dann freuen wir uns Wahnsinnig drüber.

Vielen Dank,
Roman

von Dieter Werner (Gast)


Lesenswert?

Wo diese Namen definiert sind weiss ich auch nicht aber zumindest eine 
Beschreibung findet sich in der Datei p24FJ128GB110.inc

;  The following settings are available for CONFIG2:
;
;   Two Speed Start-up:
;     IESO_OFF             Disabled
;     IESO_ON              Enabled
;
;   96MHz PLL Prescaler:
;     PLLDIV_NODIV         No Divide (4MHz input)
;     PLLDIV_DIV2          Divide by 2 (8MHz input)
;     PLLDIV_DIV3          Divide by 3 (12MHz input)
;     PLLDIV_DIV4          Divide by 4 (16MHz input)
;     PLLDIV_DIV5          Divide by 5 (20MHz input)
;     PLLDIV_DIV6          Divide by 6 (24MHz input)
;     PLLDIV_DIV10         Divide by 10 (40MHz input)
;     PLLDIV_DIV12         Divide by 12 (48MHz input)

von Roman F. (Firma: DHBW Ravensburg) (chevellino)


Lesenswert?

JAWOHL, probier ich nacher herum. Danke!!!

von Roman (Gast)


Lesenswert?

Serwus Leute,

funzt immernoch nicht. Nun haben wir uns ein buch geholt und lesen, wie 
wir das selbst, ohne demos machen werden.

Grüße,
Roman

von Master S. (snowman)


Lesenswert?

vielleicht gleich zu beginn mal lesen, was ein CDC, HID etc. ist. und 
dann überlegen, ob ihr für einen COM-port wirklich CDC braucht ;-) 
(antwort: nein)
allerdings habe ich auch meine bedenken, wenn ihr das mit dem takt 
nichtmal selbst merkt, ob es schlau ist USB in angriff zu nehmen; hättet 
ihr mit einer LED angefangen, hättet ihr gleich gemerkt, dass diese 4x 
zu schnell blinkt.

von Roman (Gast)


Lesenswert?

Serwus,

wir haben leider keine LED's auf der fertig entwickelten Platine.

Wir müssen nur eben die Kommunikation per USB herstellen und es 
funktioniert nicht mal mit der Demo.

Wir wollte es eben mit der Demo versuchen, weil Microchip ja einen 
treiber zur Verfügung stellt. Wir haben ja auch sonst keine Ahnung, wie 
der Treiber genau mit dem Kontroller kommuniziert.

Grüße,
Roman

von Master S. (snowman)


Lesenswert?

mit CDC brauchst du einen treiber, wenn du aber einen USB-Com-port mit 
dem PIC machen willst, brauchst du keinen treiber. es kommt halt darauf 
an, ob du ein CDC willst oder einen Com-port ;-)

von Roman (Gast)


Lesenswert?

Huhu,

die USB Leitungen waren vertauscht. Weiß Gott was wir noch hätten alles 
probieren können, funktionieren würde es nie.

Sorry Leute.

Grüße,
Roman

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
Noch kein Account? Hier anmelden.