Forum: Mikrocontroller und Digitale Elektronik PIC 32 DSP Libary


von Martin (Gast)


Lesenswert?

Hallo,

ich habe gerade ein paar Startschwierigkeiten beim Versuch einen dsPIC 
zu benutzen. Die Inbetriebnahme war zwar erfolgreich aber nun klemmt es 
beim Einbinden der entsprechenden Libary. Ich bin schnell auf diese 
Seite gestoßen: 
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en023598
Unter getting startet stehen 4 Punkte, mit denen ich eigentlich allen 
ein Problem habe:

-Read the summary section of this web page
Sind damit nur die 3 Zeilen am Anfang der Seite gemeint?

-Read the HTML Help files in the MPLAB C30 compiler release.
Wo finde ich denn diese HTML Help files?

-The DSP library file “libdsp.a” should be located in your C30 language 
tools “lib” folder.
In diesem Ordner ist nur eine libdsp-coff.a. Irgendwo habe ich gelesen, 
dass die jetzt so heißen muss, also ist dieser Punkt eigentlich geklärt.

-The DSP library header file “dsp.h” should be located in your C30 
language tools “include” folder.
Im "include" Ordner ist keine Datei, die so oder ähnlich heißt. Das ist 
aktuell mein größtes Problem. Muss ich die Datei downloaden?

Für ein wenig Klarheit wäre ich sehr dankbar. Interessant wären auch 
gute Tutorials und Beispielprojekte zu dem Thema.

von Chris B. (dekatz)


Lesenswert?

PIC32 DSP und C30 Compiler passt irgendwie nicht. Aber es geht 
offensichtlich um den C30....
Für den C30 Compiler (der übrigens seit fast 2 Jahren nicht mehr updated 
wird) findet sich die Dateie (zumindest bei meiner Installation) in
..../support/generic/h/dsp.h

von Michael H. (morph1)


Lesenswert?

Chris B. schrieb:
> PIC32 DSP und C30 Compiler passt irgendwie nicht.

Das macht nichts, es passt auch der Titel nicht zum Inhalt :)

von Martin (Gast)


Lesenswert?

Verdammt, ich meinte im Titel natürlich einen PIC33 bzw. einen 
dsPIC33FJ32...! Sorry, gestern war nicht mein Tag... -.-
Sollte ich dann besser den XC Compiler benutzen? Ist bestehender Code 
denn vom C30 Compiler auf den XC 16 portierbar oder ändern sich dort 
wieder alle Bezeichnungen?

von Chris B. (dekatz)


Lesenswert?

Habe ich selbst noch nicht probiert, aber guck mal im MICROCHIP Forum 
u.ä.
http://www.google.at/#q=MICROCHIP+C30++XC16

von Klaus (Gast)


Lesenswert?

Martin schrieb:
> Sollte ich dann besser den XC Compiler benutzen? Ist bestehender Code
> denn vom C30 Compiler auf den XC 16 portierbar oder ändern sich dort
> wieder alle Bezeichnungen?

Sowohl der C30 als auch der XC16 sind der gcc. XC16 ist nur die neuere 
Version. MPLABX bietet einem auch den C30 an, so man ihn installiert 
hat. Die Registernamen sind nicht im Compiler, sondern in einigen 
hundert Headerfiles. Die ändert keiner ohne Not.

MfG Klaus

von Martin (Gast)


Lesenswert?

Also ich verwende nun vorerst MPLAB x mit dem C30 Compiler weil ich das 
so schon installiert habe und es soweit läuft. Leider fällt es mir aber 
noch sehr schwer, Infos zu finden, wie ich denn nun praktisch in C mit 
dem DSP umgehe.
Bisher habe ich nicht viel gemacht:
dsp.h in Header files eingebunden und includet,
libdsp-coff.a in Libaries eingebunden (muss ich hier auch etwas 
includen?),
Prototypen in dsp.h angesehen und 2 Funktionen gefunden, die in Frage 
kommen:
1
extern long* FFTReal32bIP(
2
      int log2N, 
3
      int N,
4
      long *ipBuff, 
5
      long *tfBuf,
6
      int factPage
7
);
und
1
extern void realFft32bIP(
2
    int log2N, 
3
    long *ipBuff, 
4
    long *tfBuff,
5
    int factPage
6
);

Was gibt die erste Funktion zurück?
Und was muss ich hierfür übergeben:
long *ipBuff, long *tfBuff und int factPage? Einer der Pointer muss wohl 
auf mein Array aus Messwerten Zeigen. Aber welcher und wozu ist der 
Andere? Wo ist das ganze überhaupt dokumentiert?

Außerdem habe ich noch eine Frage: Wie definiere ich, in welchem 
Speicherbereich die Variable liegen sollen (X oder Y)? Oder macht der 
Compiler das in C automatisch richtig?

Ihr merkt, dass ich noch ganz am Anfang stehe und es an allen Ecken 
hakt. Ich bin schon auf dutzende Dokumente gestoßen, die aber teilweise 
so mit Abkürzungen gespickt sind, dass ich sie einfach nicht verstehe. 
Wenn mir jemand konkret sagen könnte, welche Dokumente ich als Anfänger 
erstmal lesen muss, wäre ich sehr dankbar. Noch besser wäre ein 
geeignetes Tutorial in C. Erklärungen in Assembler, wie sie in den 
Unterlagen von Microckip sind, helfen mir meistens nur bedingt weiter.

von Martin (Gast)


Lesenswert?

Ich weiß, dass meine Fragen zum Teil sicher etwas dämlich sind, aber 
kann sich nicht trotzdem jemand erbarmen, mir ein paar Tips zu geben. So 
wie ich es jetzt verstehe, kann ich die Grundrechenoperationen nur in 
Assembler programmieren. Aber Für die FFT gibt es ja extra die Libary 
und ich will ja eigentlich nur wissen, wie ich eine dieser Funktionen 
benutzen kann.

von Ste N. (steno)


Lesenswert?

Hallo Martin,

ich kann dir leider auch nicht direkt helfen. Aber wenn Du den C30 
installiert hast, gibt es dort einen Ordner examples/dsPIC30F. Hier sind 
auch mehrere Beispiele für die Anwendung des DSP. Sind zwar nur für den 
dsPIC30F, das Grundprinzip sollte beim dsPIC33 allerdings nicht viel 
anders sein. Außerdem sind im Ordner docs/dsp_lib alle DSP Funktionen 
mit kleinen Beispielen beschrieben.

von Chris B. (dekatz)


Lesenswert?

Ja und die Beschreibung der Funktionen sollte über die Help-Funktion 
zugänglich sein.
Geht aber auch direkt. z.B. findest du die Beschreibung von 
<FFTReal32bIP>
hier:...../mplabc30/V3.31/docs/dsp_lib/DSP Library.htm
Dort geht es weiter mit "DSP Transform function" -->> 4.7 FFTReal32bIP.

......in welchem  Speicherbereich die Variable liegen sollen (X oder 
Y)?....

Sorry, ich kenne mich mir DSP nicht aus!, aber wenn die Messwerte aus 
einer AD-Wandlung entstehen, dann wird das unter den ADC-Einstellungen 
zu finden sein bzw. wenn der ADC via DMA "bedient" wird, muss die DMA 
ensprechend konfiguriert werden

von Martin (Gast)


Lesenswert?

Steffen N. schrieb:
> Aber wenn Du den C30
> installiert hast, gibt es dort einen Ordner examples/dsPIC30F.

Chris B. schrieb:
> Ja und die Beschreibung der Funktionen sollte über die Help-Funktion
> zugänglich sein.
> Geht aber auch direkt. z.B. findest du die Beschreibung von
> <FFTReal32bIP>
> hier:...../mplabc30/V3.31/docs/dsp_lib/DSP Library.htm
> Dort geht es weiter mit "DSP Transform function" -->> 4.7 FFTReal32bIP.

Das ist beides interessant. Werde ich mir mal zu Gemüte führen :)

Chris B. schrieb:
> Sorry, ich kenne mich mir DSP nicht aus!, aber wenn die Messwerte aus
> einer AD-Wandlung entstehen, dann wird das unter den ADC-Einstellungen
> zu finden sein bzw. wenn der ADC via DMA "bedient" wird, muss die DMA
> ensprechend konfiguriert werden

Die Werte ziehe ich mir auf die altmodische Art einzeln aus dem ADC 
Buffer und speichere sie in einem Array. Die Frage wäre also, wie ich 
das Array deklarieren muss. Aber jetzt lese ich mal noch ein bisschen, 
vielleicht bin ich dann schlauer.

Vielen Dank!

von Martin (Gast)


Lesenswert?

Hallo nochmal,

inzwischen habe ich mir ein Codebeispiel, die Hilfe und einiges mehr 
angesehen und mir so etwas mehr Klarheit verschafft. Zum Beispiel weiß 
ich nun, dass ich das Array mit _attribute_ im Y-Bereich anlegen muss. 
Trotzdem herrscht auch noch viel Verwirrung. Mein Problem ist gerade, 
dass nach meiner Ansicht die Informationen aus der Hilfe nicht zur dsp.h 
passen:

Aus der Header würde ich mir diese Funktion herauspicken. Die habe ich 
ja schon mal geschickt. Eine FFT mit realen, 32 Bit Werten, die "in 
place" arbeitet, also die Eingangswerte überschreibt. Unklar ist mir 
immer noch, was hier genau zurück gegeben wird und was ich für tfBuf und 
factPage üebrgeben muss.
1
extern long* FFTReal32bIP(
2
      int log2N, 
3
      int N,
4
      long *ipBuff, 
5
      long *tfBuf,
6
      int factPage
7
);

Also habe ich mir die Hife angesehen, in der die Funktionen etwas 
ausfühlicher erläutert werden. Das hat nun aber leider zur endgültigen 
Verwirrung geführt. Erstens werden hier plötzlich andere Werte übergeben 
und zweitens ist auch der Name der Funktion anders. In der Überschrift 
heißt sie auch FFTReal32bIP, im Code-Beispiel ist das "IP" dann aber 
plötzlich verschwunden. Das ist doch zum verrückt werden! :(
1
 extern long* FFTReal32b (
2
   int log2N - 1,
3
   int N,
4
   long* srcCV,
5
   long* twidFactors,
6
   int factPage
7
);

Für etwas Klarheit wäre ich mal wieder ausgesprochen dankbar!

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.