Forum: Mikrocontroller und Digitale Elektronik RT2500 SMCLK


von Martin (Gast)


Lesenswert?

Hallo,

ich programmiere hier mit dem Tool RT2500 und hab mich mal mit den 
Clock´s befasst. Laut Datenblatt hat der MSP430F2274 keinen externen 
Clock. Laut Datenblatt kann der dieser MSP bis 16Mhz arbeiten, aber 
welcher Clock dennn nun verbaut ist steht niergends. Ich woll die auf 
dem Tool befindlichen LED´s jeweils mit den verschiedenen Clocks blinken 
lassen. Bei ACLK passiert garnichts. Es wird kein Interrupt aufgerufen. 
Verwende ich stattdessen SMCLK in der üblichen Initialiserung also über 
den DCO dann blinken sie. Jedoch in undefinierter Frequenz. Wenn ich von 
16Mhz ausgehe und mit dem Timer nach 1000 Schritten (mit Teilung 8) 
einen Interrupt auslöse und dann nochmal in der ISR bis 1000 zähle 
sollte ich bei 16Mhz bei 1s sein. (ja die Periode der LED wird dann 
doppelt so groß sein). Praktisch jedoch blinkt die LED jedoch ungefähr 5 
mal langsamer.

Auf was ist der DC0 standardmäßig eingestellt? Warum kan ich keinen ACLK 
verwenden.

von Martin (Gast)


Lesenswert?

Wäre echt cool, wenn mir jemand Hilfe beim Einstellen des DCO geben 
könnte. Überall steht was anderes. User Guide ist dort nicht genau genug 
und in den Beispielen werden nur Definitions benutzt und kein Bitweises 
setzen wie ich es zum verstehen anwenden will. Wenn ich das somache wie 
in den Beispielen ist der Takt des DCO´s bereits nach 1 Sekunde nicht 
mehr zu gebrauchen.
Zum Test habe ich mit dem RT2500 Tool versucht unter Nutzung 2 
verschiedener Takte einen 1s Takt zu erzeugen.
1
volatile unsigned int cgreen,cred,c;
2
void main( void )
3
{  
4
  WDTCTL = WDTPW + WDTHOLD;
5
  
6
  //BCSCTL2 |= SELS;              //VLOCLK an SMCLK/ACLK durchschalten     
7
  
8
  BCSCTL1 = CALBC1_1MHZ;                    // Set DCO to 1MHz
9
  DCOCTL = CALDCO_1MHZ; 
10
  
11
  BCSCTL3 |= LFXT1S_2;          //VLOCLK freischalten 12kHz
12
 
13
 TACCTL0 |= CCIE;              //Capture/Compare Interrupt enable
14
  TACTL = TASSEL_1 + ID_0 + MC_1; //ACLK + Devider 1 + UP-Mode
15
  TACCR0 = 12000;
16
17
  TBCCTL0 |= CCIE;
18
  TBCTL = TBSSEL_2 + ID_0 + MC_1; //SMCLK + Devider 1 + UP-Mode
19
  TBCCR0 = 1000;
20
    
21
  _BIS_SR(LPM0_bits + GIE);
22
}
23
24
#pragma vector=TIMERA0_VECTOR
25
__interrupt void Timer_A (void)
26
{
27
  P1OUT ^= BIT0;         //LED ROT toggeln
28
}
29
30
#pragma vector=TIMERB0_VECTOR
31
__interrupt void Timer_B (void)
32
{
33
  if (cgreen==999)
34
  {
35
    P1OUT ^= BIT1;         //LED grün toggeln
36
  }
37
}

PDIR usw sind richtig gesetzt

Wie gesagt ist einer (oder beide) der Takte total ungenau. Wie kann man 
festlegen welche Frequenz der DCO ausgibt? Die Formeln aus dem User 
Guide ist für mich verwirrend, denn da ist die Rede von f_dco und 
f_dco+1 Woher soll ich diese Werte wissen?

Wäre über Hilfe sehr dankbar.

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.