Hallo PIC-Spezialisten, ich habe ein kleines Problem: Ich habe mir kürzlich ein älteres Microchip-Entwicklerboard mit der Bezeichnung "dsPICDEM 1.1" gekauft. Dazu habe ich mir einen Pickit-3 Programmer zugelegt, den ich erstmal mittels eines selbstgebauten Adapters für's Board anpassen musste. Die Entwicklungsumgebung MPLAB-X installierte ich mir auf mein Ubuntu-Notebook, was ziemich easy war. Dann installierte ich den C-Compiler MPLAB®XC16. So bis dahin war alles ziemich einfach. Nur leider wurden alle Demo-Programme scheinbar auf alten MPLAB-IDE Plattformen mit C-30 Compilern geschrieben, die nicht so einfach auf mein Linux-System übertragbar sind. Um erstmal zu testen, ob überhaupt eine Kommunikation Board-Programmer-Notebook vorhanden ist, schrieb ich einen 5-Zeiler, der mir eine LED auf dem Board blinken läßt... das funktionierte einwandfrei... erste Hürde genommen, aber das wars dann auch. Eigentlich wollte ich fertige Beispielprojekte von der Microchip-Seite Importieren, um das Rad nicht neu erfinden zu müssen, aber da verzweifle ich. Mein eigentliches Ziel ist es einen Inverter für Asynchronmotoren und/oder BLDC zu bauen/entwickeln und da gibt es schon zahlreiche Beispielprojekte auf dspic30f-Basis (ich habe einen dspic30f6014 verbaut) z.B. AN908 oder AN957 ...nur scheitere ich schon beim Importieren/Compilieren. Natürlich ist mir bewußt, daß ich auch die Pinbelegung meines Boards in der Software berücksichtigen sollte, damit keine Beschädigungen auftreten... dazu komme ich leider erst garnicht. Hat jemand eine Idee wie man solche Beispielprogramme in ein Linux MPLAB-X mit MPLAB®XC16 Compiler importiert? Eine Anleitung vielleicht? Zu meiner Person: habe vor 20 Jahren Automatisierungs/Regelungstechnik studiert und habe einige kleinere Projekte mit Atmega-8 erstellt (beruflich und Privat) bin aber kein Programmier-Freak (ich wäre aber gerne einer). Danke im voraus. Mfg Peter
:
Verschoben durch User
Ich arbeite genau mit dieser Umgebung, MPLABX Ubuntu und C30 bzw. XC16 (ist eigentlich der gleiche Compiler nämlich gcc). Ich habe aber bisher alle Projekte neu gemacht. Das geht eigentlich recht einfach. Dann stimmen aber auch alle Pfade und Filenamen ( ob '\' oder '/' oder Laufwerksbuchstaben etc) mit der aktuellen Installation überein. Der C-Code sollte eigentlich immer passen, es sei denn es gibt da auch was mit '/' und '\' in Filenamen. Mit Hilfe der IDE, die einem z.B. eine Auswahlliste der Includefiles anbietet, ist das schnell gefixt. Am Ende kennt man dann sein Projekt wirklich gut, weiß welche Files dazu gehören und hat wenigstens einen Überblick über die verwendeten Compileroptionen. MfG Klaus
Hi Klaus, ich sehe, daß Du viel mehr Erfahrung und Hintergrundwissen mit MPLAB_X unter Ubuntu hast als ich. Darum bitte ich Dich mal ein Microchip-Beispielprojekt z.B. das AN908 (Ansteuerung von Asynchronmotoren) runterzuladen, importieren und nur zu Kompilieren (ohne den Controller zu programmieren)... da scheiterts immer bei mir... ich bekomme zig Fehlermeldungen, als ob etwas fehlen würde (Bibliothek o.ä), aber ich kann die Fehlerquelle nicht lokalisieren. Vielleicht hast du mehr Glück/KnowHow? Mfg Peter
Peter Ostmann schrieb: > importieren Mein Vorschlag war, nicht zu importieren sondern neu zu erzeugen. Wenn das Projekt kompliziert und umfangreich ist, hilft das einem dabei, den Code zu verstehen. Das ist sowieso unabdingbar, wenn man etwas sinnvolles damit anstellen will. Also alle Source und Headerfiles in ein Projektdirektory kopieren und als "existing" zum Projekt hinzufügen. > ich bekomme zig Fehlermeldungen, als ob etwas fehlen > würde (Bibliothek o.ä), aber ich kann die Fehlerquelle nicht > lokalisieren. Die Fehlermeldungen sagen normalerweise, was das Problem ist. Wenn du das nicht verstehst, mußt du das lernen. Ich versuche, wie auch sonst, einen Fehler nach dem anderen abzuarbeiten, zuerst so etwas wie "file not found". Dabei sollte man berücksichtigen, daß in *nix der Direktoryseparator '/' ist, und Filenamen Case-sensitive sind. Wenn ein Symbol nicht gefunden wird, hilft möglicherweise grep und etwas Phantasie. Dabei muß man darauf achten, wer den Fehler liefert, der Compiler oder der Linker. > Vielleicht hast du mehr Glück/KnowHow? Es ist einfach Arbeit, und damit hat sich schon mancher den Tag versaut. Glück würde bedeuten, daß jemand anderes die Arbeit für einen erledigt hat, ohne eine Rechnung zu stellen. MfG Klaus
Hallo, ich komme nicht weiter. Ich habe mehrere Methoden des Imports vom Beispiel-Projekt AN908 ausprobiert, aber scheinbar mit den gleichen Fehlermeldungen beim kompilieren. Ich habe so das Gefühl, daß irgendetwas fehlt (eine Library, oder sonstwas), da er einige Variablen nicht entschlüsseln kann. Dieses Projekt wurde eigentlich für den dspic30f6010A geschrieben, es müsste aber auch auf meinem dspic30f6014 laufen... oder doch nicht? Naja, vielleicht kann jemand was mit den Fehlermeldungen des Compilers anfangen und mir einen Hinweis geben. Danke im Voraus. Hier ist die Fehlermeldung: make -f nbproject/Makefile-default.mk SUBPROJECTS= .build-conf make[1]: Betrete Verzeichnis '/home/peter/MPLABXProjects/ACIM_908_import_test_2.X' make -f nbproject/Makefile-default.mk dist/default/production/ACIM_908_import_test_2.X.production.hex make[2]: Betrete Verzeichnis '/home/peter/MPLABXProjects/ACIM_908_import_test_2.X' "/opt/microchip/xc16/v1.10/bin/xc16-gcc" "../../MPLAB_Dokumente/AN908 Source Code for dsPIC30F6010A/ACIM.c" -o build/default/production/_ext/2129995287/ACIM.o -c -mcpu=30F6014 -MMD -MF "build/default/production/_ext/2129995287/ACIM.o.d" -g -omf=elf -O0 -I"../../MPLAB_Dokumente/AN908 Source Code for dsPIC30F6010A" -msmart-io=1 -Wall -msfr-warn=off ../../MPLAB_Dokumente/AN908 Source Code for dsPIC30F6010A/ACIM.c:100:1: error: 'BORV_20' undeclared here (not in a function) ../../MPLAB_Dokumente/AN908 Source Code for dsPIC30F6010A/ACIM.c:115:2: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'int' ../../MPLAB_Dokumente/AN908 Source Code for dsPIC30F6010A/ACIM.c: In function 'main': ../../MPLAB_Dokumente/AN908 Source Code for dsPIC30F6010A/ACIM.c:205:13: warning: 'return' with no value, in function returning non-void ../../MPLAB_Dokumente/AN908 Source Code for dsPIC30F6010A/ACIM.c: In function 'DoControl': ../../MPLAB_Dokumente/AN908 Source Code for dsPIC30F6010A/ACIM.c:470:9: error: 'SnapBuf1' undeclared (first use in this function) ../../MPLAB_Dokumente/AN908 Source Code for dsPIC30F6010A/ACIM.c:470:9: note: each undeclared identifier is reported only once for each function it appears in ../../MPLAB_Dokumente/AN908 Source Code for dsPIC30F6010A/ACIM.c: In function 'SetupBoard': ../../MPLAB_Dokumente/AN908 Source Code for dsPIC30F6010A/ACIM.c:590:5: error: 'PORTEbits' undeclared (first use in this function) ../../MPLAB_Dokumente/AN908 Source Code for dsPIC30F6010A/ACIM.c: In function 'SetupPeripherals': ../../MPLAB_Dokumente/AN908 Source Code for dsPIC30F6010A/ACIM.c:765:5: error: 'PDC1' undeclared (first use in this function) ../../MPLAB_Dokumente/AN908 Source Code for dsPIC30F6010A/ACIM.c:766:5: error: 'PDC2' undeclared (first use in this function) ../../MPLAB_Dokumente/AN908 Source Code for dsPIC30F6010A/ACIM.c:767:5: error: 'PDC3' undeclared (first use in this function) ../../MPLAB_Dokumente/AN908 Source Code for dsPIC30F6010A/ACIM.c:768:5: error: 'PDC4' undeclared (first use in this function) ../../MPLAB_Dokumente/AN908 Source Code for dsPIC30F6010A/ACIM.c:775:5: error: 'PTPER' undeclared (first use in this function) ../../MPLAB_Dokumente/AN908 Source Code for dsPIC30F6010A/ACIM.c:777:5: error: 'PWMCON1' undeclared (first use in this function) ../../MPLAB_Dokumente/AN908 Source Code for dsPIC30F6010A/ACIM.c:778:5: error: 'DTCON1' undeclared (first use in this function) make[2]: Verlasse Verzeichnis '/home/peter/MPLABXProjects/ACIM_908_import_test_2.X' make[1]: Verlasse Verzeichnis '/home/peter/MPLABXProjects/ACIM_908_import_test_2.X' ../../MPLAB_Dokumente/AN908 Source Code for dsPIC30F6010A/ACIM.c:779:5: error: 'DTCON2' undeclared (first use in this function) ../../MPLAB_Dokumente/AN908 Source Code for dsPIC30F6010A/ACIM.c:780:5: error: 'FLTACON' undeclared (first use in this function) ../../MPLAB_Dokumente/AN908 Source Code for dsPIC30F6010A/ACIM.c:781:5: error: 'FLTBCON' undeclared (first use in this function) ../../MPLAB_Dokumente/AN908 Source Code for dsPIC30F6010A/ACIM.c:782:5: error: 'PTCON' undeclared (first use in this function) ../../MPLAB_Dokumente/AN908 Source Code for dsPIC30F6010A/ACIM.c:786:5: error: 'SEVTCMP' undeclared (first use in this function) ../../MPLAB_Dokumente/AN908 Source Code for dsPIC30F6010A/ACIM.c:787:5: error: 'SEVTCMPbits' undeclared (first use in this function) ../../MPLAB_Dokumente/AN908 Source Code for dsPIC30F6010A/ACIM.c:791:5: error: 'MAXCNT' undeclared (first use in this function) ../../MPLAB_Dokumente/AN908 Source Code for dsPIC30F6010A/ACIM.c:792:5: error: 'POSCNT' undeclared (first use in this function) ../../MPLAB_Dokumente/AN908 Source Code for dsPIC30F6010A/ACIM.c:793:5: error: 'QEICON' undeclared (first use in this function) ../../MPLAB_Dokumente/AN908 Source Code for dsPIC30F6010A/ACIM.c:794:5: error: 'QEICONbits' undeclared (first use in this function) ../../MPLAB_Dokumente/AN908 Source Code for dsPIC30F6010A/ACIM.c:797:5: error: 'DFLTCON' undeclared (first use in this function) ../../MPLAB_Dokumente/AN908 Source Code for dsPIC30F6010A/ACIM.c:812:15: error: 'ADCON1BITS' has no member named 'SIMSAM' ../../MPLAB_Dokumente/AN908 Source Code for dsPIC30F6010A/ACIM.c:820:15: error: 'ADCON2BITS' has no member named 'CHPS' ../../MPLAB_Dokumente/AN908 Source Code for dsPIC30F6010A/ACIM.c:833:14: error: 'ADCHSBITS' has no member named 'CH123SA' make[2]: *** [build/default/production/_ext/2129995287/ACIM.o] Fehler 255 make[1]: *** [.build-conf] Fehler 2 make: *** [.build-impl] Fehler 2 BUILD FAILED (exit value 2, total time: 1s)
Ich musste die letzten Tage feststellen, daß ich ein totaler Anfänger bin was die PIC-Prgrammierung angeht (in Verbindung mit Linux-Ubuntu, MPLAB-X und xc16-c-compiler). Zwar kann ich kleinere Programme zufuß erstellen, die auch funktionieren, aber mein eigentliches Ziel; einen simplen U/f 3-Phasen-Inverter zu Programmieren habe ich bis jetzt verfehlt. Alle Versuche sind gescheitert einen fertigen Code zu importieren. Ich habe so das gefühl, daß die meisten "Example-Codes" für die dspic30f-Reihe unter alten IDE (MPLAB 6.x) und alten c-Compilern geschrieben wurden, und die neuen Tools völlig inkompatibel sind. Hat jemand ein ähnliches Projekt erfolgreich mit der gleichen Entwicklungsumgebung realisiert/importiert? Oder einfach mal einen Hinweis geben, warum z.B. diese erste Fehlermeldung kommt. ../../MPLAB_Dokumente/AN908 Source Code for dsPIC30F6010A/ACIM.c:100:1: error: 'BORV_20' undeclared here (not in a function) Wo wird "BORV_20" definiert, und was muss ich downloaden/includieren um diese Fehlermeldung zu beheben. Bitte nur um sinnvolle Beiträge, die auch ein Nicht-Profi verstehen würde. Mfg Peter
Hallo, "BORV_20" gibt es in der Form seit einiger Zeit nicht mehr. Heißt jetzt BORV20 und ist für deinen PIC als "reserved" spezifiziert. BORV27 könnte klappen. Oder du schmeisst es erst mal ganz raus, ist "nur" der Brown-out detector (2V respektive 2.7V). Später wird aber auch 'PDC1' angemeckert. Gehört zum PWM Modul und weist darauf hin daß da ein #include für den PIC fehlt oder das falsche eingebunden wird. Ist vielleicht aber auch nur ein Folgefehler. Die Konfigbits stehen unter /opt/microchip/xc16/v1.10/docs/config_docs/30F6010A.html und eine Etage drüber findest du das Manual zum Compiler. > Ich habe so das gefühl, daß die meisten "Example-Codes" für die > dspic30f-Reihe unter alten IDE (MPLAB 6.x) und alten c-Compilern > geschrieben wurden, und die neuen Tools völlig inkompatibel sind. Ja leider, gerade die dsPICs scheint MCP etwas zu vernachlässigen.
So, nach langem "Importier-Amoklauf unter Linux" habe ich mir den alten Win-XP-Rechner meines Sohnes geschnappt, MPLAB v8.88 und C30-Compiler installiert, den "AN908 Source Code for dsPIC30F6010A" importiert (Vector Control for ACIM) und erfolgreich compiliert (nachdem ich nur den "BORV_20" gegen den "BORV_27" getauscht habe; Danke an Stefan!) Dumm von mir daß ich mich so lange geweigert habe Windoof zu benutzen, aber manchmal hat auch dieses System seine Daseinsberechtigung. Ein Problemchen habe ich noch: Mein Testboard hat einen dsPIC30F6014-Prozessor... Ich habe unter "Select Device" diesen Prozessor ausgewählt und auch im general.h diesen Includiert (#include <p30F6014.h>) Jetzt bekomme ich einige Fehlermeldungen (aber vieeel weniger als unter Linux MPLAB-X). z.B. ACIM.c: in function 'SetupBoard': ...error: 'PORTEbits' undeclared (first use... Vielleicht hat einer ein Tip für mich. Ich bin aber froh, daß ich jetzt so weit bin und nur noch paar Fehlermeldungen habe. Warscheinlich (hoffentlich) ist es nur eine Kleinigkeit. Trotz alledem, wenn jemand unter Ubuntu/Linux und MPLAB-X so ein Motor-Control Projekt realisiert hat (mit ähnlichem Prozessor) und mich nicht dumm sterben lassen will, kann er mir eine PM schicken, oder es einfach hier veröffentlichen wie er es gemacht hat, da ich immernoch daran interessiert bin es unter Linux zu realisieren. Mfg Peter
Neuer Status: Leider habe ich einen (Anfänger-)Fehler begangen: Ich musste feststellen, daß der Prozessor dspic30f6014 auf meinem Entwicklerboard dspicdem 1.1 völlig ungeeignet für meine Anwendung (Inverterbau) ist, da für dieses Problem spezielle Controller gebaut wurden mit der "Familien-Bezeichnung" Motor-Control (MC). Dazu gehört unter anderem der von mir schon erwähnte dspic30f6010A, der besonders viele PWM's und schnellere ADC's hat... eben für diese Anwendung. Da braucht man sich nicht wundern, daß man die "Examples" vom dspic30f6010A nicht so einfach auf dspic30f6014 übertragen kann, da dort die besagten PWM's fehlen. Naja, wieder was dazugelernt. Da sich die Beispielcodes für den dspic30f6010A einwandfrei compilieren ließen, würde ich gerne bei dem Prozessor bleiben, und suche entweder einen Prozessor dspic30f6010A auf einem 80-poligen Sockel, der auf mein Board passt, oder ein komplettes Entwicklerboard, das speziell für Motorenanwendungen konfiguriert ist (bevorzugt von Microchip und ohne Powerstage). Wenn jemand eins übrig hat und mir ein interessantes Angebot macht, bitte melden. Mfg Peter
Hallo, mittlerweile habe ich einen Großteil der Fehlermeldungen beseitigt... und hänge seit einiger Zeit an zwei Fehlermeldungen, wo ich nicht mehr weiter weiss. Wenn ich diese zwei Zeilen, die mir die Fehlermeldungen bringen, herauskommentiere, dann kann ich den kompletten Code fehlerfrei Compilieren. Ich glaube, daß es mit dem XC16-Compiler zusammenhängt, da die Software für C30 geschrieben wurde. 1) Fehlermeldung: ../SinusoidalBLDC v1.2.c: In function 'SpeedControl': make[2]: Verlasse Verzeichnis '/home/peter/MPLABXProjects/AN1017_30F3010_nach_4012/AN1017_3010-4012.X' ../SinusoidalBLDC v1.2.c:934:17: error: too few arguments to function '__builtin_subab' Der dazugehörige Code im Programm: reg_a = __builtin_subab(); 2) Fehlermeldung: ../SinusoidalBLDC v1.2.c:936:9: error: void value not ignored as it ought to be Der dazugehörige Code im Programm: reg_a = __builtin_movsac(&ControlDifferencePtr, &x_prefetch, 2, &PIDCoefficientsPtr, &y_prefetch, 2, 0, reg_b); Vielleicht kann jemand helfen. Hier zur Übersicht die ganze Funktion: Software-Umgebung: Linux Ubuntu, MPLAB_X, XC16-Compiler Als Anhang hänge ich den C-Code dran: SinusoidalBLDC v1.2.c Mfg Peter
Hallo, ich Probiere gerade das selbe Programm zu übersetzen und hänge auch an dem zweiten Fehler. Ich habe mir die Doku für die Funktion besorgt und einfach mal das Beispiel daraus programmiert. Auch dieses Beispiel wird nicht unterstützt. volatile register int result asm("A"); int *xmemory; int *ymemory; int xVal , yVal; result = __builtin_movsac(&xmemory,&xVal,2,&ymemory,&yVal,2,0,0);[/pre] Wurde das Problem inzwischen gelöst? Viele Grüße Parli
>Ich glaube, daß es mit dem XC16-Compiler zusammenhängt, da die Software >für C30 geschrieben wurde. @Peter Dann versuche doch erst einmal den C30!?
Hallo Leute, ich weiss nicht, ob es noch jemanden Interessiert, aber bezüglich des Fehlers in der Zeile: reg_a = __builtin_movsac(&ControlDifferencePtr, &x_prefetch, 2, &PIDCoefficientsPtr, &y_prefetch, 2, 0, reg_b); soll man einfach die Zuweisung "reg_a =" weglassen, so, daß dann nur Folgendes steht: __builtin_movsac(&ControlDifferencePtr, &x_prefetch, 2, &PIDCoefficientsPtr, &y_prefetch, 2, 0, reg_b); Habe irgendwo gelesen, daß sich am Compiler xc16 diesbezüglich etwas geändert hat... Dieser Fehler verschwindet anschließend beim compilieren. Ich hoffe, daß ich einigen Leuten geholfen habe.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.