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
Du musst den ICD2 als Programmer benutzen, dann klappts mit oder ohne DebugExecutive. In der Menuleiste: Debugger->none Programmer->ICD2
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?
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
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 | }
|
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.