Forum: Mikrocontroller und Digitale Elektronik PIC / MPLAB ICD2


von schnudl (Gast)


Lesenswert?

Ich kann erfolgreich mit MPLAB ICD2 eine Debugsession starten.

Jedoch würde ich mir erwarten, dass der unverbundene Controller nach 
einem Reset mit MCLR (auf L) die Applikation auch ohne Debugger startet. 
Das ist aber nicht der Fall.

Wie ist das nun mit der Programming Executive ?
Diese sollte bei "Program" im Program Menü micht mitgeladen werden (nur 
bei Program über Debug), es wird aber immer die Debugging Executive 
geladen.

Die konkrete Frage: Wie erreiche ich einen Sprung in mein main() bei 
einem Reset des Controllers?

Muss man irgendwelche Fuse Bits setzen? Es gibt zB ein enable Master 
Clear Fuse bit bei Device Configuration... wozu ist dieses denn?

Wenn ich in der Device Configuration ein Bit setze, wird dieses dann 
sofort in den Controller übernommen, oder muss ich erst das Programm 
starten?

Die Erklärung ist für mich etwas verwirrend.

Danke
Michael

von schnudl (Gast)


Lesenswert?

Es ist ein dsPIC30F4013

von Meister E. (edson)


Lesenswert?

Du musst den ICD2 als Programmer benutzen, dann klappts mit oder ohne 
DebugExecutive. In der Menuleiste: Debugger->none Programmer->ICD2

von schnudl (Gast)


Lesenswert?

Hmmm...
Eigentlich hab ich das gemacht. Ich habe einen Taster, der von MCLR nach 
GND geht. Mit einem Pullup 10k. Das müsste doch für ein Reset reichen - 
oder ?

Was ist denn überhaupt der Unterschied, ob man das Device über Debug 
oder Program programmiert. Ich kann mit Menü "Program->ICD2" auch ohne 
weiteres debuggen. Und wie kann ich das Device ohne Debugging Executive 
programmieren? Sie kommt immer mit, egal wie man es tut.


Und woher nimmt das IDE eigentlich die Einstellungen für Device 
Configuration Bits (Fuses)? Im Code kommt das ja nirgends vor, aber wo 
ist das hinterlegt? Liest das IDE die Bits direkt vom Controller?

von Gast2 (Gast)


Lesenswert?

Hi,

es gibt verschiedene Möglichkeiten die Configuration Bits zu setzen, 
entweder über das Menü Configure->Configuration Bits... oder eben direkt 
im Code eingefügt. Dementsprechend muss dann das Häkchen 
für:"Configuration Bits set in code" im Menü "Configuration Bits" 
gesetzt werden oder eben nicht

von schnudl (Gast)


Lesenswert?

So: Ich habe festgestellt, dass der Watchdog Timer der MCU nach 15sec 
zuschlägt.

Ich habe versucht diesen laut Datenblatt zu deaktivieren:

1) zunächst mal den Hardware Disable uber das Fuse Bit:
1
_FWDT(WDT_OFF);

Das sollte ohnehin auf off stehen, da dies über die config bits im ide 
gesetzt wird.

2) und dann noch den Software Disable über

1
RCONbits.SWDTEN = 0;


Nützt aber beides nichts!

Nur wenn man regelmässig den Timer zurücksetzt, kommt es zu keinem 
Reset:
1
ClrWdt();


Hat jemand hier noch eine Idee, wieso das nicht auszuschalten geht???
Schaut ja fast nach Bug aus (in der MCU oder bei mir...)

Hier nochmal der gesamte Code:
1
#include <p30f4013.h>
2
#include <stdio.h>
3
4
_FWDT(WDT_OFF);
5
6
7
void initUART2(int baudrate, int fcy);  
8
int write(int handle, void *buffer, unsigned int len);
9
10
int main(void)
11
{
12
  int i;
13
  
14
  
15
  long j=0;
16
17
  RCONbits.SWDTEN = 0;
18
  
19
  char buffer[] = "1234567";
20
  
21
  i=9600;
22
  
23
  initUART2(i, 10); // CPUclk = 10MHz
24
  while (1) 
25
  {
26
    ClrWdt();
27
    }
28
  return 0;
29
}
30
31
void initUART2(int baudrate, int fcy)
32
{
33
  volatile UxMODEBITS *umode = &U2MODEbits;
34
  volatile UxSTABITS *ustatus = &U2STAbits;
35
  volatile unsigned int *brg = &U2BRG;  
36
  
37
  *brg = (unsigned int) (fcy*1.e6/(16.*baudrate)-1.);  
38
  
39
  umode->UARTEN = 1;
40
  umode->LPBACK = 0;
41
  umode->ALTIO = 0;
42
  umode->ABAUD = 0;
43
  umode->PDSEL = 0;
44
  umode->STSEL =0;
45
  
46
  ustatus->UTXISEL = 1;
47
  ustatus->UTXBRK = 0;
48
  ustatus->UTXEN = 1;
49
  return;
50
}  
51
52
53
int write(int handle, void *buffer, unsigned int len) 
54
{
55
int i;
56
volatile unsigned int c;
57
58
volatile UxSTABITS *ustatus = &U2STAbits;
59
volatile unsigned int *txreg = &U2TXREG;
60
61
for (i = 0; i<len; i++)
62
{
63
  while ((ustatus->TRMT) == 0);
64
  c = ((unsigned int *)buffer)[i]; 
65
  *txreg = c;
66
}
67
return(len);
68
}

von Gerhard (Gast)


Lesenswert?

Hallo

wie Gast2 schon geschrieben hat, gibt es 2 Möglichkeiten, die 
Configurationbits zu setzen. So weit ich mich erinnere unterscheiden 
sich aber auch die MPLAB-Versionen. Ich arbeite mit derzeit mit der 
Version 7.60, und da muss man bei den Einstellungen unter 
Configure/Configuration Bits ein Häkchen machen bei "Configuratuion-Bits 
set in Code", sonst nimmt er die Einstellungen aus dem Fenster 
Configuration Bits. Um den Watchdog auszuschalten reicht aber 
grundsätzlich ein Disabel Watchdog. Bei der Einstellung in MPLAB muss 
noch sichergestellt sein, dass das ICD2 auch die Configuratzionbits 
programmiert (ICD Settings/Program)


Gerhard

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.