Forum: Mikrocontroller und Digitale Elektronik MSP430: G2553 vs G2231


von Sven Scholz (Gast)


Lesenswert?

Hallo Gemeinde,

ich habe auf einem MSP-EXP430G2 LaunchPad einen MSP430G2231 gesteckt und 
diesen erfolgreich in den Zustand LPM3 gesetzt. Dabei ist der 32.768-kHz 
clock crystal NICHT angeschlossen. Somit läuft der MSP430 mit seinem 
internen Takt.
Das kleine Progrämmchen nutzt den WatchDog-Timer-Interrupt, um den MCU 
wieder aus dem Schlaf zu holen. In einer while(1)-Schleife wird dabei 
immer ein Ausgang getoggelt an dem eine LED hängt. Sprich, ich sehe die 
LED in einem Zyklus blinken. Super. Die Stromaufnahme ist hierbei ca. 
4,7uA. Wenn die LED an ist natürlich ca. 1300uA höher.
So weit so gut.

Nachdem ich damit so super schnell Erfolg hatte, habe ich mir einen 
MSP-FET und einen MSP430G2553 im DIP-Package fürs Breadboard geholt.
Da die MSP430 kaum externe Bauelemente benötigen, war auch dieser 
Versuchsaufbau schnell aufgesteckt.
An P1.0 hängt auch an diesem Aufbau die LED.
Ich habe 1:1 den Quellcode wie beim Launchpad und dem G2231 hergenommen 
(unter CCS v7), kompiliert und mit dem MSP-FET eingespielt.
Die LED wird geht an, der MCU geht in LPM3 (sehr geringe Stromaufnahme 
und die IDE sagt, dass in LowPower die Debug-Möglichkeiten limitiert 
sind), doch leider wacht der MCU nicht wieder auf. Die LED bleibt an und 
blinkt somit nicht...

Jetzt ist natürlich die Frage, woran das liegen könnte?
Das Launchpad hat doch auch keine weiteren Bauteile drauf und ich habe 
bis dato immer geglaubt, dass der Quellcode innerhalb der MSP430-Familie 
kompatibel sein sollte...

Merkwürdig. Haben die irgendwie ein unterschiedliches Clock-System?
Muss ich beim "größeren" G2553 mehr machen in Richtung Interrupts 
freischalten, akivieren etc.?

Stehe gerade echt auf dem Schlauch und komme nicht weiter...
Ach ja, der LPM3 bzw. das Aufwachen sollte auch funktionieren, wenn der 
MSP-FET dranhängt oder?
Ich meine nur, ein Pin vom MSP-FET wird mit Pin16 des MSP430G2553 
verbunden, der ja der RESET-Pin ist. Nicht das da etwas schief läuft.

Herzlichen Dank erst einmal...
Viele Grüße

von wv (Gast)


Lesenswert?

Hallo Sven,

der Code sollte auf dem 2553 genauso funktionieren. Der 2553 hat ein 
paar GPIOs mehr und ein paar Peripheribausteine mehr, RAM- und 
Flashgröße unterscheiden sich und der Rest ist ansonsten identisch.

Das mit den eingeschränkten Debugmöglichkeiten war mal eine zeitlang 
eine Macke im CCS7, ich bin deswegen lange bei CCS6 geblieben, in CCS8 
ist die Macke wieder weg.

Gruß wv

von Sven Scholz (Gast)


Lesenswert?

Tja, hatte ich auch gedacht - der MSP430 erwacht aber nicht...
Ein Kuss hat auch nix geholfen. :-)

Ich habe mal den MSP-FET abgebaut und den MCU per Labornetzteil mit 3,3V 
versorgt. Außen herum hängt nur noch die LED an P1.0 mit 1kOhm 
Vorwiderstand und ein 47kOhm Widerstand am RST-Pin als PullUp.

LED geht an - nie wieder aus.

Mhhh.

von wv (Gast)


Lesenswert?

Hallo Sven,

dann versuch das mal mit CCS6 oder CCS8 zu debuggen. Das ist allerdings 
schwierig, da Du den WDT dafür benutzt, das macht man eigentlich nur, 
wenn man die anderen Timer für andere wichtige Sachen braucht. Bei den 
anderen Timern kann man sehen, ob das Timerregister hochzählt.

--wv

von Sven Scholz (Gast)


Lesenswert?

Danke!
Funktionieren die Timer denn im LPM3?

Beitrag #6147231 wurde vom Autor gelöscht.
von wv (Gast)


Lesenswert?

Hallo Sven,

die Timer funktionieren im LPM3 nur mit ACLK als Clocksource. Das gilt 
aber für den WDT auch.

--wv

von Sven Scholz (Gast)


Lesenswert?

Ich komme leider nicht weiter. Habe alles ausprobiert, doch beim G2553 
sehe ich leider kein Aufwachen bzw. Blinken...

Anbei sende ich meinen Quellcode mal mit, der so auf dem Launchpad mit 
dem G2231 problemlos läuft (LED blinkt dort in einem langsamen 
Interval).
Extener Quarz ist nicht verbunden/eingelötet.
Vielleicht fällt dem einen oder anderen MSP430-Experten ja noch was 
auf/ein:
1
#include <msp430.h> 
2
3
4
int main(void)
5
{
6
  DCOCTL = 0;
7
  BCSCTL1 = CALBC1_1MHZ;              // Set DCO to 1MHz
8
  DCOCTL = CALDCO_1MHZ;
9
10
  // setup for watchcdog timer at 32s cycle time
11
  BCSCTL1 |= DIVA_3;
12
  WDTCTL = WDT_ADLY_1000;                   // WDT 1s/4 interval timer
13
  IE1 |= WDTIE;                             // Enable WDT interrupt
14
  P1DIR = 0xFF;                             // All P1.x outputs
15
  P1OUT = 0;                                // All P1.x reset
16
  P2DIR = 0xFF;                             // All P2.x outputs
17
  P2OUT = 0;                                // All P2.x reset
18
19
  unsigned int watch_dog_intr_cnt = 0;
20
  while(1)
21
  {                           // Set P1.0 LED on
22
23
      // toggle the LED in 2x32s = 64s
24
    if ( watch_dog_intr_cnt == 2)
25
    {
26
        P1OUT ^=0X01;   //toggle the bits
27
        watch_dog_intr_cnt = 0;
28
    }
29
30
    __bis_SR_register(LPM3_bits + GIE);     // Enter LPM3
31
    watch_dog_intr_cnt++;
32
  }
33
}
34
35
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
36
#pragma vector=WDT_VECTOR
37
__interrupt void watchdog_timer (void)
38
#elif defined(__GNUC__)
39
void __attribute__ ((interrupt(WDT_VECTOR))) watchdog_timer (void)
40
#else
41
#error Compiler not supported!
42
#endif
43
{
44
    __bic_SR_register_on_exit(LPM3_bits);   // Clear LPM3 bits from 0(SR)
45
}

von Clemens L. (c_l)


Lesenswert?

Probier erst mal das offizielle Demoprogramm (msp430g2xx3_wdt_01.c), und 
mache dann schrittweise Änderungen, bis du den Fehler findest.
1
#include <msp430.h>
2
3
int main(void)
4
{
5
  WDTCTL = WDT_MDLY_32;                     // Set Watchdog Timer interval to ~30ms
6
  IE1 |= WDTIE;                             // Enable WDT interrupt
7
  P1DIR |= 0x01;                            // Set P1.0 to output direction
8
9
  __bis_SR_register(LPM0_bits + GIE);       // Enter LPM0 w/ interrupt
10
}
11
12
// Watchdog Timer interrupt service routine
13
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
14
#pragma vector=WDT_VECTOR
15
__interrupt void watchdog_timer (void)
16
#elif defined(__GNUC__)
17
void __attribute__ ((interrupt(WDT_VECTOR))) watchdog_timer (void)
18
#else
19
#error Compiler not supported!
20
#endif
21
{
22
  P1OUT ^= 0x01;                            // Toggle P1.0 using exclusive-OR
23
}

von wv (Gast)


Lesenswert?

Hallo Sven,

ich hab mal Deinen Code 1:1 kopiert und auf ein Launchpad mit G2553 
gespielt.

Bei mir blinkt er....

--wv

von Noob (Gast)


Lesenswert?

wv schrieb:
> Deinen Code ... auf ein Launchpad mit G2553 gespielt

Dazwischen sitzt ja noch etwas.
Ich hatte mal Probleme mit dem TI-Compiler. Ist aber schon lange her.
Evtl. mag wv dein binary auch mal testen...
Viel Erfolg!

von wv (Gast)


Lesenswert?

Ich habs mit CCS 6.2 getestet. Wenn ich nachher Zeit habe, teste ich 
auch mal auf CCS8.
--wv

von wv (Gast)


Lesenswert?

hallo Sven,

ich habs grad nochmal mit CCS8.3 getestet, blinkt ebenfalls.

--wv

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.