www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik RT2500 SMCLK


Autor: Martin (Gast)
Datum:

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

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.
volatile unsigned int cgreen,cred,c;
void main( void )
{  
  WDTCTL = WDTPW + WDTHOLD;
  
  //BCSCTL2 |= SELS;              //VLOCLK an SMCLK/ACLK durchschalten     
  
  BCSCTL1 = CALBC1_1MHZ;                    // Set DCO to 1MHz
  DCOCTL = CALDCO_1MHZ; 
  
  BCSCTL3 |= LFXT1S_2;          //VLOCLK freischalten 12kHz
 
 TACCTL0 |= CCIE;              //Capture/Compare Interrupt enable
  TACTL = TASSEL_1 + ID_0 + MC_1; //ACLK + Devider 1 + UP-Mode
  TACCR0 = 12000;

  TBCCTL0 |= CCIE;
  TBCTL = TBSSEL_2 + ID_0 + MC_1; //SMCLK + Devider 1 + UP-Mode
  TBCCR0 = 1000;
    
  _BIS_SR(LPM0_bits + GIE);
}

#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
  P1OUT ^= BIT0;         //LED ROT toggeln
}

#pragma vector=TIMERB0_VECTOR
__interrupt void Timer_B (void)
{
  if (cgreen==999)
  {
    P1OUT ^= BIT1;         //LED grün toggeln
  }
}

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.

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.