Forum: Mikrocontroller und Digitale Elektronik MSP430f2370 Quarz und ACLK Problem


von Fabian H. (Firma: keine) (eimer)


Lesenswert?

Hi Leute,

ich versuch gerade mit den ACLK vom anzuzeigen, das sollte eigentlich 
ein externer Quarz mit 32,768Khz sein. Leider kommt absolut nichts am 
Ausgang an bzw. nichts stimmt nicht, der ausgang ACLK Pin2.0 wird als 
High angezeigt.

Anbei mal mein Code, denn ich aus den TI Beispielen übernommen habe und 
deshalb davon ausgehen, dass auch funktioniert.
Bin etwas Ratlos, hab auch schon den Quarz ausgetauscht aber es hat 
nichts gebracht ich sehe einfach keinen Quarz.
Wenn ich VLOCLK durchschleife krieg ich ohne Probleme ~12kHz raus.

Kann vll. jemand mal bei sich den Code testen ob der funktioniert bzw. 
sieht jemand ein fehler?

Vielen Dank!
1
//******************************************************************************
2
//  MSP430F23x0 Demo - Basic Clock, Output Buffered SMCLK, ACLK and MCLK/10
3
//
4
//  Description: Buffer ACLK on P2.0, SMCLK(DCO) on P1.4 and MCLK/10 on
5
//  P2.2.
6
//  ACLK = LFXT1 = 32768Hz, MCLK = SMCLK = CALxxx_8MHZ = 8MHz
7
//  //* External watch crystal on XIN XOUT is required for ACLK *//
8
//
9
//               MSP430F23x0
10
//             -----------------
11
//         /|\|              XIN|-
12
//          | |                 | 32kHz
13
//          --|RST          XOUT|-
14
//            |                 |
15
//            |             P2.0|-->ACLK = 32kHz
16
//            |             P1.4|-->SMCLK = 8MHz
17
//            |             P2.2|-->MCLK/10 = DCO/10
18
//
19
//  A. Dannenberg
20
//  Texas Instruments Inc.
21
//  January 2007
22
//  Built with CCE Version: 3.2.0 and IAR Embedded Workbench Version: 3.41A
23
//******************************************************************************
24
#include "msp430x23x0.h"
25
#include <io.h>
26
#include <signal.h>
27
28
void main(void)
29
{
30
  WDTCTL = WDTPW + WDTHOLD;                 // Stop Watchdog Timer
31
  if (CALBC1_8MHZ ==0xFF || CALDCO_8MHZ == 0xFF)
32
  {
33
    while(1);                               // If calibration constants erased
34
                                            // do not load, trap CPU!!
35
  }
36
  BCSCTL1 = CALBC1_8MHZ;                    // Set DCO to 8MHz
37
  DCOCTL = CALDCO_8MHZ;
38
  P1DIR |= 0x10;                            // P1.4 output direction
39
  P1SEL |= 0x10;                            // P1.4 = SMCLK
40
  P2DIR |= 0x05;                            // P2.0,2 output direction
41
  P2SEL |= 0x01;                            // P2.0 = ACLK
42
43
  while (1)
44
  {
45
46
    P2OUT ^= 0x04;                         // P2.2 = 0
47
  }
48
}

: Verschoben durch User
von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Wo ist in Deinem Code die Intialisierung des LFXT1?

von Fabian H. (Firma: keine) (eimer)


Lesenswert?

Der Code ist 1zu1 von Ti dann nehm ich doch mal an das es ohne 
Initialisierung geht, aber wenn nicht.

Was meinst du damit genau?

Wenn du die  BCSCTL3 Einstellungen meinst dann sollten die als default 
eigentlich den Quarz wählen oder bin ich da falsch?

Ansonsten würde das bei mir wie folgt aussehen:

BCSCTL3|=LFXT1S_0;
BCSCTL1 = CALBC1_8MHZ; > 0x8C

Gerade getestet, hat absolut nichts gebracht, gleiches verhalten.

Langsam bin ich ratlos, kann es an dem XCAPx liegen? Leider ist die 
Hardware nicht von mir, aber die Kondensatoren sind drin.

von Dennis (Gast)


Lesenswert?

1
void configure_clock_module (void)
2
{
3
  // Initialization of clock source - Crystal 3.6864 MHz
4
  
5
  // BCSCTL1: BASIC CLOCK SYSTEM CONTROL REGISTER 1
6
  // XT2OFF:  XT2 oscillator (bit cleared: XT2 is now active)
7
  BCSCTL1 &= ~( XT2OFF | XTS );
8
  
9
  // BCSCTL3: BASIC CLOCK SYSTEM CONTROL REGISTER 3
10
  // XT2Sx:   XT2 range select (XT2S_2: 3-16 MHz)
11
  // XCAPx:   Oscillator capacitor selection (XCAP_1: ~6pF)
12
  BCSCTL3 = ( XT2S_2 | XCAP_1 );
13
  
14
  do
15
  {
16
    volatile uint16_t i = 0;
17
    IFG1 &= ~ OFIFG;              // Clear oscillator-fault-flag
18
    for (i = 0xFFFF; i > 0; i--)  // Time to get stable
19
    {}                            // Loop
20
  } while (IFG1 & OFIFG);         // Do, until no fault present
21
  
22
  // BCSCTL2: BASIC CLOCK SYSTEM CONTROL REGISTER 2
23
  // SELMx:   Select MCLK (SELM_2: XT2CLK)
24
  // SELS:    Select SMCLK (bit set: XT2CLK)
25
  // DIVM:    Divider MCLK (DIVM_1: /2)
26
  // DIVS:    Divider SMCLK (DIVS_1: /2)
27
  BCSCTL2 = ( SELM_2 | SELS | DIVM_1 | DIVS_1 );
28
}

Das ist jetzt mal eine Initialisierung für zwei Taktquellen.

Für dich interessant ist der
1
BCSCTL1 &= ~XTS; // Low frequency mode - ist standard auf low, also unnötig
und
1
BCSCTL3 |= XCAP_1; // _0 fuer opF, _1 fuer 6pF, _2 fuer 10pF, _3 fuer 12,5pF

Naja und ne Abfrage auf stabilen Quarz sollte natürlich nicht fehlen.

Gruß, Dennis

von Fabian H. (Firma: keine) (eimer)


Lesenswert?

Ok, mitlerweile hab ich mir ein anderes Board besorgt und nun geht es 
einwandfrei mit den oben beschreibenen Einstellungen. Deshalb nehme ich 
an das der Chip eine Macke hat.

Was mich trotzdem intressiert ist die Abfrage zum stabilen Quarz, hast 
du da vll. mal ein Code Schnipsel für mich wo ich mir das anschauen 
kann.

Ich han jetzt 2x 10p Parallel wie im TI Handbuch an den Quarz ran, heißt 
im Umkehrschluss ich muss XCAP_2 für 10p nehmen, bin ich richtig?

von Dennis (Gast)


Lesenswert?

Die do-White Schleife fragt das Error Flag vom Oszillator ab (in meinem 
Beispiel, es gibt aber noch andere Flags - Handbuch)

Die Einstellung mit dem XCap sind interne Kapazitäten - kommen keine 
externen mehr dran dann. Aber der uC muss das unterstützen. Weiß grad 
nicht, ob das alle machen. Die größeren i.d.R. aber schon - Handbuch.

Alternativ halt Cs dran und im Register auf 0 stellen.

Gruß, Dennis

von Dennis (Gast)


Lesenswert?

do-while meine ich natürlich :)

von ZombiesFromMars (Gast)


Lesenswert?

TACH !

[c]while (IFG1 & OFIFG);[\c]
Ich würde sagen, das ist die Abfrage, nach der Du gefragt hast!
Siehe Family USERguide Seite 295!

Zu dem BCSCTL1-register aus deinem BSP schauste mal auf S.299 um 
Userguide.


Viel SCHBASS :)

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.