www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik DCO von MSP430F berechnen


Autor: LED (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,
ich brauche dringend Hilfe.
Ich habe die Dokument von TI über DCO gelesen und habe versuche, eine 
Frequenz vob DCO anhand die Parameters, die ich in die 3 Register 
DCOCTL, BCSCTL1, BCSCTL2 schreibe.
zum Beispiel:
MOV.B  #0x80,&DCOCTL    ;ACLK/8, XT2 off,
MOV.B  #0xB5,&BCSCTL1    ;(rsel,dco,mod)=(5,4,0),
MOV.B  #0x00,&BCSCTL2    ;int. R, MCLK=SMCLK=DCO/1
aber ich bin nicht in der Lage, die Frequenz von DCO zu berechnen.
Im Dokument von TI steht auch gar kein Formel.
Grüße.
LED

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

Bewertung
0 lesenswert
nicht lesenswert
Was für einen MSP430 verwendest Du denn? Bei den MSP430F20xx gibt es 
eine Tabelle im Flash, in der Initialisierungswerte für einige 
definierte Taktfrequenzen stehen (1 MHz bis 16 MHz), mit denen ist der 
DCO zu laden und fertig.

Ansonsten gibt es die Möglichkeit, mittels eines externen Uhrenquarzes 
(32768 Hz) und eines Timers den DCO im laufenden Betrieb auf eine 
gewünschte Frequenz einzustellen, dazu gibt es eine Appnote von TI.

Einen '157 und '169 betreibe ich so mit erstaunlich genauen 2 MHz.

Autor: LED (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Rufus t. Firefly,
danke für die Antwort.
Ich benutze MSP430F149.

Ich denke:
wir können anhand der Parameters, die wir in 3 Register schreiben, die 
DCO-Frequenz zu berechnen.
und dann können wir wie folgende machen.
>Ansonsten gibt es die Möglichkeit, mittels eines externen Uhrenquarzes
>(32768 Hz) und eines Timers den DCO im laufenden Betrieb auf eine
>gewünschte Frequenz einzustellen, dazu gibt es eine Appnote von TI.
Aber ehrlich gesagt, ich verstehe das Verfahren nicht ganz.
und es gibt bestimmt auch eine Formel für die Einstellung, oder?
Kannst du mir vielleicht besser erklären?
Vielen Dank.
LED

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit dem Code kannst du den auf eine Frequenz relativ zur 32,768kHz 
Frequenz des X1 einstellen, vielleicht hilft das:
//------------------------------------------------------------------------------
void Set_DCO (void)                         // Set DCO to selected frequency
//------------------------------------------------------------------------------
{

  unsigned int Compare, Oldcapture = 0;

  //BCSCTL1 |= DIVA_3;                        // ACLK= LFXT1CLK/8
  CCTL2 = CM_1 + CCIS_1 + CAP;              // CAP, ACLK
  TACTL = TASSEL_2 + MC_2 + TACLR;          // SMCLK, cont-mode, clear

  while (1)
  {
    while (!(CCIFG & CCTL2));               // Wait until capture occured
    CCTL2 &= ~CCIFG;                        // Capture occured, clear flag
    Compare = CCR2;                         // Get current captured SMCLK
    Compare = Compare - Oldcapture;         // SMCLK difference
    Oldcapture = CCR2;                      // Save current captured SMCLK

    if (DELTA == Compare) break;            // If equal, leave "while(1)"
    else if (DELTA < Compare)               // DCO is too fast, slow it down
    {
      DCOCTL--;
      if (DCOCTL == 0xFF)
      {
        //if (!(BCSCTL1 == (XT2OFF + DIVA_3)))
        if (!(BCSCTL1 == XT2OFF))
        BCSCTL1--;                          // Did DCO roll under?, Sel lower RSEL
      }
    }
    else
    {
      DCOCTL++;
      if (DCOCTL == 0x00)
        {
          //if (!(BCSCTL1 == (XT2OFF + DIVA_3 + 0x07)))
          if (!(BCSCTL1 == (XT2OFF + 0x07)))
          BCSCTL1++;                        // Did DCO roll over? Sel higher RSEL
        }
    }
  }
  CCTL2 = 0;                                // Stop CCR2
  TACTL = 0;                                // Stop Timer_A
}

DELTA ist der Übersetzungsfaktor, also bei DELTA = 125 läuft der DCO 
dann mit 4,096MHz.

Die Berechnungsformeln sind nicht im Datenblatt sondern im Family User 
Guide.

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.