mikrocontroller.net

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


Autor: Heinz Erhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!!!

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Heinz Erhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Heinz Erhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...nur scheinbar auch LOW-PRECISION

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Heinz Erhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Heinz Erhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Heinz Erhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Heinz Erhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Meine ist so:
void configure_clock_module (void)
{
  // Initialization of clock source - Crystal 1.8432 MHz
  
  // BCSCTL1: BASIC CLOCK SYSTEM CONTROL REGISTER 1
  // XT2OFF:  XT2 oscillator (bit cleared: XT2 is now active)
  BCSCTL1 &= ~XT2OFF;
  
  // BCSCTL3: BASIC CLOCK SYSTEM CONTROL REGISTER 3
  // XT2Sx:   XT2 range select (XT2S_2: 3-16 MHz)
  // XCAPx:   Oscillator capacitor selection (XCAP_1: ~6pF)
  BCSCTL3 = ( XT2S_2 | XCAP_1 );
  
  do
  {
    volatile uint16_t i = 0;
    IFG1 &= ~ OFIFG;            // Clear oscillator-fault-flag
    for (i = 0xFF; i > 0; i--)  // Time to get stable
    {}                          // Loop
  } while (IFG1 & OFIFG);       // Do, until no fault present
  
  // BCSCTL2: BASIC CLOCK SYSTEM CONTROL REGISTER 2
  // SELMx:   Select MCLK (SELM_2: XT2CLK)
  // SELS:    Select SMCLK
  BCSCTL2 = ( SELM_2 | SELS)
}

Autor: Heinz Erhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK - 1. Zeile Kommentar ist momentan natürlich 3.6468MHz!

Autor: Heinz Erhard (Gast)
Datum:

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

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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).
  Wert   User's Guide     Datenblatt     Datenblatt     Datenblatt
                          S. 53          S. 54          S. 54
   0     0.4 - 1 MHz      0.4 - 1 MHz    bis 4 MHz      < 100 µA  
   1     1 - 3 MHz        1 - 4 MHz      bis 8 MHz      < 200 µA
   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?

Autor: Heinz Erhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Heinz Erhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rufus Τ. Firefly schrieb:
> Der dann ACLK speist?

Genau!

Autor: Heinz Erhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
while (1) {}

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

Autor: Heinz Erhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Heinz Erhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.