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.
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
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?
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
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
externlong*FFTReal32bIP(
2
intlog2N,
3
intN,
4
long*ipBuff,
5
long*tfBuf,
6
intfactPage
7
);
und
1
externvoidrealFft32bIP(
2
intlog2N,
3
long*ipBuff,
4
long*tfBuff,
5
intfactPage
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.
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.
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.
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
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!
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
externlong*FFTReal32bIP(
2
intlog2N,
3
intN,
4
long*ipBuff,
5
long*tfBuf,
6
intfactPage
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
externlong*FFTReal32b(
2
intlog2N-1,
3
intN,
4
long*srcCV,
5
long*twidFactors,
6
intfactPage
7
);
Für etwas Klarheit wäre ich mal wieder ausgesprochen dankbar!