mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MSP430f2370 Quarz und ACLK Problem


Autor: Fabian Hof (Firma: keine) (eimer)
Datum:

Bewertung
0 lesenswert
nicht 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!
//******************************************************************************
//  MSP430F23x0 Demo - Basic Clock, Output Buffered SMCLK, ACLK and MCLK/10
//
//  Description: Buffer ACLK on P2.0, SMCLK(DCO) on P1.4 and MCLK/10 on
//  P2.2.
//  ACLK = LFXT1 = 32768Hz, MCLK = SMCLK = CALxxx_8MHZ = 8MHz
//  //* External watch crystal on XIN XOUT is required for ACLK *//
//
//               MSP430F23x0
//             -----------------
//         /|\|              XIN|-
//          | |                 | 32kHz
//          --|RST          XOUT|-
//            |                 |
//            |             P2.0|-->ACLK = 32kHz
//            |             P1.4|-->SMCLK = 8MHz
//            |             P2.2|-->MCLK/10 = DCO/10
//
//  A. Dannenberg
//  Texas Instruments Inc.
//  January 2007
//  Built with CCE Version: 3.2.0 and IAR Embedded Workbench Version: 3.41A
//******************************************************************************
#include "msp430x23x0.h"
#include <io.h>
#include <signal.h>

void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop Watchdog Timer
  if (CALBC1_8MHZ ==0xFF || CALDCO_8MHZ == 0xFF)
  {
    while(1);                               // If calibration constants erased
                                            // do not load, trap CPU!!
  }
  BCSCTL1 = CALBC1_8MHZ;                    // Set DCO to 8MHz
  DCOCTL = CALDCO_8MHZ;
  P1DIR |= 0x10;                            // P1.4 output direction
  P1SEL |= 0x10;                            // P1.4 = SMCLK
  P2DIR |= 0x05;                            // P2.0,2 output direction
  P2SEL |= 0x01;                            // P2.0 = ACLK

  while (1)
  {

    P2OUT ^= 0x04;                         // P2.2 = 0
  }
}

: Verschoben durch Moderator
Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wo ist in Deinem Code die Intialisierung des LFXT1?

Autor: Fabian Hof (Firma: keine) (eimer)
Datum:

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

Autor: Dennis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
void configure_clock_module (void)
{
  // Initialization of clock source - Crystal 3.6864 MHz
  
  // BCSCTL1: BASIC CLOCK SYSTEM CONTROL REGISTER 1
  // XT2OFF:  XT2 oscillator (bit cleared: XT2 is now active)
  BCSCTL1 &= ~( XT2OFF | XTS );
  
  // BCSCTL3: BASIC CLOCK SYSTEM CONTROL REGISTER 3
  // XT2Sx:   XT2 range select (XT2S_2: 3-16 MHz)
  // XCAPx:   Oscillator capacitor selection (XCAP_1: ~6pF)
  BCSCTL3 = ( XT2S_2 | XCAP_1 );
  
  do
  {
    volatile uint16_t i = 0;
    IFG1 &= ~ OFIFG;              // Clear oscillator-fault-flag
    for (i = 0xFFFF; i > 0; i--)  // Time to get stable
    {}                            // Loop
  } while (IFG1 & OFIFG);         // Do, until no fault present
  
  // BCSCTL2: BASIC CLOCK SYSTEM CONTROL REGISTER 2
  // SELMx:   Select MCLK (SELM_2: XT2CLK)
  // SELS:    Select SMCLK (bit set: XT2CLK)
  // DIVM:    Divider MCLK (DIVM_1: /2)
  // DIVS:    Divider SMCLK (DIVS_1: /2)
  BCSCTL2 = ( SELM_2 | SELS | DIVM_1 | DIVS_1 );
}

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

Für dich interessant ist der
BCSCTL1 &= ~XTS; // Low frequency mode - ist standard auf low, also unnötig
und
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

Autor: Fabian Hof (Firma: keine) (eimer)
Datum:

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

Autor: Dennis (Gast)
Datum:

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

Autor: Dennis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
do-while meine ich natürlich :)

Autor: ZombiesFromMars (Gast)
Datum:

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

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.