Forum: Mikrocontroller und Digitale Elektronik DCO von MSP430F berechnen


von LED (Gast)


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

von Rufus Τ. F. (rufus) Benutzerseite


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.

von LED (Gast)


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

von Christian R. (supachris)


Lesenswert?

Mit dem Code kannst du den auf eine Frequenz relativ zur 32,768kHz 
Frequenz des X1 einstellen, vielleicht hilft das:
1
//------------------------------------------------------------------------------
2
void Set_DCO (void)                         // Set DCO to selected frequency
3
//------------------------------------------------------------------------------
4
{
5
6
  unsigned int Compare, Oldcapture = 0;
7
8
  //BCSCTL1 |= DIVA_3;                        // ACLK= LFXT1CLK/8
9
  CCTL2 = CM_1 + CCIS_1 + CAP;              // CAP, ACLK
10
  TACTL = TASSEL_2 + MC_2 + TACLR;          // SMCLK, cont-mode, clear
11
12
  while (1)
13
  {
14
    while (!(CCIFG & CCTL2));               // Wait until capture occured
15
    CCTL2 &= ~CCIFG;                        // Capture occured, clear flag
16
    Compare = CCR2;                         // Get current captured SMCLK
17
    Compare = Compare - Oldcapture;         // SMCLK difference
18
    Oldcapture = CCR2;                      // Save current captured SMCLK
19
20
    if (DELTA == Compare) break;            // If equal, leave "while(1)"
21
    else if (DELTA < Compare)               // DCO is too fast, slow it down
22
    {
23
      DCOCTL--;
24
      if (DCOCTL == 0xFF)
25
      {
26
        //if (!(BCSCTL1 == (XT2OFF + DIVA_3)))
27
        if (!(BCSCTL1 == XT2OFF))
28
        BCSCTL1--;                          // Did DCO roll under?, Sel lower RSEL
29
      }
30
    }
31
    else
32
    {
33
      DCOCTL++;
34
      if (DCOCTL == 0x00)
35
        {
36
          //if (!(BCSCTL1 == (XT2OFF + DIVA_3 + 0x07)))
37
          if (!(BCSCTL1 == (XT2OFF + 0x07)))
38
          BCSCTL1++;                        // Did DCO roll over? Sel higher RSEL
39
        }
40
    }
41
  }
42
  CCTL2 = 0;                                // Stop CCR2
43
  TACTL = 0;                                // Stop Timer_A
44
}

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.

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.