Hallo zusammen!
Ich habe ein Problem mit meinem Mikrocontroller und zwar geht es um den
Reset. Es ist ein MSP430F2011.
Der Reset ist über 47k an Vcc und hat momentan einen 2n2 Kondensator
gegen Masse.
Wenn ich die Versorgung trenne, dann wackelt der uC kurz an einem Pin,
bevor er ausgeht. Das sollte ja eigentlich nicht sein. Es stellt auch
ein Problem da, da dort ein Motor dran hängt, welcher dann kurz zuckt.
ABER: Wenn ich den Programmieradapter mit dran habe, so passiert das
nicht (ez430f2013). Also der beeinflusst den Reset irgendwie in
positiver Weise.
Kann mir da vielleicht einer helfen?
Hallo,
wenn der Programmieradapter mit an der Versorgung hängt, wird natürlich
mehr Leistung entnommen -> evtl. sinkt dadurch die Versorgungsspannung
beim abstecken schnell genug, damit der MSP nicht mehr anläuft?
Vielleicht macht der Adapter auch seltsame Sachen am Reset, wenn man ihm
langsam den Saft abdreht. Oder er benutzt ne Brown-Out-Detection, so
dass sich der Programmieradapter irgendwann abschaltet, die
Versorgungsspannung geht nochmal hoch, der MSP läuft nochmal kurz an.
Woran auch immer es liegt: Brown-Out-Detection ist nie ne schlechte
Idee. Hat der MSP sowas?
Gruß, Alex
Ja, alle Modelle haben einen! Nur wie gesagt, dachte das wäre
standardmäßig eingeschaltet, so hatte ich es zumidnest verstanden -
scheinbar hab ich das falsch verstanden.
Jetzt hast du mich erwischt. Ist anders als beim AVR, beim MSP430, wenn
vorhanden, dann immer aktiv.
[zitat http://focus.ti.com/lit/ml/slad011/slad011.pdf]
The MSP430 introduced the industry’s first ultra-low power BOR
protection feature.
The brown-out reset (BOR) function forces a MCU into reset both on
power-up when VCC rises and when VCC falls below the normal operating
range, but not fully to ground.
While BOR protection is not unique, the MSP430 features a unique
low-power implementation that is in the nA range. This makes BOR
practical for all applications including those that are extremely low
power. The MSP430 BOR function is so low power that it is always-on and
active even in all low-power modes. This ensures the most reliable
performance possible.
Competitor’s BOR protection is in the 10-50uA range, which is not usable
in ultra-low power battery powered applications. This leaves the
application vulnerable to BOR conditions.
[/zitat]
Allerdings gibt es Berichte über "mäßige Funktion" und "besser externen
Resetcontroller nehmen" z.B. Beitrag "MSP430-Anfängerfrage"
ADD:
Hinweise zum externen Supply Voltage Supervisor (SVS)
http://focus.ti.com/lit/ml/slap126/slap126.pdf
Darf ich mal nach fragen wie der Motor Treiber angeschlossen ist? Hängt
der zufällig mit an einem Pin für den Programmieradapter? Kann es sein
dass der Ausgang hochomig wird und dein Treiber dann kurzeitig einen
nicht definierten Zustand am Eingang hat?
Es könnte sein dass Dein Programmieradaper für einen definierten Pegel
sorgt und darum nichts passiert. Wenn dem so ist dann hilft ganz einfach
ein Widerstand um den Treiber sicher zu sperren wenn der Ausgang
hochomig wird.
Wolfgang Heinemann schrieb:> Wenn dem so ist dann hilft ganz einfach> ein Widerstand um den Treiber sicher zu sperren wenn der Ausgang> hochomig wird.
Also erstmal nein, ich programmiere über SBW - die Pins kann man
garnicht anders zweckentfremden. Daran liegt es also nicht.
Zu deinem Text - meinst du damit Widerstände von den Basen nach GND? Ich
benutze ein ULN2003, der hat die Pull-Down-Rs ja schon integriert, der
definierte Pegel sollte da sein.
Aber das mit dem Programmiergerät wundert mich auch.
Ich muss das hier leider nochmal aufwärmen...
Kann sich vielleicht jemand mal meine Initialisierung der Ports
angucken? Ob da vielleicht der Fehler liegt? Das ist hier echt ein
Problem mit meinem zuckenden Motor beim Aus- wie auch beim Einschalten.
Für alle, die die Thematik hier nicht kennen, ganz kurz:
MSP430F2011 wackelt beim Ein- und Ausschalten an einem Pin, an dem ein
Motortreiber hängt. Der Motor zuckt dadurch leider kurz, was sehr stört.
Der interne Brownout des uCs scheint daran Schuld zu sein - einen
externen kann ich leier nicht mehr einbauen, da alles schon auf der
Platine sitzt. Ich hatte beim experimentieren immer den Debugger dran -
mit Debugger verläuft der Reset ohne Probleme, kein Mux.
Ist meine Initialisierung so korrekt?
1
P1SEL=0x00;// Port 1 GPIO [1100 0000]
2
P1REN=0x3F;// P 1.0,1,2,3,4,5 Pull-Rs [0011 1111]
3
P1OUT=0x3C;// P 1.0,1 Pull-Down-Rs; P 1.2,3,4,5 Pull-Up-Rs [0011 1100]
4
P1DIR=0xC0;// P 1.0,1,2,3,4,5 Eingang; P 1.6,7 Ausgang
5
P1IFG=0x00;// Port 1 Interrupt-Flags loeschen
6
7
P2SEL=0x00;// Port 2 GPIO [0000 0000]
8
P2REN=0xC0;// P 2.6,7 Pull-Rs [1100 0000]
9
P2OUT=0xC0;// P 2.6,7 Pull-Up-Rs [1100 0000]
10
P2DIR=0x00;// Port 2 Eingang [0000 0000]
11
P2IFG=0x00;// Port 2 Interrupt-Flags loeschen
Ich schreib erst an den Port und deklariere ihn dann als Ausgang.