Hallo ich habe immer noch ein Problem mit dem Batteriebetrieb beim
MSP430.
Es ist MSP430F1612.
Hab vor ein paar Tagen schon mal gefragt wegen der zugehörigen ISR.
Aber ich denke, es liegt erstmal ein Hardware-Problem vor, deshalb der
neue
Thread.
Meine derzeitige Anbindung ist im Bild zu sehen...
Folgende Messungen habe ich bereits mit nem Multimeter gemacht:
Leerlaufspannung der Batterie: 3,276V (drauf steht 3V)
Aus dem Netzteil kommen, wenn der MSP dran und an ist 3,296V
Wenn die Batterie NICHT dran ist, dann liegen an AVcc 2,994V an.
Ist die Batterie mit in der Schaltung, dann sinds 3,008V.
Wenn die Batterie drin ist, und die Netzspannung wegfällt, liegen an
AVcc 3,127V an.
Was ich jetzt merkwürdig finde, bzw. nicht verstehe:
Ist die Batterie draussen und die Netzspannung an, dann liegen an Punkt
1 von D7 0,77V an. Ist die Netzspannung weg, dann liegen dort 0,74V an.
Wo bitte kommt denn an der Stelle eine Spannung her?
Wenn die Netzspannung wegfällt, dann tut sie das nicht abrupt, sondern
sie fällt langsam! Es dauert wirklich etliche Sekunden, bis sie auf <
0,5V fällt.
Dementsprechend fällt auch das Potential an P2.7 sehr langsam!
Und es liegt bestimmt nicht an der Trägheit des multimeters. Es sind
wirklich bestimmt 15s...
Wenn ich den MSP starte, dann die Batterie rein mache, und dann die
Netzspannung aus mache, dann hab ich eigentlich erwartet, dass das
Programm (vor allem die Uhr) weiterläuft.
Aber nach erneutem zuschalten der Netzspannung macht der MSP wieder ganz
von vorne los.
Und die Uhrzeit lief auch nicht weiter.
Sieht jemand einen offensichtilichen Fehler in der Beschaltung?
Jetzt hab ich grad was seeehr merkwürdiges gefunden:
Wenn keine Batterie in der Schaltung ist, und auch keine Netzspannung
vorhanden ist, dann liegt an Pin64 vom MSP trotzdem 2,43V an.
An P2.7 liegen aber nur mV. Das kann ja nur von den C's kommen, die an
Pin64 anliegen...
Was stimmt da nicht?
Danke
> Ist die Netzspannung weg, dann liegen dort 0,74V an.> Wo bitte kommt denn an der Stelle eine Spannung her?
Eine Diode hat auch einen (geringen) Strom in Sperrichtung.
> Wenn die Netzspannung wegfällt, dann tut sie das nicht abrupt, sondern> sie fällt langsam!
Wo gemessen und wie wird die Netzspannung abgeschaltet (Netzteil aus
oder abgesteckt)?
> Wenn ich den MSP starte, dann die Batterie rein mache, und dann die> Netzspannung aus mache, dann hab ich eigentlich erwartet, dass das> Programm (vor allem die Uhr) weiterläuft.
Wo ist denn dein Reset Pin angeschlossen?
> Das kann ja nur von den C's kommen, die an Pin64 anliegen...
Richtig, daher ist das auch vollkommen normal. Die Ladung kann ja
nirgends hin wenn der MSP so wenig verbraucht.
Jörg S. wrote:
> Wo ist denn dein Reset Pin angeschlossen?
Genau DAS war das Problem! Der Resetschaltkreis wird auch mit den 3,3V
vom Netzteil gespeist. Fällt diese weg, bzw. ist die Netzspannung wieder
da, gibt der dem MSP nen Reset.
Ich habe jetzt die Spannung für den Resetschaltkreis "nach" meinen
beiden Dioden abgenommen, so dass der Schaltkreis notfalls die Vcc von
der batterie bekommt.
Und siehe da, es geht ohne Probleme.
--> manchmal sind die Dinge soooo einfach!
Hmmm, so ganz geht die Sache doch noch nicht.
Ich habe mal die Schaltung mit meinem Resetschaltkreis angehängt.
Das Datenblatt zum TLC7701 gibts hier:
http://focus.ti.com/lit/ds/symlink/tlc7701.pdf
Folgendes passiert:
Die Batterie ist in der Scahltung drin. Ich schalte das Netzteil aus und
warte ne kleine Weile, bis die Spannung am P2.7 auf < 0,5V gesunken ist.
Damit sollte der Interrupt ausgelöst werden, und meine ISR wird
abgearbeitet.
Dann schalte ich wieder ein, und das Gerät läuft genau da weiter, wo ich
es möchte (es wird auf dem Display was anderes angezeigt, als das, was
vor dem Ausschalten zu sehen war).
Warte ich zu kurz vor dem Wiedereinschalten, dann macht er an der Stelle
weiter, an der er aufgehört hat. Genaugenommen hört er wohl nicht
wirklich auf, weil der Interrupt noch nicht ausgelöst wurde.
Warte ich allerdings zu lange, dann fängt der MSP wieder bei Null an,
d.h. er hat nen Reset bekommen.
Jetzt ist die Frage, warum.
Könnte es daran liegen, dass ich dem Resetschaltkreis für die
Betriebspannungsversorgung zusätzlich zu dem im Datenblatt
vergeschlagenen 100nF Kondensator noch einen 10µ Elko spendiert habe?
Was sagen die Experten dazu?
Vielen Dank schonmal
@ Mathias U. (munter)
>warte ne kleine Weile, bis die Spannung am P2.7 auf < 0,5V gesunken ist.>Damit sollte der Interrupt ausgelöst werden, und meine ISR wird>abgearbeitet.
Warum glaubst du, dass der Interrupt erst bei 0,5V ausgelöst wird? Ein
LOW wird typisch schon bei 0,4*Vcc erkannt, hier ca. 1,5V. Um die
fallende Batteriespannung eher zu erkennen, aknnst du ja einen
hochohmigen Spannungsteiler bauen, der bei Normalspannung ca.
0,6...0,7Vcc ausgibt. Damit spricht er schneller auf eine sinkende
Betriebsspannung an.
>Könnte es daran liegen, dass ich dem Resetschaltkreis für die>Betriebspannungsversorgung zusätzlich zu dem im Datenblatt>vergeschlagenen 100nF Kondensator noch einen 10µ Elko spendiert habe?>Was sagen die Experten dazu?
Du musst deine Signale zur Peripherie (LCD etc.) auch schnellstmöglich
auf Null setzen. Sonst versorgt dein MSP über seine Ausgänge und die
Schutzdioden in den ICs die externen ICs. Dabei bricht die
Batteriespannung zusammen, denn diese Lithiumzellen bringen nur recht
kleine Ströme im Bereich von 1..5mA.
MfG
Falk
Ich werde erstmal den 500K gegen Masse für den P2.7 gegen einen 20k
austauschen. Damit ist der Spannungsteiler an der Stelle schon
günstiger, und die fehlende Betriebsspannung wird eher erkannt.
>Du musst deine Signale zur Peripherie (LCD etc.) auch schnellstmöglich>auf Null setzen. Sonst versorgt dein MSP über seine Ausgänge und die>Schutzdioden in den ICs die externen ICs.
Ich versteh jetz nicht genau, was Du damit meinst. Was für Signale
meinst Du?
Ich habe keine Peripherie, die vom MSP mit Spannung versorgt wird.
Das Display geht über 5V. Und die andere Peripherie auch. D.h., wenn das
Netzteil aus ist, bekommen die eh keinen Strom mehr.
Danke
*edit: Ich habe eben mitbekommen, dass nach dem Wiedereinschalten, der
MSP erst kurz da weiter macht, wo er nach der ISR weitermachen soll,
dann bekommt er aber einen Reset...
@ Mathias U. (munter)
>Ich versteh jetz nicht genau, was Du damit meinst. Was für Signale>meinst Du?
Steuersignale vom MSP zur Peripherie.
>Ich habe keine Peripherie, die vom MSP mit Spannung versorgt wird.>Das Display geht über 5V. Und die andere Peripherie auch. D.h., wenn das>Netzteil aus ist, bekommen die eh keinen Strom mehr.
Denkst DU! Überleg mal was passiert, wenn ein Signal zum LCD auf HIGH
(3,3V) liegt und das LCD keinen Saft mehr hat. Stichwort Schutzdioden,
siehe Pegelwandler.
>*edit: Ich habe eben mitbekommen, dass nach dem Wiedereinschalten, der>MSP erst kurz da weiter macht, wo er nach der ISR weitermachen soll,>dann bekommt er aber einen Reset...
Komisch.
MfG
Falk
Falk Brunner wrote:
>>*edit: Ich habe eben mitbekommen, dass nach dem Wiedereinschalten, der>>MSP erst kurz da weiter macht, wo er nach der ISR weitermachen soll,>>dann bekommt er aber einen Reset...>> Komisch.
Ja, das macht er aber auch nur manchmal...also nicht ganz
reproduzierbar.
Die Sache mit den Steuersignalen:
Du meinst also, ich müsste ALLE Steuersignale, bovor sie zu den
Steckverbindern für die Peripherie gehen, per Pull-Down auf Masse legen?
Das wären fürs LCD 10 Stück, dann 5 Steuersignale für Relais und
Analog-Switches, 2 für die AD-Wandler Eingänge, 3 für den PGA.
Was ist mit der SD-Card. Da ist ja sicher auch irgendwas wie ein IC mit
drin, oder?
Ich hab gar keinen Platz mehr, die ganzen R's zu verbauen...
Damn, so ein Mist.
@Falk: könnte der zusätzliche Elko beim TLC7701 für die Betriebsspannung
Probleme machen?
Danke
@ Mathias U. (munter)
>Du meinst also, ich müsste ALLE Steuersignale, bovor sie zu den>Steckverbindern für die Peripherie gehen, per Pull-Down auf Masse legen?
NEIN! Du musst sie im MSP auf LOW setzen, wenn deine ISR angesprungen
wird und in den Sleep Mode schalten will.
>Was ist mit der SD-Card. Da ist ja sicher auch irgendwas wie ein IC mit>drin, oder?
Neeee, ein Marienkäfer ;-)
>Ich hab gar keinen Platz mehr, die ganzen R's zu verbauen...
Die sind auch sinnlos.
>@Falk: könnte der zusätzliche Elko beim TLC7701 für die Betriebsspannung>Probleme machen?
Du meinst C7? Nein, das passt schon.
MfG
Falk
Also R24 würde ich komplett einsparen.
30µF an der 3,3V Leitung sind auch schon recht viel wenn nur der MSP
dadurch versorgt wird.
Wie sieht denn der Rest der Schaltung aus? Die Peripherie läuft mit 5V
weiter und der MSP nur mit Batterie???
Jörg S. wrote:
>Die Peripherie läuft mit 5V weiter und der MSP nur mit Batterie???
Nee, alle Betriebsspannungen gehen aus, sobald der Netzschalter aus
gemacht wird.
Der MSP wird dann nur per Batterie versorgt, der Uhrzeit wegen...
Also ich habe jetzt den 500k gegen einen 20k Widerstand ausgetauscht.
Ich habe auch in meine ISR alle Pins aller Ports auf Null gesetzt, bevor
er in den LPM3 gehen soll, aber so recht funktionieren tut es immer noch
nicht.
hier mal meine ISR:
1
#pragma vector=PORT2_VECTOR
2
__interruptvoidPort2_Interrupt(void)
3
{
4
P2IFG=0;// flag wird zurueckgesetzt
5
6
if((P2IES&INTERRUPT_P2_7)==1)// wenn high --> low
7
{
8
// mache die notwendigen Operationen für den Shutdown
9
P1OUT=0x00;
10
P2OUT=0x00;
11
P3OUT=SPI_CS;
12
P4OUT=0x00;
13
P5OUT=0x00;
14
P6OUT=0x00;
15
gehe_in_LPM3=1;// flag fuer main() setzen
16
P2IES&=~INTERRUPT_P2_7;// P2IFG wird gesetzt bei low --> high
17
}
18
else
19
{
20
gehe_in_LPM3=0;// flag zuruecksetzen
21
LCD_Init();// LCD initialisieren ...
22
LCD_Clear();// ...loeschen, cursor an anfang
23
24
Seite=3;// zeigt die uhrzeit an...
25
pga_auf_wert(PGA_Wert_Gain_eff_A_max);// pga auf max. gain fuer a-wichtung setzen
26
P2IES|=INTERRUPT_P2_7;// P2IFG wird gesetzt bei high --> low
27
LPM3_EXIT;
28
}
29
}
Der PinChangeInterrupt ist folgendermaßen initialisiert:
1
P2IES|=0x80;// high --> low bei P2.7 an
2
P2IE|=0x80;// interrupt an P2.7 an
3
BIS_SR(GIE);// allgemeiner Interrupt an
Ich finde es auch sehr sehr merkwürdig, dass:
Wenn das Gerät läuft, und ich dann die Spannung an P2.7 messen will,
dann macht er GENAU die Sachen, die im else-Zweig meiner ISR stehen.
Er scheint beim Berühren der Messspitze an den Pin einen Interrupt zu
bekommen, der aber nicht von high --> low geht, weshalb er in den
anderen Zweig rutscht.
Wenn ich das Gerät ausschalte, und dann wieder ein, dann zeigt er mir
kurzzeitig die "Seite 3" auf dem Display, mach dann aber ein Reset.
Vorhin hat er wenigstens nach knapp 10s ausgeschatet sein und wieder
anschalten die ISR korrekt abgearbeitet.
Jetzt macht er ständig diesen Blödsinn...
Hat noch jemand eine Idee?
Danke
*edit:
So langsam wirds unheimlich:
Manchmal zeigt er mir bei Einschalten einen Text, der eigentlich beim
Hochfahren des MSP angezeigt wird...die komplette init_mcu() wird aber
nicht durchlaufen, weil er da noch andere Sachen anzeigt, und dann geht
er auf die Seite, die im else-Zweig der ISR steht, lässt die Uhrzeit
aber vom default-Wert loslaufen...
Er fängt also mit der init_mcu() an, bekommt dann nen Interrupt an P2.7
und macht dann weiter...das begreif ich nicht.
@ Mathias U. (munter)
>er in den LPM3 gehen soll, aber so recht funktionieren tut es immer noch>nicht.
Tjaaaaa.
>> if((P2IES & INTERRUPT_P2_7) == 1) // wenn high --> low
Hast du mal überlegt, wie die einzelnen Werte aussehen? Und wie da 1
rauskommen soll? Diese Bedingung ist IMMMER falsch, demzufolge wird der
True Zweig NIE ausgeführt.
P2IES ist 0x00 oder 0x80
INTERRUPT_P2_7 ist sicherlich 0x80
Was du hier willst, ist ein
1
if(P2IES&INTERRUPT_P2_7)
Diese Ausdruck wird LOGISCH ausgewertet, nicht numerisch
== 0x00 -> true
!= 0x00 -> false
;-)
> gehe_in_LPM3 = 0; // flag zuruecksetzen
Das sollte sinnvollerweise in der main-Schleife passieren. Ist
strategisch besser.
>Wenn das Gerät läuft, und ich dann die Spannung an P2.7 messen will,>dann macht er GENAU die Sachen, die im else-Zweig meiner ISR stehen.>Er scheint beim Berühren der Messspitze an den Pin einen Interrupt zu>bekommen, der aber nicht von high --> low geht, weshalb er in den>anderen Zweig rutscht.
Was für ein Messgerät hast du denn? Ein normales Digitalmultimeter mit
10 MOhm Eingangswiderstand darf bei dem Spannungsteiler eigentlich
keinen Interrupt auslösen. Ich hoffe du misst im Spannungsmessbereich,
nicht im Strommessbereich . . .
>Jetzt macht er ständig diesen Blödsinn...
Verständlich.
MfG
Falk
>if(P2IES & INTERRUPT_P2_7)
Hab die Sache mal so abgeändert, aber es hat nur kurz was gebracht.
Der MSP hat die ersten paar Male nach dem Einschalten die "Seite 3" mit
der Uhrzeit angezeigt, allerdings nie mit der vor dem Ausschalten
eingestellten Zeit. Er fing aber auch nicht bei default an (default ist
1:00:00), sondern mal bei 1:00:04 mal etwas weiter...
Jetzt macht er nach jedem Einschalten immer einen Reset, fängt also bei
Null an.
Hab auch schon die Batterie rein und raus gemacht, und auch manuell, per
Taster, neu gestartet, aber das bringt alles nix.
>Was für ein Messgerät hast du denn?
Es ist ein Metrix MX54, das sollte reichen...
Ich habe es gearde noch einmal getestet: Sobald ich mit der Mess-spitze
an P2.7 komme, dann macht er das, was im else-Zweig der ISR steht!!!
Und JA, ich messe Spannungen, keine Ströme.
Mal was anderes: Für den TimerA ist ja nur der ACLK notwendig, oder?
Weil der MCLK usw. wird ja beim LPM3 ausgeschalten...
So langsam bin ich am verweifeln...Das kann doch nicht so schwierig
sein...
@ Mathias U. (munter)
>Der MSP hat die ersten paar Male nach dem Einschalten die "Seite 3" mit>der Uhrzeit angezeigt, allerdings nie mit der vor dem Ausschalten>eingestellten Zeit. Er fing aber auch nicht bei default an (default ist>1:00:00), sondern mal bei 1:00:04 mal etwas weiter...
Ohne das Gesamtprogamm zu sehen kann man da nicht viel zu sagen.
>Jetzt macht er nach jedem Einschalten immer einen Reset, fängt also bei>Null an.
Stimmt der Name des ISR Vektors?
>Hab auch schon die Batterie rein und raus gemacht, und auch manuell, per>Taster, neu gestartet, aber das bringt alles nix.
Dann ist noch ein prizipielles Problem da.
>>Was für ein Messgerät hast du denn?>Es ist ein Metrix MX54, das sollte reichen...>Ich habe es gearde noch einmal getestet: Sobald ich mit der Mess-spitze>an P2.7 komme, dann macht er das, was im else-Zweig der ISR steht!!!>Und JA, ich messe Spannungen, keine Ströme.
Hast du mal dein Verdrahtung geprüft. Könnte auch ne kalte Lötstelle
sein. Und probier mal, das Flag am ENDE der ISR zu löschen.
P2IFG = 0; // flag wird
zurueckgesetzt
Denn durch das Umschalten der Flanke kann ein neuer Interrupt generiert
werden, ohne dass ein Pegelwechsel stattfindet!
>Mal was anderes: Für den TimerA ist ja nur der ACLK notwendig, oder?
Wenn er darauf konfiguriert ist.
>So langsam bin ich am verweifeln...Das kann doch nicht so schwierig>sein...
Locker bleiben. Tee trinken. Oder Bier. Je nach Geschmack.
MFG
Falk
So, ich habe eine neue Erkenntnis:
Wenn ich mit mit der Messspitze meines MM an P2.7 komme, dann kommt ein
Interrupt, der if-Zweig wird durchlaufen, das Dislpay bleibt dort
stehen, wo es gerade ist...die Uhrzeit läuft auf dem Display nicht
weiter, ABER:
Beim nochmaligen Berühren von P2.7 kommt noch ein Interrupt.
Diesmal wird der else-Zweig durchlaufen, denn dann macht er genau das,
was im else-Zweig drin steht. Die Uhrzeit ist im Hintergrund
weitergelaufen...
Dabei ist es egal, ob das MM an oder aus ist, und ob das Ding
Masse-Bezug hat, ist auch Wurscht.
Scheint also was hardwaremäßiges zu sein...
Es wird *hoffentlich ne kalte Lötstelle sein. Aber das werde ich morgen
mal durchtesten. Bitte, bitte, lass es eine kalte Lötstelle sein!!!
>Was du hier willst, ist ein>if(P2IES & INTERRUPT_P2_7)>Diese Ausdruck wird LOGISCH ausgewertet, nicht numerisch>== 0x00 -> true>!= 0x00 -> false
Und weiter gehts:
Ist es nicht genau anders herum?
True ist doch gleichbedeutend mit einem Wert ungleich Null...?
Wo ist denn bei
>if(P2IES & INTERRUPT_P2_7)
der Vergleich? Das ist doch nur ein bitweises UND...
Wird da auf == 0x00 oder !=0x00 getestet?
Ich werd mich jetzt mal auf die Suche nach einer kalten Lötstelle
machen.
> Wo ist denn bei> >if(P2IES & INTERRUPT_P2_7)> der Vergleich? Das ist doch nur ein bitweises UND...
Richtig. Und wenn bei der UND Verknüpfung was positives rauskommt ist
die if Bedingung erfüllt.
Gut, also an einer schlechten Lötstelle liegt es wahrscheinlich
auchnicht.
Die sah zwar nicht so gut aus, habs ausgebessert, aber das Problem ist
immer noch da.
Ich habe mal die Spannung am Reset-Eingang (Pin 58) des MSP verfolgt.
Wenn die Netzspannung an ist, dann liegt sie bei relatic konstanten
2,96V.
Sie schwankt ganz leicht aber 2,9V sind es auf jeden Fall.
Mache ich jetzt die Netzspannung aus, dann geht die Spannung am Reset
runter.
Die Spannung sinkt allmälig...
Und dann plötzlich sinkt sie auf 1,8V und springt dann öfter zwischen
1,8V und 2,2V hin un her.
Das darf doch nicht sein.
Der TLC7701 muss doch, wenn er seine Betriebspannung bekommt, den
Reset-Ausgang (Pin 5) auf gleichem Potential lassen, oder?
Ausser natürlich V(sense) geht unter die Schwellspannung von 1,1V für
den TLC7701.
Habe gerade bemerkt, dass der Spannungsteiler vor dem Sense-Eingang des
TLC7701 nicht so wirklich sinnvoll ist in meiner Anwendung.
Ich werde den mal rausmachen...
@ Mathias U. (munter)
>Habe gerade bemerkt, dass der Spannungsteiler vor dem Sense-Eingang des>TLC7701 nicht so wirklich sinnvoll ist in meiner Anwendung.>Ich werde den mal rausmachen...
???
Vielleicht mal nachrechnen? Der ist im Moment auf ~2,5V Triggerspannung
eingestellt. Und verbraucht ca. 11uA. Könnte weniger sein, aber passt
schon.
MfG
Falk
@Falk:
??? Spannungsteiler 150k über 120k ergibt bei mir:
Ua = Ue*(120k)/(150k + 120k) = 0,444*Ue
Das ergibt bei knapp 3V am Eingang knapp 1,33V am Sense-Eingang.
Wie kommst Du auf ~2,5V??
@ Mathias U. (munter)
>Das ergibt bei knapp 3V am Eingang knapp 1,33V am Sense-Eingang.>Wie kommst Du auf ~2,5V??
Weil die Schaltschwelle beim TLC7701 1,1V beträgt.
MfG
Falk
Nochmal was Softwaremäßiges:
> gehe_in_LPM3 = 0; // flag zuruecksetzen>Das sollte sinnvollerweise in der main-Schleife passieren. Ist strategisch >besser.
Warum?
Dann müsste ich das in meiner main() nach JEDEM Funktionsaufruf
machen...
1
voidmain(void)
2
{
3
for(;;)
4
{
5
if(gehe_in_LPM3!=1)
6
{
7
funktion_1();
8
gehe_in_LPM3=0;
9
}
10
else{LPM3;}
11
if(gehe_in_LPM3!=1)
12
{
13
funktion_2();
14
gehe_in_LPM3=0;
15
}
16
else{LPM3;}
17
18
usw...
19
}
20
21
}
Da finde ich es sinniger, es EINMAL in der ISR zu machen, wenn der LPM3
verlassen wird.
@ Mathias U. (munter)
>Warum?>Dann müsste ich das in meiner main() nach JEDEM Funktionsaufruf>machen...
Ist so sowieso nicht korrekt. Es müsste VOR dem LPM3; gelöscht werden,
nicht nach der Funktion denn dort ist es bereits 0 ;-)
>Da finde ich es sinniger, es EINMAL in der ISR zu machen, wenn der LPM3>verlassen wird.
Kann man schon machen. Ist die Variable als volatile deklariert?
MfG
Falk
>Ist so sowieso nicht korrekt. Es müsste VOR dem LPM3; gelöscht werden,>nicht nach der Funktion denn dort ist es bereits 0 ;-)
Nein, ist es nicht, denn wenn ich "gehe_in_LPM3" nicht in meiner ISR
lösche, dann bleibt es ja erstmal "1".
Ist jetzt die Betriebspannung wieder da, dann macht ja der MSP an der
Stelle weiter, wo er vorher aufgehört hat, also in *irgendeiner
Funktion.
Und wenn er mit dieser Funktion fertig ist, DANN muss doch die Variable
zurückgesetzt werden, damit bei der nächsten Abfrage nicht schon wieder
in den LPM3 geschalten wird.
>Ist die Variable als volatile deklariert?
Nein, ist sie nicht. Warum, was hätte das für einen Vorteil, bzw. was
zeigt das volatile an?
@ Mathias U. (munter)
>Nein, ist es nicht, denn wenn ich "gehe_in_LPM3" nicht in meiner ISR>lösche, dann bleibt es ja erstmal "1".
Eben, und wie soll dann der True zweig des If() erreicht werden?
>Ist jetzt die Betriebspannung wieder da, dann macht ja der MSP an der>Stelle weiter, wo er vorher aufgehört hat, also in *irgendeiner>Funktion.
Was bringt dich zu der irrigen Annahme? Er macht NACH dem LPM3; weiter!
>>Ist die Variable als volatile deklariert?>Nein, ist sie nicht. Warum, was hätte das für einen Vorteil, bzw. was>zeigt das volatile an?
Sie muss! Denn sonst kann es pasieren, dass dir der Compiler mächstig
ins Handwerk pfuscht!
Interrupt
MfG
Falk
Gut, dass hab ich jetzt auch verstanden...
Habe die Variable jetzt volatile gemacht. Gebracht hat es leider nix.
Manchmal geht es, aber wenn ich zu lange warten mit dem
Widereinschalten, dann bekommt der MSP nen kompletten Reset, aber seit
ich die beiden Widerstände vom Spannungsteiler vom TLC7701 rausgemacht
habe, bleibt er dann beim Initialisieren hängen.
Gebe ich ihm per Taster nen Reset, dann gehts...
Irgendwo nicht ganz logisch die ganze Sache...
@ Mathias U. (munter)
>ich die beiden Widerstände vom Spannungsteiler vom TLC7701 rausgemacht>habe, bleibt er dann beim Initialisieren hängen.
Ohhh Mann! Und der Pin hängt nun in der Luft? Nicht wirklich gut.
>Gebe ich ihm per Taster nen Reset, dann gehts...>Irgendwo nicht ganz logisch die ganze Sache...
Ja, hör mal mit der Rumstochern auf und teste solide.
MfG
Falk
@ Mathias U. (munter)
>Nein, den hab ich schon mit Vcc verbunden... ;-) Wie es im Datenblatt>vorgeschlagen wurde...
Damit wird aber schon bei 1,1V der Reset losgelassen (plus
Verzögerungszeit ggf.)
Hmmm.
MfG
Falk
Ich würde nicht sagen "schon", sondern eher "erst", weil die Spannung ja
sinkt (naja, im Idealfall bleibt sie am Sense-Eingang gleich durch die
Batterie, und ÜBER den 1,1V)
Wichtig ist das ja wiirklich nur beim allerersten Mal, wenn das Gerät
eingeschalten wird.
Dann bleibt der MSP idealerweise ja ständig unter Spannung (durch die
Batterie). D.h. der TLC7701 generiert erst dann wieder einen Reset,
wenn:
1) der Reset-Taster gedrückt wird, oder
2) die Batterie völlig leer ist.
Aber wenn die Bat. leer ist, und die V(sense) 1,1V errcith hat, dann ist
der MSP ja eh schon aus.