Forum: Mikrocontroller und Digitale Elektronik MSP430: Probleme Betrieb mit/ohne Debugger


von Atomic (Gast)


Lesenswert?

Hallo,

ich habe ein Problem mit dem MSP30F449, das ich einfach nicht lösen 
kann.
Ich habe das Olimex Development Board für den F449 mit LCD 
(MSP430-F449STK2) und versuche gerade ein Testprogramm für das LCD zu 
schreiben.
Programmiert wird das ganze mit IAR Workbench und dem MSP_FET430UIF von 
TI.

Nun zum Problem:
Lade ich das Beispielprogramm von der Olimex Webpage auf den MSP430 
läuft alles problemlos. Sowohl mit Spannungsverorgung durch das 
Programmiergerät als auch mit abgeklemmten Programmer und externer 
Spannungsversorgung.

Lade ich mein eigenes Testprogramm herunter, dann funktioniert es mit 
angeschlossenem Programmiergerät wie es soll. Mit externer 
Spannungsversorgung und ohne Programmiergerät tritt jedoch ein Fehler 
auf: Das Programm scheint zwar mehr oder weniger richtig abzulaufen, 
jedoch ist die Anzeige im LCD nur kurz bei Wechsel sichtbar und 
verblasst dann sofort.
Versorge ich das ganze wieder durch das Programmiergerät bleibt der 
Fehler bestehen. Erst wenn ich ein anderes Programm aufspiele und dann 
wieder das Testprogramm läuft alles wieder normal.

Ich würde mich freuen, wenn irgendjemand hier dazu einen 
Lösungsvorschlag hätte.

von g. b. (gunb)


Lesenswert?

Da würde ich mal checken:

- welcher Oszillator ohne Programmiergerät läuft (s. Datasheet)

- ob bei ext. Oscillator das Tuningflag abgewartet wird, damit dieser 
stabil
läuft, bevor es weitergeht,

Bisschen wenig Infos, Quelltexte wären hilfreich.

von Oliver J. (skriptkiddy)


Lesenswert?

Wie sieht deine Reset-Beschaltung aus.

Gruß Oliver

von Franco (Gast)


Lesenswert?

Ggf. der Watchdog, der bei angestecktem Debugger deaktiviert wird?

von Atomic (Gast)


Lesenswert?

Anbei mal der Code. Watchdog wird einfach angehalten. Eigentlich ist der 
ganze Code ja so kurz, dass ich darin keine Ursache finde.

Das Verhalten zeigen beide meiner zwei Platinen, Programmiergerät habe 
ich gerade nur eins.
1
#include "io430x44x.h"
2
#include <intrinsics.h>
3
#include <stdint.h>
4
5
#define LCDMEMS 20
6
uint8_t * const LCDMem = ( uint8_t * ) &LCDM1;
7
8
void InitLCD (void);
9
10
int main( void )
11
{
12
  // Stop watchdog timer to prevent time out reset
13
  WDTCTL = WDTPW + WDTHOLD;
14
  FLL_CTL0 = XCAP18PF;  
15
  BTCTL |= BTFRFQ1;           //Flcd = ACLK /128;
16
  InitLCD();
17
  //alle Elemente d LCD anschalten
18
  for (int i = 0; i < LCDMEMS; ++i) {   
19
    LCDMem[i] = 255;     
20
  }
21
  
22
  __low_power_mode_3();
23
24
  return 0;
25
}
26
27
void InitLCD (void)
28
{
29
  int i;
30
  for ( i = 0; i < LCDMEMS; ++i) {
31
    LCDMem[i] = 0;
32
  }
33
  P5SEL = 0XFC;
34
  LCDCTL = LCDP0 | LCDP1 | LCDP2 | LCDMX0 | LCDMX1 | LCDSON |  LCDON; // S0-S39, 4Mux, LCD an
35
}

mfg

von active (Gast)


Lesenswert?

Ich würde einmal in der main() eine Endlos-Schleife implementieren und 
den Low-Power-Mode unterbinden.

von Atomic (Gast)


Lesenswert?

Ich scheine die Lösung gefunden zu haben:
1
BTCTL |= BTFRFQ1;

BTCTL wird bei einem Reset nicht auf einen definierten Ausgangswert 
zurückgesetzt. Ohne das ODER funktioniert es.

Vielen Dank für eure Unterstützung.

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.