Forum: Mikrocontroller und Digitale Elektronik Programm läuft nicht


von Fichtendickicht (Gast)


Lesenswert?

ich bastle grad an einem Project in C18 und einem Pic 18F4685 rum. Ein 
bestehendes Programm funktioniert einwandfrei. Das neue macht nichts. 
Ich hab nun mal alles ausgeklammert und möchte nur, dass eine LED 
eingeschalten wird (Port B0). Auch das macht es nicht. Füge ich den 
gleichen Code beim alten Programm ein, funktioniert es. Woran kann das 
liegen?

1
#include <p18f4685.h>
2
3
#pragma config OSC = HS
4
#pragma config PWRT = ON
5
#pragma config WDT = OFF
6
#pragma config LVP = OFF
7
8
9
void main (void)
10
{
11
  TRISBbits.TRISB0=0;
12
  LATBbits.LATB0=1;
13
14
  while(1);
15
}

von gast (Gast)


Lesenswert?

Schon mal ins Datenblatt geschaut ?
Wahrscheinlich nicht. Die Ports müßen doch
bestimmt noch geschaltet werden. Oder sind die Digital usw....

von holger (Gast)


Lesenswert?

Schau mal auf die Zweitfunktionen des PORTB.
Deinen PIC kenne ich jetzt nicht. Falls auf
PB0 eine Analogfunktion liegt (ADC/Komparator)
musst du den Pin evtl erst auf Digital I/O umschalten.
Das geht evtl. auch über das Config Word wenn dort
PBADEN deaktiviert wird.

von Fichtendickicht (Gast)


Lesenswert?

um das geht es aber nicht. Der Code läuft ja einwandfrei in dem alten 
Projekt. Im neuen nicht mehr. Ich hab linker Files usw überprüft scheint 
sonst alles in Ordnung zu sein

von gast (Gast)


Lesenswert?

Selber µC im alten Prg. ?
Alte Prg selber geschrieben, ist allso das selber was du hier postest ?

von holger (Gast)


Lesenswert?

So, Datenblatt mal gezogen ;)
Auf PB0 liegt AN10.

Füg doch mal folgendes hinzu

#pragma config PBADEN = OFF

von Fichtendickicht (Gast)


Lesenswert?

danke, geht aber leider auch nicht

ich glaub ich hab den Fehler gefunden. Das compilierte Programm, also 
die Hex ist 160KB groß. Der PIC hat aber nur 96KB Programmspeicher. 
Sollte denn dann nicht MPLAB melden, dass der Code zu lang ist und in 
zweiter Instanz noch das Brennprogramm?

von Fichtendickicht (Gast)


Lesenswert?

Aja, ich das Programm ist teils von mir, ich benutze eine MMC-Lib von 
Microchip

von holger (Gast)


Lesenswert?

>danke, geht aber leider auch nicht

Hmm, dann kennt der Compiler PBADEN nicht.
War nur geraten. Sorry. Wie es wirklich heisst
weiss ich leider nicht. Dann würde ich jetzt an deiner Stelle
mal ADCON1 ändern.

>ich glaub ich hab den Fehler gefunden. Das compilierte Programm, also
>die Hex ist 160KB groß.

Quark. HEX Dateien sind ASCII Code. Die sind immer mindestens
doppelt so groß wie die Daten die wirklich drin stehen.

von holger (Gast)


Lesenswert?

>Hmm, dann kennt der Compiler PBADEN nicht.

Stimmt nicht, gerade bei google gefunden.
Er kennt PBADEN = Off. Dann würde ich mal sagen das
irgendwo in deinem Programm TRISB oder LATB wieder geändert wird.

von Fichtendickicht (Gast)


Lesenswert?

das Programm besteht aus nur den 3 Zeilen also kann da auch später 
nichts geändert werden. Mitlereile hab ichs mal geändert, aber auch ohne 
Erfolg


void main (void)
{

  TRISBbits.TRISB0=0;
  while(1)
  {
    LATBbits.LATB0=1;
    Delay10TCKYx(10);
    LATBbits.LATB0=1;
    Delay10TCKYx(10);
  }
}

von gast (Gast)


Lesenswert?

Ich kenn den MC nicht. Aber z.B auf einen 18f2550,
würde das Programm nicht laufen, weil die Register
nicht gesetzt sind. Hier wird es auch so sein.
Wie gesagt, siehe ins Datenblatt, welche Register
gesetzt werden müßen. Kann mir nicht, bei so einen
komplizierten µC, vorstellen das man da keine Register
setzen muß.

von holger (Gast)


Lesenswert?

Probier das hier:
1
#include <p18f4685.h>
2
3
#pragma config OSC = HS
4
#pragma config PWRT = ON
5
#pragma config WDT = OFF
6
#pragma config LVP = OFF
7
#pragma config PBADEN = OFF
8
9
void main (void)
10
{
11
  TRISBbits.TRISB0=0;
12
  LATBbits.LATB0=1;
13
  ADCON1 = 0x0F;
14
15
  while(1);
16
}

Wenn das nicht funktioniert machst du woanders Mist.

von Lukas B. (lukas-1992) Benutzerseite


Lesenswert?

Hallo,
teste mal das:
1
void main(void)
2
{
3
  LATB = 0x00; 
4
  TRISB = 0xFE;
5
6
  while(true)
7
  {
8
    LATB = 1;
9
    Delay10KTCYx(100);
10
    LATB = 0;
11
    Delay10KTCYx(100);
12
  }/
13
}

von Lukas B. (lukas-1992) Benutzerseite


Lesenswert?

ach ja das musst du noch includen:

#include "delays.h"

von Hermann U. (Firma: www.pcb-devboards.de) (gera82)


Lesenswert?

1
void main(void)
2
{
3
  LATB = 0x00; 
4
  TRISB = 0x00;      //Alle ausgänge
5
  ADCON1 = 0b00001111 // digital
6
7
  while(true)
8
  {
9
    PORTB.RB0 = 1;
10
    Delay10KTCYx(100);
11
    PORTB.RB0 = 0;
12
    Delay10KTCYx(100);
13
  }
14
}

so geht es bestimmt

von Lukas B. (lukas-1992) Benutzerseite


Lesenswert?

>
1
> #include <p18f4685.h>
2
> 
3
> #pragma config OSC = HS
4
> #pragma config PWRT = ON
5
> #pragma config WDT = OFF
6
> #pragma config LVP = OFF
7
> 
8
> 
9
> void main (void)
10
> {
11
>   TRISBbits.TRISB0=0;
12
>   LATBbits.LATB0=1;
13
> 
14
>   while(1);
15
> }
16
> 
17
>

was mir noch aufgefallen ist:
Kann es eventuell sein das folgendes fehlt?

#pragma code

also

1
 #include <p18f4685.h>
2
 
3
 #pragma config OSC = HS
4
 #pragma config PWRT = ON
5
 #pragma config WDT = OFF
6
 #pragma config LVP = OFF
7
 
8
9
 #pragma code 
10
 void main (void)
11
 {
12
   TRISBbits.TRISB0=0;
13
   LATBbits.LATB0=1;
14
 
15
   while(1);
16
 }
17
> 
18
>

von Fichtendickicht (Gast)


Lesenswert?

vielen Dank für die Mühen

läuft aber trotzdem nicht. Wenn ich das alte Programm kompiliere. läufts 
auf Anhieb, was wohl heitßt, dass der PIC selber in Ordnung ist. Naja 
ich mal mal Schluss für heut, vll überlegt sichs der PIC bis morgen ja 
noch :)

Gruß
Tom

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.