Forum: Mikrocontroller und Digitale Elektronik MSP430 Port kann nicht dauerhaft auf High gesetzt werden


von Klaus (Gast)


Lesenswert?

Hallo,

ich habe mal eine Frage.

Ich habe ein Programm geschrieben und setze damit,
verschiedene Port und Pins High.

Das problem an der Sache ist, dass alle funktioniert. Nur Port1.4 und 
Port1.5 tuen das nicht, was sie sollen. Alle anderen funktionieren 
einwand frei.

Ich bin mal mit dem Oszi dran und habe es gemessen.
Sobald ich das Programm laufen lassen, bekommt er sofort eine Highflanke 
für wenige ms und fällt dann wieder ab und bleibt dann auf low.
Da ich ein zweites Board habe, dachte ich, das vielleicht zufällig diese 
beiden Pins defekt sind, aber genau das selbe beim zweiten Board. Kann 
mir jemand weiter helfen??

Es handelt sich um das Board MSP430F5529

Brauchen die beiden Pins eine besondere Einstellung, oder muss ich was 
ausschalten oder einen Jumper versetzen.

Im Datenblat finde ich leider nichts dazu.
Kennt sich jemand aus damit?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Klaus schrieb:
> Kann mir jemand weiter helfen??
Der Fehler könnte im unbekannten Sourcecode liegen...

von Clemens L. (c_l)


Lesenswert?

Klaus schrieb:
> Brauchen die beiden Pins eine besondere Einstellung, oder muss ich was
> ausschalten oder einen Jumper versetzen.

Nein, diese beiden Pins verhalten sich völlig normal, wie alle anderen 
Pins, wenn sie richtig konfiguriert werden. Letzteres ist offensichtlich 
nicht der Fall.

von Joe F. (easylife)


Lesenswert?

Was ist denn an den Pins angeschlossen?

von Jim M. (turboj)


Lesenswert?

Klaus schrieb:
> Es handelt sich um das Board MSP430F5529

Da gibts nur eins? Glaube ich nicht.

Ansonsten: Siehe Schaltplan. An den Pins könnte ja auch noch andere 
Hardware hängen.

von Klaus (Gast)


Lesenswert?

Lothar M. schrieb:
> Klaus schrieb:
>> Kann mir jemand weiter helfen??
> Der Fehler könnte im unbekannten Sourcecode liegen...

Der Sourcecode ist nicht das Problem.

Habe auch einen ganz einfachen code benutzt:


#include <msp430.h>
#include <stdint.h>


#define LED1_HIGH P1OUT = P1OUT|BIT4
#define LED2_HIGH P1OUT = P1OUT|BIT5

int main(void)
{
  WDTCTL = WDTPW | WDTHOLD;
  P1DIR = 0xFF;
  P2DIR = 0xFF;

while (1)
  {
    LED1_HIGH;
    LED2_HIGH;
  }
}

von Stephan W. (swal)


Lesenswert?

Bei sowas würde ich auch prinzipiell erstmal von einem 
Konfigurationsfehler ausgehen. Ohne selbst Ahnung von dem uC zu haben, 
sehe ich im Datenblatt auf Anhieb, das die Pins alternative Funktionen 
haben:

TA0 CCR3 capture: CCI3A input compare: Out3 output

TA0 CCR4 capture: CCI4A input, compare: Out4 output

Sicher, dass dir da nicht ein Capture / Compare eines Timers reinhackt? 
Würde zu der Beobachtung passen, dass sich der Pegel nach einer 
bestimmten Zeit ändert.

: Bearbeitet durch User
von Klaus (Gast)


Lesenswert?

Clemens L. schrieb:
> Nein, diese beiden Pins verhalten sich völlig normal, wie alle anderen
> Pins, wenn sie richtig konfiguriert werden. Letzteres ist offensichtlich
> nicht der Fall.


Joe F. schrieb:
> Was ist denn an den Pins angeschlossen?

Ich bin mit einer LED dran und sie leuchten kurz auf und das wars.
Auch mit dem OSZI, kurzes High Signal und das wars.

von Stefan S. (mexakin)


Lesenswert?

lass mal die pins togglen, also an udn asu und dann teste das im debug 
modus aus, falls du debuggen kannst .

code sieht prinzipiell gut aus, liegt wahrscheinlich an irgendeinem 
Detail.

vlt schreibst du den Code mal aus ohne Makro.

also P1DIR = 0xFF;
P1OUT |= BIT4 + BIT5;

P1OUT ^= BIT4;

irgendeine Reaktion wirst du bekommen.
die MSP pins wollen unter 2mA rausgeben, test mal lieber ohne LED, außer 
du bist dir bei deinen Strömen im klaren.

von Klaus (Gast)


Lesenswert?

Stefan S. schrieb:
> also P1DIR = 0xFF;
> P1OUT |= BIT4 + BIT5;
>
> P1OUT ^= BIT4;



Habe ich gemacht, genau das selbe. Alle anderen Ports funktionieren 
Einwand frei. Kann an jede eine Led anhängen und die leuchten dauerhaft, 
nur diese beiden nicht.

von Klaus (Gast)


Lesenswert?

Stephan W. schrieb:
> Sicher, dass dir da nicht ein Capture / Compare eines Timers reinhackt?
> Würde zu der Beobachtung passen, dass sich der Pegel nach einer
> bestimmten Zeit ändert.

Nein, das sind ja auch noch zwei andere Pins mit der selben Eigentschaft 
und die schalten dauerhaft.

von Joe F. (easylife)


Lesenswert?

Wie groß ist der Vorwiderstand an der LED?

Nachtrag:
ich kenne den Prozessor auch nicht, aber habe ein Stück Code im Netz 
gefunden: http://janvitek.org/vitekj/490s11/Schedule_files/doc.pdf

Da wird noch zusätzlich beim Initialisieren die drive strength auf 
"full" gesetzt, und der Port in die "I/O function" versetzt.
1
//Switch S1
2
P2SEL &= ~0x40; //I/O Function
3
P2DIR &= ~0x40; //P2.6 as input
4
P2REN |= 0x40; //Enable pull resistor 
5
P2OUT |= 0x40; //Enable Pull-Up resistor
6
7
//LED 1
8
P1SEL &= ~0x01; //I/O Function
9
P1DIR |= 0x01; //P1.0 as output
10
P1DS |= 0x01; //Enable Full drive strength

auf deinen Fall übertragen würde das dann wohl bedeuten:
1
int main(void)
2
{
3
  WDTCTL = WDTPW | WDTHOLD;
4
  P1DIR = 0xFF;
5
  P2DIR = 0xFF;
6
7
  P1SEL = 0x00; // I/O function
8
  P2SEL = 0x00;
9
10
  P1DS  = 0xFF; // enable full drive strength
11
  P2DS  = 0xFF;
12
13
  LED1_HIGH;
14
  LED2_HIGH;
15
16
  while (1)
17
    ;
18
}

: Bearbeitet durch User
von Clemens L. (c_l)


Lesenswert?

Klaus schrieb:
> Auch mit dem OSZI, kurzes High Signal und das wars.

Wie lange? 32 ms?

von Georg G. (df2au)


Lesenswert?

Da du ein Scope hast, mach einen einfachen Versuch: Ersetze eine LED 
durch einen 10kOhm Widerstand und sieh dir den Ausgang mit dem Scope an.

von Klaus (Gast)


Lesenswert?

Clemens L. schrieb:
> Klaus schrieb:
>> Auch mit dem OSZI, kurzes High Signal und das wars.
>
> Wie lange? 32 ms?

Also, genau Zeit kann ich nicht messen, weil mein Oszi, diese Funktion 
nicht unterstützt, aber es ist wirklich nur ein kurzes aufleuchten. Mehr 
nicht

von Klaus (Gast)


Lesenswert?

Georg G. schrieb:
> Da du ein Scope hast, mach einen einfachen Versuch: Ersetze eine LED
> durch einen 10kOhm Widerstand und sieh dir den Ausgang mit dem Scope an.

Bringt nicht, genau das selbe Ergebnis, bin ja direkt an den Pin mit dem 
Oszi, selbst wenn kein verbraucher dran hängt, müsste die Spannung am 
Pin anliegen, und das tut es nicht

von Joe F. (easylife)


Lesenswert?

Hast du die PxSEL und PxDS Settings ausprobiert?

von Georg G. (df2au)


Lesenswert?

Klaus schrieb:
> Bringt nicht

Dann ist das aufgespielte Programm anders als das, was du hier gezeigt 
hast oder du hast ein Hardware Problem ausserhalb der CPU.

von Klaus (Gast)


Lesenswert?

Joe F. schrieb:
> Hast du die PxSEL und PxDS Settings ausprobiert?

Nein, habe mal eine Pause gemacht. Morgen geht es direkt weiter und dann 
schreib ich dir.

Georg G. schrieb:
> Dann ist das aufgespielte Programm anders als das, was du hier gezeigt
> hast oder du hast ein Hardware Problem ausserhalb der CPU.

Ich habe nur die Spannungsversorgung und eine LED auf die Ports von P1.4 
auf Masse gelegt. Da kann man nichts falsch machen. Mit den anderen 
PORTS FUNKTIONIERT es ja, nur mit diesem.
Das einzige was ich bisjetzt nachvollziehen kann, ist die Antwort von 
Joe F.

Hat den jemand diesen MSP und kann es mal bei sich selbst testen??

von Dietmar S. (dsausw)


Lesenswert?

Hallo Klaus,

welches Board hast Du denn nun?
Wenn es das experimenter-board ist, sind auf P1.4 und P1.5
LEDs dran.
Und welche Portpins funktionieren?
Überall identische Widerstände?
Mit der drive-strength hat das nichts zu tun.
Schon in der (power-up)reduced-drive-strength können
die Ports P1.X -2mA/+2mA treiben bei 3V Vcc.

Nebenbei: Datenblatt und family-usersguide hast Du?

Gruss
Dietmar

von Klaus (Gast)


Lesenswert?

Dietmar S. schrieb:
> welches Board hast Du denn nun?

Ja das experemtierboard. Msp430f5529.

Ja, habe beides aber nichts dazu gefunden.
Die Leds bei dem Board sind an P1.0
Und P1.2

An P1.4 und P1.5 ist keins dran.

Ich habe selber eine Led Schaltung gebaut mit einem kleinen 
Vorwiderstand.

An P2, P3, P8 an alle funktioniert sie, nur bei den beiden funktioniert 
es nicht.

An P1.6 funktioniert es auch, nur eben diese zwei nicht.

von Dietmar S. (dsausw)


Lesenswert?

Beim experimenter's-board sind definitiv auf P1.4 und P1.5 LEDs.
Oder hast Du ein MSP430F5529 LaunchPad?
Da sind die LEDs auf P1.0 und P4.7.

von wv (Gast)


Lesenswert?

Hallo Klaus

also ich hab hier das MSP-EXP430F5529LP Launchpad von TI rumliegen und 
hab mal den Minimalcode, also nur P1DIR und P1OUT auf high, 
draufgespielt. Die beiden Ausgänge gehen sauber auf 3,28V ohne Last. Mit 
2 LEDs dran und 470Ohm Vorwiderstand immer noch 3,14V und ca. 3mA Strom. 
Also alles normal, P1SEL und P1DS sind nach dem Reset auf 0x00.

Ich denke Du hast da doch irgendeine Last in der Hardware oder Du hast 
den Port zerschossen.

Wie ist die genaue Bezeichnung Deines Boards?

Gruß wv

von Klaus (Gast)


Lesenswert?

wv schrieb:
> also ich hab hier das MSP-EXP430F5529LP Launchpad von TI rumliegen und
> hab mal den Minimalcode, also nur P1DIR und P1OUT auf high,
> draufgespielt. Die beiden Ausgänge gehen sauber auf 3,28V ohne Last. Mit
> 2 LEDs dran und 470Ohm Vorwiderstand immer noch 3,14V und ca. 3mA Strom.
> Also alles normal, P1SEL und P1DS sind nach dem Reset auf 0x00.
>
> Ich denke Du hast da doch irgendeine Last in der Hardware oder Du hast
> den Port zerschossen.
>
> Wie ist die genaue Bezeichnung Deines Boards?

Ja, das dachte ich zunächst auch, aber als ich ein nagelneues 2. Board 
getestet habe, kam mir das ein bisschen spanisch vor...

Habe es jetzt mit P1SEL und P1DS ausprobiert und wieder nichts....

Joe F. schrieb:
> Hast du die PxSEL und PxDS Settings ausprobiert?

Habe es ausprobiert, hat nichts gebracht, schade ......

Dietmar S. schrieb:
> Beim experimenter's-board sind definitiv auf P1.4 und P1.5 LEDs.
> Oder hast Du ein MSP430F5529 LaunchPad?
> Da sind die LEDs auf P1.0 und P4.7.

Die genaue Bezeichnung heist Lunchpad MSP430F5529 Version 1.6

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Klaus schrieb:
> Die genaue Bezeichnung heist Lunchpad MSP430F5529 Version 1.6

Aha. Also kein "Experimenters Board".

Sondern das hier: http://www.ti.com/tool/msp-exp430f5529lp

Es wäre schön, wenn Du keine Phantasiebezeichnungen erfinden würdest.

von DSausW (Gast)


Lesenswert?

Moin Klaus,

also zum Lunch ist das schwer verdaulich- kleiner Scherz!
Du kannst einen Minimaltest durchführen.
Man nehme den Jumper JP8 heraus (Du hast den Stromlaufplan
von LaunchPad vorliegen?).
Dann nimmst Du das Beispiel (Led blinken) von den TI-Beispielen
des Launchpads. Den P1.5 nimmst Du anstatt des P1.0.
P1.0 kannst Du auch als Eingang konfigurieren zum Debuggen.
Dann schliesst Du P1.5 an den Jumper JP8 (die Seite zum Widerstand).
Du arbeitest mit dem CodeComposer?
Wenn Du das laufenlässt, müsste jetzt die LED1 blinken.

Ein Wort zur Zeitabschätzung mit Deinem Osci:
>Also, genau Zeit kann ich nicht messen, weil mein Oszi, diese Funktion
>nicht unterstützt, aber es ist wirklich nur ein kurzes aufleuchten. Mehr
>nicht

Du hast Deine Zeitbasis eingestellt- da gibt es eine Skala mit Angaben-
Auf Deinem Display sind so lustige horizontale und vertikale Linien.
Die vertikalen sind wichtig. Zähle die Kästchen (pi mal Daumen).
Multipliziert mit der Zeiteinheit- fällt Dir etwas auf?

@Rufus: Hör' auf zu meckern ;-)- Du liest doch auf welchem Stand
Klaus noch ist.

von Clemens L. (c_l)


Lesenswert?

Klaus schrieb:
> genau Zeit kann ich nicht messen, weil mein Oszi, diese Funktion
> nicht unterstützt

Dann zeig uns einen Screenshot.

von Joe F. (easylife)


Lesenswert?

Wie hast du denn die LED an den Port angeschlossen?
Hast du immer einen Vorwiderstand benutzt, wenn ja, welchen?

von endlos (Gast)


Lesenswert?

Man, man, man, was für eine schwierige Geburt. Im Simulator läuft das 
einwandfrei. Es liegt also an der Hardware. Wen die anderen Pins gehen, 
sollte der Schaltplan etwas preisgeben. Da gibt es bestimmt pullup 
pulldown oder so.

von Falk B. (falk)


Lesenswert?

Vielleicht ist das Oszi auf AC-Kopplung eingestellt?

duckundwech

von endlos (Gast)


Lesenswert?

oder die Poly-Kleidung hat ihren Tribut gefordert. :-D

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.