Forum: Mikrocontroller und Digitale Elektronik MSP430: Aufwachen funktioniert nur bei LPM0 und LPM1


von Andreas V. (Firma: IGL) (andreas_va)


Lesenswert?

Hallo zusammen,

ich habe folgenden Code der allerdings nur mit LPM0 und LPM1 
funktioniert:
1
#include <msp430.h> 
2
#include <msp430g2553.h>
3
#include "TI_USCI_I2C_master.h"
4
5
unsigned long cnt1 = 0; 
6
void main( void )
7
{
8
  while(1)
9
  {  
10
    WDTCTL = WDTPW + WDTHOLD;             // Stop WDT
11
    _EINT();
12
   
13
   // Timer A configuration
14
   TA0CCTL0 = CCIE; // Enable interrupts
15
   // TASSEL_2: Set clock to internal DCO
16
   // MC_1    : TA0CCR0 ist Frequenzteiler (Zähler)
17
   // ID_3    : divide by 8
18
   // TAIE    : Interrupts
19
   TA0CTL = TASSEL_2 + MC_1 + ID_3; // + TAIE; 
20
   TA0CCR0 =  15535; // bei MC_1 Frequenzteiler (Zähler)
21
  
22
   __bis_SR_register(GIE + LPM1_bits); 
23
   }
24
   return;
25
}
26
27
#pragma vector=TIMERA0_VECTOR
28
__interrupt void Timer_A (void)
29
{
30
  if (cnt1 > 100)
31
  {
32
    cnt1 = 0;
33
  __bic_SR_register_on_exit(LPM1_bits + GIE);
34
  }
35
  cnt1++;
36
}

Den gleichen Effekt habe ich mit dem Watchdog (funktioniert nur mit LPM0 
und LPM1).

Was muss ich ändern damit der Code auch unter LPM2 und höher 
funktioniert?

Liegt es vielleicht an den gesetzten Werten von TA0CCTL0?
Welchen Denkfehler begehe ich?

von Clemens L. (c_l)


Angehängte Dateien:

Lesenswert?

Andreas V. schrieb:
> // TASSEL_2: Set clock to internal DCO

Korrekt wäre "Set clock source to SMCLK".

Und Abschnitt 2.3 des User's Guide sagt:
> The low-power modes 0 to 4 are configured with the ... bits in the status
> register. [...]
> When setting any of the mode-control bits, the selected operating mode
> takes effect immediately (see Figure 2-9). Peripherals operating with any
> disabled clock are disabled until the clock becomes active.

In LPM2 wird SMCLK angehalten. Du solltest dich freuen, dass der Timer 
jetzt überhaupt keinen Strom mehr verbraucht. ?

Wenn der Timer in LPM2 laufen soll, dann brauchst du ACLK als Clock 
Source. (Und das spart Strom nur, weil ACLK mit LFXT1/VLOCLK statt dem 
DCO läuft.)
Du könntest auch SMCLK auf die selbe Clock wie ACLK konfigurieren, dann 
wäre der Stromverbrauch in LPM0 und LPM2 der selbe.

von Andreas V. (Firma: IGL) (andreas_va)


Lesenswert?

Das bedeutet:

- Mit der internen Clock bring ich den MSP430 aus LPM2 und höher nicht 
mehr zum Aufwachen!

- Einzige Möglichkeit den MSP430 aus LPM2 und höher wieder zum Leben zu 
erwecken ist ein externe Taktquelle.

=> Standalone macht dann nur noch LPM0 und LPM1 Sinn, weil eine extra 
Taktquelle auch Strom verbraucht. Bei einer ohnehin vorhandenen Clock 
ist das naürlich super!

=> Ein System das keinen Strom verbraucht macht auch nix!

Habe ich das richtig verstanden?

von Clemens L. (c_l)


Angehängte Dateien:

Lesenswert?

Andreas V. schrieb:
> - Mit der internen Clock bring ich den MSP430 aus LPM2 und höher nicht
> mehr zum Aufwachen!

Doch, mit VLO → ACLK → Timer.

> Standalone macht dann nur noch LPM0 und LPM1 Sinn, weil eine extra
> Taktquelle auch Strom verbraucht.

Laut Datenblatt braucht der DCO 30× mehr Strom als ein 32kHz-Quarz an 
LFXT1.

: Bearbeitet durch User
von Andreas V. (Firma: IGL) (andreas_va)


Angehängte Dateien:

Lesenswert?

Danke für die Info!
Der User Guide des MSP430 ersetzt wirklich jede Literatur. Selten las 
ich bessere Doku. Das Blockbild der Oszillatoren (siehe Anhang) hat es 
echt gebracht.

Ich ersetzte den Code oben durch folgenden und es funktioniert.
1
#include <msp430.h> 
2
#include <msp430g2553.h>
3
#include "TI_USCI_I2C_master.h"
4
unsigned long cnt1 = 0; 
5
6
void main( void )
7
{
8
  while(1)
9
 {  
10
  WDTCTL = WDTPW + WDTHOLD;    // Stop WDT
11
  _EINT(); 
12
 
13
  // Timer A configuration
14
  TA0CCTL0 = CCIE; // Enable interrupts
15
  // TASSEL_1: Set clock to internal DCO
16
  // MC_1    : TA0CCR0 ist Frequenzteiler (Zähler)
17
  // ID_1    : divide by 1
18
  // TAIE    : Interrupts
19
  TA0CTL = TASSEL_1 + MC_1 + ID_1; // + TAIE; 
20
  TA0CCR0 =  65535; // bei MC_1 Frequenzteiler (Zähler)
21
 
22
  BCSCTL3 |= LFXT1S_2; // VLO setzen   
23
24
  // WDT Timer
25
  WDTCTL = WDT_MDLY_8;
26
27
  // enable interrupts
28
  IE1 |= WDTIE;
29
  __bis_SR_register(GIE + LPM3_bits);
30
  } 
31
  return;
32
}
33
34
//__interrupt void Timer_A0 (void)
35
#pragma vector=TIMERA0_VECTOR
36
__interrupt void Timer_A (void)
37
{
38
  cnt1 = 0;
39
  __bic_SR_register_on_exit(LPM4_bits | GIE); // zurück in aktiven Modus 
40
  cnt1++;
41
}
42
43
#pragma vector=WDT_VECTOR
44
__interrupt void WDT_ISR (void)
45
{
46
  static unsigned int cnt = 0;
47
  cnt++;
48
  __bis_SR_register_on_exit (LPM4_bits | GIE);
49
}

Ich konnte den Stromverbrauch auf 3,3µA (LPM3) senken. Er läuft jetzt 
aber auch erheblich langsamer!

Allerdings bleibt er im LPM4 immer noch hängen und wacht nicht auf!

Der MSP430 hat mir schon immer gefallen, aber momentan werde ich ein 
richtiger Fan von dem Teil.

Gerade bin ich am Überlegen ob man eine Low Energy RTC wie die 
RV-1805-C3   anzapfen kann. Ein System ohne RTC ist oft schwierig...

Ich hoffe ich kann mit meinem Beitrag auch weiterhelfen!

: Bearbeitet durch User
von Dummschwaetzer (Gast)


Lesenswert?

es gibt doch MSPs mit Low Energy RTC

von Clemens L. (c_l)


Lesenswert?

Andreas V. schrieb:
> Allerdings bleibt er im LPM4 immer noch hängen und wacht nicht auf!

Im LPM4 gibt es ja auch keine Clocks mehr; Aufwachen geht nur, wenn ein 
externes Signal am Pin wackelt.

von Wolle G. (wolleg)


Lesenswert?

Andreas V. schrieb:
> Gerade bin ich am Überlegen ob man eine Low Energy RTC wie die
> RV-1805-C3   anzapfen kann.

Wenn Du es geschafft hast, würde ich gern davon etwas absahnen.
Ich möchte den 32,7kHz Quarz des MSP430 irgendwie durch den genaueren 
und kalibrierten RV1805 ersetzen.
Viel Erfolg.

von while (1) not needed (Gast)


Lesenswert?

Andreas V. schrieb:
> void main( void )
> {
>   while(1)
>  {
>   WDTCTL = WDTPW + WDTHOLD;    // Stop WDT
>   _EINT();
>
>   // Timer A configuration
>   TA0CCTL0 = CCIE; // Enable interrupts
>   // TASSEL_1: Set clock to internal DCO
>   // MC_1    : TA0CCR0 ist Frequenzteiler (Zähler)
>   // ID_1    : divide by 1
>   // TAIE    : Interrupts
>   TA0CTL = TASSEL_1 + MC_1 + ID_1; // + TAIE;
>   TA0CCR0 =  65535; // bei MC_1 Frequenzteiler (Zähler)
>
>   BCSCTL3 |= LFXT1S_2; // VLO setzen
>
>   // WDT Timer
>   WDTCTL = WDT_MDLY_8;
>
>   // enable interrupts
>   IE1 |= WDTIE;
>   __bis_SR_register(GIE + LPM3_bits);
>   }
>   return;
> }
1
void main( void )
2
{
3
  WDTCTL = WDTPW + WDTHOLD;    // Stop WDT
4
  _EINT(); 
5
 
6
  // Timer A configuration
7
  TA0CCTL0 = CCIE; // Enable interrupts
8
  // TASSEL_1: Set clock to internal DCO
9
  // MC_1    : TA0CCR0 ist Frequenzteiler (Zähler)
10
  // ID_1    : divide by 1
11
  // TAIE    : Interrupts
12
  TA0CTL = TASSEL_1 + MC_1 + ID_1; // + TAIE; 
13
  TA0CCR0 =  65535; // bei MC_1 Frequenzteiler (Zähler)
14
 
15
  BCSCTL3 |= LFXT1S_2; // VLO setzen   
16
17
  // WDT Timer
18
  WDTCTL = WDT_MDLY_8;
19
20
  // enable interrupts
21
  IE1 |= WDTIE;
22
23
  __bis_SR_register(GIE + LPM3_bits);
24
// endless loop not needed
25
26
  return;
27
}

//__interrupt void Timer_A0 (void)
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
  cnt1 = 0;
  cnt1++;
}

#pragma vector=WDT_VECTOR
__interrupt void WDT_ISR (void)
{
  static unsigned int cnt = 0;
  cnt++;
}

von Andreas V. (Firma: IGL) (andreas_va)


Angehängte Dateien:

Lesenswert?

wolle g. schrieb:
> Andreas V. schrieb:
>> Gerade bin ich am Überlegen ob man eine Low Energy RTC wie die
>> RV-1805-C3   anzapfen kann.
>
> Wenn Du es geschafft hast, würde ich gern davon etwas absahnen.
> Ich möchte den 32,7kHz Quarz des MSP430 irgendwie durch den genaueren
> und kalibrierten RV1805 ersetzen.
> Viel Erfolg.

Schau Dir mal slaa225a, Seite 1 an!

siehe Anhang!

Ich teste gerade den TinyRTC. Der scheint über 10 Jahre zu halten.
Die Angaben in den Datenblättern scheinen falsch zu sein. Wenn eine 
Batterie 48mAh hat (siehe 
https://www.sparkfun.com/datasheets/Components/DS1307.pdf) und 10 Jahre 
im TinyRTC hält, dann braucht das Teil 0,5µA!

von Andreas V. (Firma: IGL) (andreas_va)


Lesenswert?

wolle g. schrieb:
> Wenn Du es geschafft hast, würde ich gern davon etwas absahnen.
> Ich möchte den 32,7kHz Quarz des MSP430 irgendwie durch den genaueren
> und kalibrierten RV1805 ersetzen.
> Viel Erfolg.

Beim DS1307 kann man die Frequenz an SQW/OUT abgreifen.

siehe https://www.sparkfun.com/datasheets/Components/DS1307.pdf

Und zwar je nachdem was im Control Register eingestellt ist zwischen 1Hz 
und 32768Hz.

von Andreas V. (Firma: IGL) (andreas_va)


Lesenswert?

while (1) not needed schrieb:
> Andreas V. schrieb:
>> void main( void )
>> {
>>   while(1)
>>  {
>>   WDTCTL = WDTPW + WDTHOLD;    // Stop WDT
>>   _EINT();
>>   .
>>   ...
>>   .
>>   __bis_SR_register(GIE + LPM3_bits);
>>   }
>>   return;
>> }


Yes!
1
void main( void )
2
{
3
ANFANG:
4
  
5
  WDTCTL = WDTPW + WDTHOLD;             // Stop WDT
6
  _EINT();
7
  .
8
  ...
9
  .
10
  __bis_SR_register(GIE + LPM3_bits);
11
 
12
  goto ANFANG;
13
}


;-)

Beitrag #5639244 wurde von einem Moderator gelöscht.
von Jürgen W. (Firma: MED-EL GmbH) (wissenwasserj)


Lesenswert?

wolle g. schrieb:
> Andreas V. schrieb:
>> Gerade bin ich am Überlegen ob man eine Low Energy RTC wie die
>> RV-1805-C3   anzapfen kann.
>
> Wenn Du es geschafft hast, würde ich gern davon etwas absahnen.
> Ich möchte den 32,7kHz Quarz des MSP430 irgendwie durch den genaueren
> und kalibrierten RV1805 ersetzen.
> Viel Erfolg.

Der RV-1805 hat +/-100ppm Genauigkeit - das ist das Niveau eines 
schlechten Quarzes.
Denkanstoß bzgl. Stromverbrauch, wenn Du das Taktsignal einschleifen 
willst: Ein typischer IO-Pin hat ca. 5pF Eingangskapazität; bei 3V 
Versorgung heißt das mindestens (!) 5pF*3V*32768Hz=500nA Verbrauch nur 
fürs Takten, zzg. ca. 80nA, die der Chip selbst benötigt.

von Andreas V. (Firma: IGL) (andreas_va)


Lesenswert?

Ich hoffe wir reden vom gleichen Szenario.
Ich dachte an so was ähnliches wie das hier: 
Beitrag "MSP430 mit externer Taktquelle betreiben"

Also SQW/OUT(RTC) an XIN(MSP430). Dann hat man Datum und Uhrzeit und 56 
Byte EEPROM zum Speichern von Config Bytes noch. Angeblich hat der 
TinyRTC +-40ppm Genauigkeit.

Allerdings weiss ich nicht wie der MSP430 Oszillatoreingang damit 
zurechtkommt und ob da noch eine Anpassung erfolgen muss!

: Bearbeitet durch User
von Clemens L. (c_l)


Lesenswert?

Andreas V. schrieb:
> SQW/OUT

Mit Pullup, igitt.

> Allerdings weiss ich nicht wie der MSP430 Oszillatoreingang damit
> zurechtkommt

Abschnitt 5.2.3 des User's Guide sagt:
> LFXT1 may be used with an external clock signal on the XIN pin in either
> LF or HF mode when LFXT1Sx = 11, OSCOFF = 0, and XCAPx = 00. When used
> with an external signal, the external frequency must meet the data sheet
> parameters for the chosen mode

... nämlich f_LFXT1,LF,logic, also 10–50 kHz.

von Andreas V. (Firma: IGL) (andreas_va)


Lesenswert?

Clemens L. schrieb:
> Andreas V. schrieb:
>> SQW/OUT
>
> Mit Pullup, igitt.
>
Nein, der TinyRTC gibt ein Rechtecksignal immer an SQW/OUT aus.
Wäre das so viel Mehrverbrauch? Das kann ich nicht glauben. Der XIN des 
MSP dürfte doch wegen der kleinen Ströme relativ hochohmig sein.
Das Rechtecksignal kann je nach Bit0 und Bit1 im Controlregister des RTC 
eine Frequenz zwischen 1Hz und 32768Hz haben.

Bit 1    Bit0    Frequenz
    0       0       1 Hz
    0       1    4096 Hz
    1       0    8192 Hz
    1       1   32768 Hz

>> Allerdings weiss ich nicht wie der MSP430 Oszillatoreingang damit
>> zurechtkommt
>
> Abschnitt 5.2.3 des User's Guide sagt:
>> LFXT1 may be used with an external clock signal on the XIN pin in either
>> LF or HF mode when LFXT1Sx = 11, OSCOFF = 0, and XCAPx = 00. When used
>> with an external signal, the external frequency must meet the data sheet
>> parameters for the chosen mode
>
> ... nämlich f_LFXT1,LF,logic, also 10–50 kHz.

Theoretisch sollten elektrisch 4096 Hz, 8192 Hz, 32768 Hz möglich sein.
Nutzen würde ich allerdings nur die Uhrenfrequenz von 32kHz wollen.

von Andreas V. (Firma: IGL) (andreas_va)


Lesenswert?

Vergesst den TinyRTC!
Da kommen über 34kHz statt 32768 Hz heraus!
Evtl. hilt es das Quarz auszutauschen.

von Clemens L. (c_l)


Lesenswert?

Andreas V. schrieb:
> Clemens L. schrieb:
>> Andreas V. schrieb:
>>> SQW/OUT
>>
>> Mit Pullup, igitt.
>>
> Nein

SQW ist ein Open-Drain-Ausgang. Wie willst du da ohne Pullup einen 
High-Pegel bekommen?

> Vergesst den TinyRTC!
> Da kommen über 34kHz statt 32768 Hz heraus!

Wie hast du das gemessen?

von Wolle G. (wolleg)


Lesenswert?

Jürgen W. schrieb:
> Der RV-1805 hat +/-100ppm Genauigkeit - das ist das Niveau eines
> schlechten Quarzes.

Mein Datenblatt sagt zur Ganggenauigkeit: bei 25°C werkseitig auf +-2ppm 
abgeglichen
Eigene Messungen (Ausgang auf 1Hz eingestellt) durch Vergleich mit DCF77 
zeigen nach etwas Korrektur mittels Register sogar ca. + 0,6ppm bei 
Zimmertemperatur. (Lege aber meine Hand nicht ins Feuer)
Dazu auch etwas mehr unter: 
Beitrag "Erklärung DCF 77-Empfang nachts häufiger gestört als am Tag"
Ich bin mir nicht sicher, ob die 32768Hz schon mit abgeglichen werden 
oder erst die herunter geteilten Frequenzen in die Kalibrierung mit 
einbezogen werden.

von Andreas V. (Firma: IGL) (andreas_va)


Lesenswert?

Kommando zurück! Ich nehme alles zurück und behaupte das Gregenteil!

Ich messe die niedrigen Frequenzen wie 32kHz mit meinem Billig-Oszi 
China Kracher. Der zeigt die Werte normalerweise normalerweise auch 
recht gut an.
Mein Frequenzmesser fängt erst bei 100kHz an zu messen.

Problem: Ich nahm zum Messen ein ungeschirmtes Kabel. Da war wohl noch 
eine Frequenz drauf. Also schaltete ich zum Schluss mein gutes altes 
Hameg 305-2(35 Mhz) an und bekam mit geschirmten Kabel 32,7 kHz heraus. 
Das konnte man beim China Kracher optisch nicht sehen.

Zu allerletzt hab' ich dann doch noch mal mit dem Tektronix TDS 380(400 
MHz)  mit geschirmten Kabel gemessen. => 32,78 kHz.

Auch der Chinakracher zeigt mit dem geschirmten Kabel immer noch mehr 
an.
=> 32,696 kHz bis 32,802kHz war alles dabei. Meistens war es mehr.

Eigentlich sollte es mit 2ppm bei 32,768 kHz bleiben!

Wer misst misst Mist....

Mit meinen Mittel bekomme ich es momentan nicht heraus.

von Clemens L. (c_l)


Lesenswert?

Du hast wahrscheinlich direkt am Quarz gemessen. Vergleiche mal die 
Kapazität des Oszi-Eingangs mit der, die du für XIN/XOUT konfiguriert 
hast.

Um die Frequenz nicht zu beeinflussen, miss ACLK an P1.0.

von Andreas V. (Firma: IGL) (andreas_va)


Angehängte Dateien:

Lesenswert?

Clemens L. schrieb:
> Du hast wahrscheinlich direkt am Quarz gemessen. Vergleiche mal die
> Kapazität des Oszi-Eingangs mit der, die du für XIN/XOUT konfiguriert
> hast.
>
> Um die Frequenz nicht zu beeinflussen, miss ACLK an P1.0.

Schrödingers Katze lebt noch! Nur alles Messwerkzeug war nicht geeignet.

Ich habe am SQW/OUT abgegriffen (siehe Oszi-Bild im Anhang). Der 
funktioniert ohne Pullups!

Ich habe mir einen über 30 Jahre alten Universalzähler vom ELO-Magazin 
besorgt. Der geht bis 1 GHz. Den gabs damals nur als Bausatz. 
Bezahlbare, brauchbare Multimeter oder andere Frequenzzähler fand ich 
nicht.

Ergebnis: Nach 5 Minuten Einarbeitung hatte ich die Messung fertig 
(siehe Anhang).

: Bearbeitet durch User
von Clemens L. (c_l)


Lesenswert?

Andreas V. schrieb:
> Ich habe am SQW/OUT abgegriffen (siehe Oszi-Bild im Anhang).

Das ist eine wunderschöne R-C-Kurve.

> Der funktioniert ohne Pullups!

Benutzt du den Chip direkt, oder auf einem Modul (mit eingebautem 
Pullup)?

von Andreas V. (Firma: IGL) (andreas_va)


Angehängte Dateien:

Lesenswert?

Wir reden vom Ausgang des Moduls (siehe Anhang roter Kreis) oder?

rot:   3,3V
blau:  GND
gelb:  CLK
weiss: SDA
grau:  SQW/OUT

Ich sah keine Pullups....

Aber beim DS1306 gilt:
Square Wave/Output Driver. When enabled, the SQWE bit set to 1, the 
SQW/OUT pin outputs one of four square-wave frequencies (1Hz, 4kHz, 
8kHz, 32kHz). The SQW/OUT pin is open drain and requires an external 
pullup resistor. SQW/OUT operates with either VCC or VBAT applied.

von Andreas V. (Firma: IGL) (andreas_va)


Lesenswert?

Clemens L. schrieb:
> Das ist eine wunderschöne R-C-Kurve.

Mit dem 1:10 Teiler der Meßspitze des Frequenzzählers sieht die Kurve 
schon anders aus. Ich finde das Signal sieht gar nicht so schlecht aus. 
Aber hoch belasten darf man den SQW/OUT halt nicht.

TinyRTC zieht bei 3,3V als Taktquelle 600µA Strom extra!

: Bearbeitet durch User
von while (1) not needed (Gast)


Lesenswert?

Andreas V. schrieb:
> TinyRTC zieht bei 3,3V als Taktquelle 600µA Strom extra!

Und wie groß ist dein Messfehler diesmal? ;-)

von Andreas V. (Firma: IGL) (andreas_va)


Lesenswert?

Ca. 1% Messfehler bei Strom und Spannung! Frequenz ist halt kritischer 
zu messen. Mit dem 30 Jahre altem Teil von ELO aber auch nicht mehr. :-)

Bei 2,2V sind es übrigens 360µA.

NiCa-Akkus mit 2,4V(2 x 1,2V) wären wohl ideal, aber von denen bin ich 
aus diversen bekannten Gründen abgekommen. Leider haben Lipo-Akkus 3,7V 
oder mehr Spannung. Zwei Dioden in Reihe zur Batterie oder step-down 
Converter sind nicht so toll. Dann bleiben noch 3V Lithiumbatterien 
übrig.

von while (1) not needed (Gast)


Lesenswert?

Sorry, ich will dir nicht ans Bein pinkeln, aber ...

... dein erster Post mit dem grottigen Programm lässt einem keinem Wahl: 
Basics, Basics, Basics, ....

Es sieht sehr oberflächlich - schlampig? - aus. Da mag man nichts 
glauben, was du gemessen, berechnet, ermittelt hast. Sorry!

Aber keine Sorge, jetzt bin ich raus (aus deinem Thread).

von Andreas V. (Firma: IGL) (andreas_va)


Lesenswert?

while (1) not needed schrieb:
> Sorry, ich will dir nicht ans Bein pinkeln, aber ...
>
> ... dein erster Post mit dem grottigen Programm lässt einem keinem Wahl:
> Basics, Basics, Basics, ....
>
> Es sieht sehr oberflächlich - schlampig? - aus. Da mag man nichts
> glauben, was du gemessen, berechnet, ermittelt hast. Sorry!
>
> Aber keine Sorge, jetzt bin ich raus (aus deinem Thread).

@while(1) not needed
Was sollen Deine Posts? Die tun nichts zur Sache! Offenbar geht es 
manchen Leuten eben gerade darum andere herunterzumachen.

Was soll Deine Bemerkung zu
> TA0CCR0 =  65535; // bei MC_1 Frequenzteiler (Zähler)
bedeuten?

Es geht hier um Beispiele die man verbessern kann. Wenn das der Weisheit 
letzter Schluss wäre würde ich hier nicht schreiben. Mess die Werte doch 
nach! Dann wirst Du sehen dass sie stimmen. Alles was falsch war habe 
ich korrigiert.

von Andreas V. (Firma: IGL) (andreas_va)


Lesenswert?

Update:

TinyRTC unterscheidet zwischen Backup-Mode und Normal-Mode.

Falls eine geringfügig höhere Spannung an Vcc anliegt, dann fliessen im 
"normalen Modus" Ausgleichsstrome zur Batterie. Ein 200 Ohm Widerstand 
und eine Diode zur Batterie deuten darauf hin dass das eine 
Ladeschaltumg sein soll.

Schaltet man den Taktausgang SQW/OUT aus (Controlregister hat Wert 80, 
81, 82 oder 83 bzw.), dann kann man den Stromverbrauch des TinyRTC auf 
unter 100µA senken (Ausgang = High).

Der Wert 40, 41, 42 oder 43 im Controlregister bringt wegen des Pullups 
1030µA bei ausgeschaltetem Taktausgang (Ausgang = Low).

Die RTC läuft bei ausgeschaltetem SQW/OUT normal weiter.

: Bearbeitet durch User
von GEKU (Gast)


Lesenswert?

Ich hätte noch einen anderen Vorschlag:

dieser wäre den Takt für den MSP430 nicht vom RTC abzuleiten, sondern 
den MSP430 in den Mode LP4 zu schalten und ihn regelmäßig über einen 
Portpin aufzuwecken.
Die meisten RTC's verfügen über einen 1 Sekunden-Takt-Ausgang.

Vorteile der Lösung:

- LP4 Mode des MSP430 bietet das größte Stromeinsparpotential, da im 
MSP430 der Takt komplett abgeschaltet wird.

- die Lösung verbraucht nur einen Portpin des MSP430 statt zwei.

- die Geschwindigkeit des MSP430 ist unabhängig vom RTC.

Ich habe diese Methode noch stärker abgespeckt, da ich keine genaue 
Ruhezeit des MSP430 benötigt habe, indem ich an dem Portpin ein RC-Glied 
angeschaltet und auf den RTC verzichtet  habe.  Der Kondensator 10 
Microfarad  wird vom Portpin entladen und über den Widerstand von 1Mohm 
langsam aufgeladen. Der geladene Kondensator löst einen Portinterrupt 
aus und weckt damit den MSP430 auf. Bevor sich der MSP430 mit dem LP4 
Modus neu schlafen legt, entlädt er den Kondensator und der Vorgang 
beginnt von Neuem.

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.