MSP430: Probleme Betrieb mit/ohne Debugger

Gast #2631232
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.
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.
Gast
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
Gast
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.