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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.