www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PIC / MPLAB ICD2


Autor: schnudl (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: schnudl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es ist ein dsPIC30F4013

Autor: Meister Eder (edson)
Datum:

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

Autor: schnudl (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Gast2 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: schnudl (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
_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

RCONbits.SWDTEN = 0;


Nützt aber beides nichts!

Nur wenn man regelmässig den Timer zurücksetzt, kommt es zu keinem 
Reset:
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:
#include <p30f4013.h>
#include <stdio.h>

_FWDT(WDT_OFF);


void initUART2(int baudrate, int fcy);  
int write(int handle, void *buffer, unsigned int len);

int main(void)
{
  int i;
  
  
  long j=0;

  RCONbits.SWDTEN = 0;
  
  char buffer[] = "1234567";
  
  i=9600;
  
  initUART2(i, 10); // CPUclk = 10MHz
  while (1) 
  {
    ClrWdt();
    }
  return 0;
}

void initUART2(int baudrate, int fcy)
{
  volatile UxMODEBITS *umode = &U2MODEbits;
  volatile UxSTABITS *ustatus = &U2STAbits;
  volatile unsigned int *brg = &U2BRG;  
  
  *brg = (unsigned int) (fcy*1.e6/(16.*baudrate)-1.);  
  
  umode->UARTEN = 1;
  umode->LPBACK = 0;
  umode->ALTIO = 0;
  umode->ABAUD = 0;
  umode->PDSEL = 0;
  umode->STSEL =0;
  
  ustatus->UTXISEL = 1;
  ustatus->UTXBRK = 0;
  ustatus->UTXEN = 1;
  return;
}  


int write(int handle, void *buffer, unsigned int len) 
{
int i;
volatile unsigned int c;

volatile UxSTABITS *ustatus = &U2STAbits;
volatile unsigned int *txreg = &U2TXREG;

for (i = 0; i<len; i++)
{
  while ((ustatus->TRMT) == 0);
  c = ((unsigned int *)buffer)[i]; 
  *txreg = c;
}
return(len);
}

Autor: Gerhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.