Forum: Mikrocontroller und Digitale Elektronik PIC18F46K80 Probleme mit Variablen


von Dirk K. (d-krs)


Lesenswert?

Hallo ich bin gerade an meiner Bachelorarbeit dran und habe leider 
Probleme mit meinem Programm. In der Firma wo ich schreibe kann mir 
leider auch niemand helfen, da dieser PIC noch nicht vorher genutzt 
wurde.

Ich benutze "MPLAB V IDE v2.25" und den "MPLAB ICD3" Programmer. Zum 
compilieren benutze ich den "XC8 compiler".

Mein PIC ist auf dem "PIC18 Explorer Demo Board" aufgesteckt. Auf diesen 
Board sind 8 LEDs die alle mit dem PORT D verbunden sind (RD0-RD7).

Vorab möchte ich sagen das ich die folgenden Programmteile mit dem 
PIC18F87J11 und den PIC18F8722 getestet habe und es funktioniert alles 
wunderbar. Den PIC18F46K80, welchen ich benutzen soll, habe ich auch 
schon einmal ausgetauscht, so dass ein Hardwarefehler ausgeschlossen 
werden kann.

Es stimmt irgendwas mit den Variablen nicht. Sobald ich zwei Variablen 
Multipliziere oder dividire kommt als ergebnis eine NULL raus. 
Nachfolgend habe ich fünf Beispiele aufgeschrieben die mich und meine 
Kollegen sehr verwirren. ich bin mir aber ziemlich sicher, dass das 
Problem 40cm vom Bildschirm sitzt ;) .

Nr. 1: (funktioniert)
1
LATD=5; //LEDs zeigen binär 5 an

Nr. 2: (funktioniert nicht mit PIC18F46K80)
1
int a=5;
2
LATD=a; //LEDs zeigen mir binär 130 an

Nr. 3: (funktioniert)
1
int a=5;
2
if(a==5){LATD=5;} // LEDs zeigen mit binär 5 an

Nr. 4: (funktioniert nicht mit PIC18F46K80)
1
int a,b=5,c=5;
2
a=b*c;
3
if(a==25){LATD=25} //LEDs bleiben ausgeschaltet

Nr. 5: (funktioniert nur mit PIC18F46K80)
1
int a,b=5,c=5;
2
a=b*c;
3
if(a==0){LATD=25} //LEDs zeigen binär 25 an.

Meine Config-Bits habe ich wie folgt eingestellt:
1
// CONFIG1L
2
#pragma config RETEN = OFF      // VREG Sleep Enable bit (Ultra low-power regulator is Disabled (Controlled by REGSLP bit))
3
#pragma config INTOSCSEL = HIGH // LF-INTOSC Low-power Enable bit (LF-INTOSC in High-power mode during Sleep)
4
#pragma config SOSCSEL = HIGH   // SOSC Power Selection and mode Configuration bits (High Power SOSC circuit selected)
5
#pragma config XINST = ON       // Extended Instruction Set (Enabled)
6
7
// CONFIG1H
8
#pragma config FOSC = INTIO2    // Oscillator (Internal RC oscillator)
9
#pragma config PLLCFG = OFF     // PLL x4 Enable bit (Disabled)
10
#pragma config FCMEN = OFF      // Fail-Safe Clock Monitor (Disabled)
11
#pragma config IESO = OFF       // Internal External Oscillator Switch Over Mode (Disabled)
12
13
// CONFIG2L
14
#pragma config PWRTEN = OFF     // Power Up Timer (Disabled)
15
#pragma config BOREN = OFF      // Brown Out Detect (Disabled in hardware, SBOREN disabled)
16
#pragma config BORV = 3         // Brown-out Reset Voltage bits (1.8V)
17
#pragma config BORPWR = ZPBORMV // BORMV Power level (ZPBORMV instead of BORMV is selected)
18
19
// CONFIG2H
20
#pragma config WDTEN = OFF      // Watchdog Timer (WDT disabled in hardware; SWDTEN bit disabled)
21
#pragma config WDTPS = 1048576  // Watchdog Postscaler (1:1048576)
22
23
// CONFIG3H
24
#pragma config CANMX = PORTB    // ECAN Mux bit (ECAN TX and RX pins are located on RB2 and RB3, respectively)
25
#pragma config MSSPMSK = MSK7   // MSSP address masking (7 Bit address masking mode)
26
#pragma config MCLRE = ON       // Master Clear Enable (MCLR Enabled, RE3 Disabled)
27
28
// CONFIG4L
29
#pragma config STVREN = ON      // Stack Overflow Reset (Enabled)
30
#pragma config BBSIZ = BB2K     // Boot Block Size (2K word Boot Block size)
31
32
// CONFIG5L
33
#pragma config CP0 = OFF        // Code Protect 00800-03FFF (Disabled)
34
#pragma config CP1 = OFF        // Code Protect 04000-07FFF (Disabled)
35
#pragma config CP2 = OFF        // Code Protect 08000-0BFFF (Disabled)
36
#pragma config CP3 = OFF        // Code Protect 0C000-0FFFF (Disabled)
37
38
// CONFIG5H
39
#pragma config CPB = OFF        // Code Protect Boot (Disabled)
40
#pragma config CPD = OFF        // Data EE Read Protect (Disabled)
41
42
// CONFIG6L
43
#pragma config WRT0 = OFF       // Table Write Protect 00800-03FFF (Disabled)
44
#pragma config WRT1 = OFF       // Table Write Protect 04000-07FFF (Disabled)
45
#pragma config WRT2 = OFF       // Table Write Protect 08000-0BFFF (Disabled)
46
#pragma config WRT3 = OFF       // Table Write Protect 0C000-0FFFF (Disabled)
47
48
// CONFIG6H
49
#pragma config WRTC = OFF       // Config. Write Protect (Disabled)
50
#pragma config WRTB = OFF       // Table Write Protect Boot (Disabled)
51
#pragma config WRTD = OFF       // Data EE Write Protect (Disabled)
52
53
// CONFIG7L
54
#pragma config EBTR0 = OFF      // Table Read Protect 00800-03FFF (Disabled)
55
#pragma config EBTR1 = OFF      // Table Read Protect 04000-07FFF (Disabled)
56
#pragma config EBTR2 = OFF      // Table Read Protect 08000-0BFFF (Disabled)
57
#pragma config EBTR3 = OFF      // Table Read Protect 0C000-0FFFF (Disabled)
58
59
// CONFIG7H
60
#pragma config EBTRB = OFF      // Table Read Protect Boot (Disabled)

Ich hoffe das mir bald mal jemand helfen kann, da ich bei google leider 
nichts zu meinem Problem finden kann.

Danke schonmal im Voraus :)

Grüße Dirk

von Max H. (hartl192)


Lesenswert?

Da du eine Debugger hast kannst dir ja mal genau ansehen was der PIC 
macht...
So schnell kann ich keinen Fehler finden.

von wit (Gast)


Lesenswert?

Hi,
ich hab's mal in der Simulation in MPLAB ausprobiert - alles 
funktioniert einwandfrei. Allerdings musste ich den Extended Instruction 
Set ausschalten, damit ich mit die Simulation starten kann. Im XC8 C 
Compiler User’s Guide Kap. 5.3.2 heißt es "The extended instruction mode 
available on some PIC18 devices is not currently supported." Vielleicht 
ist das der Fehler? Teste mal mit:
1
#pragma config XINST = OFF      // Extended Instruction Set (Disabled)

von Dirk K. (d-krs)


Lesenswert?

Ich hab mich heute mit dem Entwicklungsleiter meiner Firma 
zusammengesetzt und nach 3,5 Stunden haben wir eine Lösung gefunden.

Mit MPLAB IDE funktioniert es ohne Probleme :). Es ist auch egal ob man 
den XC8 oder den HIGH-Tech Compiler nimmt. Die Einstellungen der 
Compiler haben wir auch genau so gelassen wie bei MPLAP X IDE.

Bei MPLAB X IDE hatten wir keinen Erfolg egal welchen Compiler wir 
genommen haben. Naja es ist halt sehr seltsam, aber ich kann 
weiterarbeiten.

Ich möchte mich trotzdem ganz herzlich für eure Mithilfe Badanken :)

Gruß Dirk

von Klaus (Gast)


Lesenswert?

wit schrieb:
> ich hab's mal in der Simulation in MPLAB ausprobiert

Warum Simulator? Die PICs kann man direkt debuggen, steppen etc

MfG Klaus

von wit (Gast)


Lesenswert?

Klaus schrieb:
> Warum Simulator? Die PICs kann man direkt debuggen, steppen etc

Ja sicher, das könnte Dirk machen. Da ich keinen PIC18F46K80 zur Hand 
habe, kann ich nur in der Simulation schauen, was der Compiler tut. 
Dabei bin ich eben im Code von Dirk auf das Config-Flag für "extended 
instruction mode" gestoßen, das von XC8 nicht unterstützt wird.

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.