Forum: Mikrocontroller und Digitale Elektronik MSP430: 3.6864MHz Quarz vs. VLL + 32kHz Quarz


von Heinz Erhard (Gast)


Lesenswert?

Einen wunderschönen guten Abend!

Ich hoffe, ich finde hier jemanden, der auch schonmal mit ähnlichem zu 
tun hatte.

Problem: Mein uC benötigt einen Takt von 3.6864MHz (Baudratenquarz)
Der MSP soll ja eigentlich ein Stromsparer sein, aber das kann ich 
irgendwie nicht bestätigen...benutze ich nur den Quarz für diese 
Frequenz, so verbraucht der Controller knapp 3 mA - mit 2MHz (anderer 
Quarz) immernoch knapp 2 mA.

Da mir das zu viel ist, habe ich mal testweise aus den Code-Examples den 
VLL-Oszillator ausprobiert. Dieser arbeitet mit einem 32kHz Uhrenquarz 
und vergleicht in einem Timer-Interrupt stets die Abweichung von einem 
errechneten Delta zwischen Quarz und Systemtakt und passt diesen ggf. 
an.

So...wenn ich nun auf 3.6864MHz justiere, dann verbraucht der MSP 
nurnoch knapp 600uA!!!!

So weit so gut, aber: Als wirklich genau kann man den Takt nicht 
betrachten - auf dem Oszilloskop springt dieser zwischen 3.6 und 3.8MHz 
- das ist für eine UART-Übertragung ja nun nicht gerade prickelnd.

Weiteres Problem: Schließe ich den 3.6864MHz-Quarz an und habe 
zusätzlich noch den Uhrenquarz, so liegt der Stromverbrauch bei rund 
3.6mA!!!

Auch komisch: Mit normalem DCO-Betrieb und nur Uhrenquarz ist der Strom 
auch bei über 2mA. Das kann doch irgendwie alles nicht sein.

Da stimmt doch was nicht. Nur im VLL-Modus ist er ein echter 
Stromsparer.

Hat jemand schonmal diesen VLL-Modus benutzt und kann mir sagen, wie ich 
den möglichst genau bekomme?

Weiß jemand einen Grund, warum der Stromverbrauch so hoch sein könnte?


Besten Dank für jeden Tip!!!

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Heinz Erhard schrieb:
> Problem: Mein uC benötigt einen Takt von 3.6864MHz (Baudratenquarz)

Nein. Die UARTs selbst so alter MSP430-Varianten wie 'F16x sind in der 
Lage, vernünftige Baudraten auch aus nicht-Baudraten-Quarzen zu 
erzeugen, selbst wenn diese relativ niedrige Frequenzen haben.

Exakt welchen MSP430 verwendest Du?

von Heinz Erhard (Gast)


Lesenswert?

Rufus Τ. Firefly schrieb:
> Exakt welchen MSP430 verwendest Du?

Hallo und danke schonmal für die Antwort!

Ich verwende einen MSP430F2418.
Klar kann ich auch aus anderen "geraden" Quarzen eine gescheite Baudrate 
einstellen, aber ich war der Meinung, 3 oder knapp 4MHz müssten ja wohl 
drin sein. Und da bot der Quarz sich halt an, weil er auch noch exakt 
teilbar ist.

Mich wundert ja nur, wo der ganze Strom hinfließt! Ist der Oszillator 
für die externen Quarze so stromhungrig? So ein Uhrenquarz allein 
verbraucht doch grad mal nen uW oder so...irgendwas stimmt da halt 
nicht. Nur VLL ist wirklich LOW-POWER.

von Heinz Erhard (Gast)


Lesenswert?

...nur scheinbar auch LOW-PRECISION

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Dieses Codebeispiel ist nicht für die Erzeugung von Baudraten geeignet. 
Der Takt ist im Durchschnitt zwar genau, aber er wabert halt um den 
gewünschten Wert herum. Damit kann man z.B. eine einfache Uhr 
implementieren, aber nichts, was im Kurzzeitbereich präzise ist.

Hast Du mal reinen DCO-Betrieb ausprobiert? Sofern Du nicht mit sehr 
hohen Baudraten arbeitest, könnte der für sich schon ausreichend genau 
sein.

Kalibrierdaten für definierte Frequenzen sollten im Info-Memory bzw. in 
einem Flash-Segment zu finden sein.
(Im User's Guide sind Informationen darüber im Abschnitt "TLV" zu 
finden).

Allerdings macht mich die hohe Stromaufnahme bei Nutzung eines extern 
angeschlossen Quarzes stutzig.
Wie initialisierst Du den dafür zuständigen Oszillator XT2?

von Heinz Erhard (Gast)


Lesenswert?

Rufus Τ. Firefly schrieb:
> selbst wenn diese relativ niedrige Frequenzen haben

Oder meinst du aus dem 32k die Baudrate erzeugen? Das ginge natürlich 
auch. Der Systemtakt wäre dann egal ob stabil, oder nicht...

Aber trotzdem die Frage: Wieso braucht der externe Quarz, der DCO und 
Kombination DCO + Uhrenquarz und HF Quarz + LF Quarz soviel Strom? Und 
nur LF Quarz + VLL nicht?

von Heinz Erhard (Gast)


Lesenswert?

Ach nee - Kommando zurück! Ich benötige noch stabile 460.8kHz - und die 
bekomme ich aus den 3.6864MHz halt exakt raus...ganz vergessen.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Nun gut, nun wäre noch interessant, wie exakt Du die verschiedenen 
Oszillatoren etc. initialisiert hast.

Sieh Dir mal im Datenblatt das Diagramm 24 auf Seite 52 an. Da ist die 
Stromaufnahme des XT bei verschiedenen Betriebsarten beschrieben. Bei 4 
MHz Takt kann dessen Stromaufnahme wahlweise bei 100 µA, 150 µA oder 1 
mA liegen.

Die zugehörigen Parameter sind auf der vorhergehenden Seite beschrieben.

von Heinz Erhard (Gast)


Lesenswert?

Ja genau wegen diesen Bildern Wunder ich mich ja so!

Benutzt du auch MSPs und hast schonmal zwei Quarze gleichzeitig 
verwendet?
Wenn ja, kannst du mir evtl. mal deine Initialisierung posten? Ich weiß 
langsam nicht mehr weiter!

von Heinz Erhard (Gast)


Lesenswert?

Meine ist so:
1
void configure_clock_module (void)
2
{
3
  // Initialization of clock source - Crystal 1.8432 MHz
4
  
5
  // BCSCTL1: BASIC CLOCK SYSTEM CONTROL REGISTER 1
6
  // XT2OFF:  XT2 oscillator (bit cleared: XT2 is now active)
7
  BCSCTL1 &= ~XT2OFF;
8
  
9
  // BCSCTL3: BASIC CLOCK SYSTEM CONTROL REGISTER 3
10
  // XT2Sx:   XT2 range select (XT2S_2: 3-16 MHz)
11
  // XCAPx:   Oscillator capacitor selection (XCAP_1: ~6pF)
12
  BCSCTL3 = ( XT2S_2 | XCAP_1 );
13
  
14
  do
15
  {
16
    volatile uint16_t i = 0;
17
    IFG1 &= ~ OFIFG;            // Clear oscillator-fault-flag
18
    for (i = 0xFF; i > 0; i--)  // Time to get stable
19
    {}                          // Loop
20
  } while (IFG1 & OFIFG);       // Do, until no fault present
21
  
22
  // BCSCTL2: BASIC CLOCK SYSTEM CONTROL REGISTER 2
23
  // SELMx:   Select MCLK (SELM_2: XT2CLK)
24
  // SELS:    Select SMCLK
25
  BCSCTL2 = ( SELM_2 | SELS)
26
}

von Heinz Erhard (Gast)


Lesenswert?

OK - 1. Zeile Kommentar ist momentan natürlich 3.6468MHz!

von Heinz Erhard (Gast)


Lesenswert?

Wieso schreib ich eigentlich die ganze Zeit VLL???!!! Ich meine 
natürlich FLL!!!

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

FLL ist es auch nicht, das ist ein Hardwaremodul, das Dein MSP430 nicht 
besitzt.

>   // XT2Sx:   XT2 range select (XT2S_2: 3-16 MHz)

Das könnte das Problem sein. Dem Datenblatt zufolge ist das der 
stromfressende Oszillatorbetrieb.

Sieh Dir noch mal im Datenblatt die Seiten 53 und 54 an.

Denen zufolge sind die Werte für XT2Sx anders zu interpretieren als bei 
der Beschreibung im User's Guide (Seite 301 / 5-16, BCSCTL3).
1
  Wert   User's Guide     Datenblatt     Datenblatt     Datenblatt
2
                          S. 53          S. 54          S. 54
3
   0     0.4 - 1 MHz      0.4 - 1 MHz    bis 4 MHz      < 100 µA  
4
   1     1 - 3 MHz        1 - 4 MHz      bis 8 MHz      < 200 µA
5
   2     3 - 16 MHz       2 - 16 MHz     bis 16 MHz     > 1100 µA bei 4 MHz

Das ist ein wenig irritierend. Probier mal Modus 1 aus.

>  // XCAPx:   Oscillator capacitor selection (XCAP_1: ~6pF)

Dem User's Guide zufolge bezieht sich das auf die internen Kondensatoren 
am Oszillator XT1, die von XT2 sind nicht konfigurierbar.
Was hast Du da angeschlossen?

von Heinz Erhard (Gast)


Lesenswert?

Rufus Τ. Firefly schrieb:
> Das ist ein wenig irritierend.

Das ist es wirklich - ich dachte, ich setze da den XT2S_ für den 
Frequenzbereich, in dem mein Quarz liegt. Was soll denn das sonst 
heißen?

Rufus Τ. Firefly schrieb:
> Dem User's Guide zufolge bezieht sich das auf die internen Kondensatoren
> am Oszillator XT1, die von XT2 sind nicht konfigurierbar.
> Was hast Du da angeschlossen?

Nee, die Cs sind für den XT1, da hängt ein Uhrenquarz dran.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Heinz Erhard schrieb:
> ich dachte, ich setze da den XT2S_ für den
> Frequenzbereich, in dem mein Quarz liegt.

Das schon, nur weichen die Angaben über die nutzbaren Frequenzbereiche 
zwischen Datenblatt und User's Guide voneinander ab.
Wer lügt besser?

Heinz Erhard schrieb:
> Nee, die Cs sind für den XT1, da hängt ein Uhrenquarz dran.

Der dann ACLK speist?

von Heinz Erhard (Gast)


Lesenswert?

Rufus Τ. Firefly schrieb:
> Der dann ACLK speist?

Genau!

von Heinz Erhard (Gast)


Lesenswert?

OK, mit XT2S_1 liege ich nun mit beiden Quarzen bei 2,8mA...schonmal ne 
Steigerung, aber immernoch nicht wenig, oder?

OK, da steht, der Oszillator braucht so und so viel Strom...der 
Controller an sich ja auch - im Moment läuft mein Programm so:
1
while (1) {}

:) mehr macht es nicht, also auch keine anderen Sachen am laufen.

von Heinz Erhard (Gast)


Lesenswert?

Jetzt seh ich grad was anderes...der schwingt nicht an, wenn ich nur den 
HF Quarz drin hab und den LF weglasse...bis ich den ACLK auf VLOCLK 
setze. Muss der immer mitlaufen?

Wenn ich den MSP ohne Taktinitialisierung benutze, ist der ACLK dann 
automatisch auf VLOCLK? Geht es nicht ohne ACLK?

von Heinz Erhard (Gast)


Lesenswert?

Also laut dem Datenblatt vom 2418 geht bis 4MHz ja sogar mit 
XT2S_0...aber der Strom sinkt im Vergleich zum _1 nicht weiter...

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.