Forum: Mikrocontroller und Digitale Elektronik msp340 Anwendung/Unterschied der clocks


von stephan (Gast)


Lesenswert?

Hallo!

Es gibt
ACLK
MCLK
SMCLK
VLOCLK
DCO

und bei dem LPM4 ist sogar der chrystal extra mit aufgeführt
Gibt es Standardprozeduren, welchen Takt man für was verwendet?(will zb. 
ADC und UART nutzen, mit nem  timer regelmäßig aufwachen)

Woraus entstehen welche Clocks? Das sind so viele, finde mich nicht 
zurecht. Ich kannte nur intern und extern z.B. bei Atmegas.

Danke für: HILFE!

im Übrigen handelt es sich um einen msp430x22x4

von Christian R. (supachris)


Lesenswert?

Im User Guide ist ein großes Bild, welche Takt-Quellen auf welche 
Taktleitungen gehen. Diese flexible Taktversorgung, die während des 
betriebes frei geändert werden kann, ist ja der größte Vorteil am MSP430 
gegenüber Mitbewerbern.
Im Normalfall wird man den MCLK (für die CPU) mit einem vom DCO/FLL 
erzeugten Takt betreiben. Damit ist sichergestellt, dass für die 
Ausführung vion Interrupts der Takt innerhalb 1...6µs (je nach MSP) 
verfügbar ist. Für einen Timer, der das System zyklisch aufwachen soll, 
benutzt mal am besten einen Uhrenquarz an XT1 und speist damit den ACLK. 
Der ist nämlich im LPM3 auch noch aktiv. Für UART Kommunikation sollte 
man schon auch einen Quarz-Takt oder einen von der FLL+ aus dem Quarz 
abgeleiteten Takt benutzen. Die FLL+ ist in der Lage, ganzzahlige 
Vielfache des Quarz-Taktes zu erzeigen, da kann man z.B. aus dem 
Uhrenquarz eine recht stabile hohe Frequenz für die UART erzeugen. Wenn 
die nicht genau passt, ist beim MSP430 kein Problem, er hat ja den 
Baudraten-Modulator. Will man meinetwegen noch schnelle PWM oder solche 
Geschichten machen, die eine genaue Zeitbasis erfordern, kann man ja 
noch den XT2 anschließen und den Takt als SMCLK (für die Peripherie) 
nehmen. Die allermeisten Module lassen eine Auswahl aller Takte als 
Quelle zu, da kann man sich gut austoben. Der ADC funktioniert gut mit 
seinem eigenen Taktgenerator, nur das Start-Signal sollte man per Timer 
mit denn CCR-Registern erzeugen. Beim ADC kann man dann das TA oder TB 
Signal als Start benutzen. Somit ist eine äquidistante Abtastung 
sichergestellt.

von stephan (Gast)


Lesenswert?

Angenommen, ich will nun den Quarz nutzen. Dieser ist in meiner 
Schaltung bereits vorhanden. Sind dann noch Einstellungen notwendig oder 
läuft die CPU dann sofort mit dem Quarztakt?

ACLK ist der Quarz, es sei denn ich brech den runter mit DIVAx richtig?

von Christian R. (supachris)


Lesenswert?

Welchen Quarz? Und wo ist der angeschlossen? Die Standard-Einstellung 
ist ACLK gespeist aus Uhrenquarz am XT1. MCLK und SMCLK gespeist aus dem 
DCO, der ohne Initialisierung bei etwa 800kHz läuft.

von stephan (Gast)


Lesenswert?

Der Timer läuft mit DCO-Frequenz, also wenn ich TBSSEL_2 nutze. TBSSEL_1 
verweist ja auf ACLK, aber dann wird der getoggelte Pin nur einmal auf 
HI gesetzt, dann passiert nix mehr! vllt. läuft mein quarz nicht?!?

//main und #inc. weggelassen

 TBCTL = TBSSEL_1 + MC_2 + TBIE;           // SMCLK, contmode, interrupt

  __bis_SR_register(LPM0_bits + GIE);       // Enter LPM0 w/ interrupt
}

// Timer_B3 Interrupt Vector (TBIV) handler
#pragma vector=TIMERB1_VECTOR
__interrupt void Timer_B(void)
{
  switch (TBIV)        // Efficient switch-implementation
  {
    case  2: break;                         // TBCCR1 not used
    case  4: break;                         // TBCCR2 not used
    case 14: P4OUT ^=(1<<2);                // overflow
             break;

von stephan (Gast)


Lesenswert?

Welcher quarz?
Also angeschlossen ist der an  XIN und XOut, am quarz noch 22pF gegen 
Masse an jedem Quarzpin. Es ist ein Grundton Standardquarz

von Tobias Korrmann (Gast)


Lesenswert?

Was meinst du mit Grundton
Standart schließt man an XT1 (also XIN und XOUT)
einen 32 kHz Uhrenquarz an.
DAnn läuft auch die Standart einstellung.

von Christian R. (supachris)


Lesenswert?

Welche Frequenz hat der? Du musst dann erst den HFXTAL Modus 
einschalten, wenn der mehr als 45kHz hat. Dann wie in den C-Demos 
beschrieben, das Fault-Flag pollen usw. um zu schauen, ob der Oszillator 
angelaufen ist.

von Christian R. (supachris)


Lesenswert?

Über 455kHz, sorry.

von stephan (Gast)


Lesenswert?

mit dem hfxtal-modus ist sicher das bit XTS aus BCSCTL1 gemeint??
in den demos habe ich nix übers Fault-Flag gefunden.

von stephan (Gast)


Lesenswert?


von Christian R. (supachris)


Lesenswert?

stephan schrieb:
> mit dem hfxtal-modus ist sicher das bit XTS aus BCSCTL1 gemeint??
> in den demos habe ich nix übers Fault-Flag gefunden.

Ich meine den Quelltext:
1
//******************************************************************************
2
//  MSP430F22x4 Demo - Basic Clock, MCLK Sourced from HF XTAL
3
//
4
//  Description: Proper selection of an external HF XTAL for MCLK is shown by
5
//  first polling the OSC fault until XTAL is stable - only then is MCLK
6
//  sourced by LFXT1. MCLK/10 is on P1.1 driven by a software loop taking
7
//  exactly 10 CPU cycles.
8
//  ACLK = MCLK = LFXT1 = HF XTAL, SMCLK = default DCO ~1.2MHz
9
//  //* HF XTAL NOT INSTALLED ON FET *//
10
//  //* Min Vcc required varies with MCLK frequency - refer to datasheet *//
11
//
12
//               MSP430F22x4
13
//            -----------------
14
//        /|\|              XIN|-
15
//         | |                 | HF XTAL (3 – 16MHz crystal or resonator)
16
//         --|RST          XOUT|-
17
//           |                 |
18
//           |             P1.1|-->MCLK/10 = HFXTAL/10
19
//           |             P2.0|-->ACLK = HFXTAL
20
//
21
//  A. Dannenberg
22
//  Texas Instruments Inc.
23
//  April 2006
24
//  Built with CCE Version: 3.2.0 and IAR Embedded Workbench Version: 3.41A
25
//******************************************************************************
26
#include "msp430x22x4.h"
27
28
volatile unsigned int i;
29
30
void main(void)
31
{
32
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
33
34
  P2DIR |= 0x01;                            // P2.0 = output direction
35
  P2SEL |= 0x01;                            // P2.0 = ACLK function
36
  P1DIR |= 0x02;                            // P1.1 = output direction
37
38
  BCSCTL1 |= XTS;                           // ACLK = LFXT1 = HF XTAL
39
  BCSCTL3 |= LFXT1S1;                       // 3 – 16MHz crystal or resonator
40
41
  do
42
  {
43
    IFG1 &= ~OFIFG;                         // Clear OSCFault flag
44
    for (i = 0xFF; i > 0; i--);             // Time for flag to set
45
  }
46
  while (IFG1 & OFIFG);                     // OSCFault flag still set?
47
48
  BCSCTL2 |= SELM_3;                        // MCLK = LFXT1 (safe)
49
50
  for (;;)                                  // Infinite loop
51
  {
52
    P1OUT |= 0x02;                          // P1.1 = 1
53
    P1OUT &= ~0x02;                         // P1.1 = 0
54
  }
55
}

von stephan (Gast)


Lesenswert?

danke für den code!

Nur eigenartig: Wenn ich einen 4MHz Quarz nehme, bekomme ich an Pin 2.0 
ein 75Hz signal. Ja, Hz nicht kHz oder MHz

:(

von Christian R. (supachris)


Lesenswert?

Womit misst du das? Oszilloskop? Hat das genügend Bandbreite? Sonst 
gibts Alias-Bilder durch die Verletzung des Abtasttheorems.

von stephan (Gast)


Lesenswert?

abtasttheorem ist mir bekannt, zb. shannon, also dies ist wohl mit 
400MHz Oszi voll und ganz erfüllt.......

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.