Forum: Mikrocontroller und Digitale Elektronik MSP430 und Quarz


von Daniel G. (daniel83)


Angehängte Dateien:

Lesenswert?

Hallo Zusammen,

Ich habe zwei test Boards aufgebaut und habe nun Probleme mit dem Takt. 
Der Oszilator ist auf beieden Boards der gleich 8Mhz Oszilator und auf 
beiden gleich angeschlossen. (siehe Plan)
1
void vInitSystem( void )
2
{
3
  unsigned int i;
4
  WDTCTL = WDTPW + WDTHOLD;             // Stop WDT
5
BCSCTL1  |=  XTS ;
6
       
7
8
9
  do {
10
    IFG1 &= ~OFIFG;                       // Clear OSCFault flag
11
    for (i = 0xFF; i > 0; i--);           // Time for flag to set
12
  } while ((IFG1 & OFIFG) == OFIFG);      // OSCFault flag still set?
13
14
15
  BCSCTL2 |= SELM1+SELM0;
16
.....
17
}
18
19
void main (void)
20
{
21
uword uwOldTime;
22
23
24
  // init of all system- components
25
  vInitSystem();
26
  vInitTimer();
27
  vInitUart();
28
29
30
  // mainloop
31
  while(1)
32
  {
33
34
   PORT_LEDGREEN_OUT  ^= PIN_LEDGREEN;
35
36
37
  } // while(1)
38
} // void main (void)

Mit einem Board bleibe ich in der Überprüfung des Quarzes steken. die 
letzte anweisung ist dort die For() Schleife. nehme ich die Überprüfung 
heraus, so läuft das Programm ab.

Ich hoffe mit meiner Riesen while(1) Schjleife tue ich das was ich 
möchte, nämlich den Takt wenn auch halbiert ausgeben.

An einem Board kann ich an der LED, welche ich schalte 0,5 Mhz messen, 
auf dem anderen Board, das mit den Problemen bei der Initialisierung nur 
60kHz.

Ich hätte natürlich gerne die 8 MHz, die ich angeschlossen habe.

Kann mir Jemand weiter helfen?

von Stefan W. (wswbln)


Lesenswert?

...hast Du wirklich Quarze angeschlossen? Das Bauteil im Schaltplan 
sieht eher so nach Keramikresonator mit eingebauten Lastkondensatoren 
aus (CSTCC von Murata oder so). Da wäre ich mir so aus dem Hut jetzt 
nicht sicher, ob die Oszillatorschaltung des MSP430 dafür ausgelegt ist.

von Daniel G. (daniel83)


Lesenswert?

Hallo Stefan,

Deine annahme ist korekt. es handelt sich um einen "Resonator 
CSTCC8,00MG" von Murata. Ich habe eine andere Schaltung vor mir, auf der 
auch ein Oszilator mit eingebauten Lastkondensatoren verbaut ist, 
zumindest sagt das sowohl der Schaltplan, als auch, dass auf dem Board 
keine Kondensatoren in Oszilatornahe zu finden wären. Das Referenzboard 
ist aber nicht von mir, deshalb kann ich das nur annehmen und nicht mit 
bestimtheit sagen.

von Stefan W. (wswbln)


Lesenswert?

Habe gerade mal ins Datenblatt geschaut - eigentlich müsste es mit 
Resonator gehen. Hast Du beachtet, dass Du entweder den LFXT1 Oszillator 
im HF-Mode oder den LFXT2 Oszillator verwenden musst?

Such' mal im Datenblatt der F1xx Serie nach "Sourcing MCLK from a 
Crystal".

von Daniel G. (daniel83)


Lesenswert?

Ich habe mich an diesem Artikel 
http://www.mikrocontroller.net/articles/MSP430_Codebeispiele#Initializing.2F_Configuring_UARTs 
orientiert. Das Beispiel für init_XT, weil XT 2 hab ich nicht 
angeschlossen. das Durfte in etwa dem eintsprechen, was in der Anleitung 
in ASM steht, das ist leider nicht meine Stärke.
1
; Select LFXT1 (HF mode) for MCLK
2
BIC #OSCOFF,SR ; Turn on osc.
3
BIS.B #XTS,&BCSCTL1 ; HF mode
4
L1 BIC.B #OFIFG,&IFG1 ; Clear OFIFG
5
MOV #0FFh,R15 ; Delay
6
L2 DEC R15 ;
7
JNZ L2 ;
8
BIT.B #OFIFG,&IFG1 ; Re−test OFIFG
9
JNZ L1 ; Repeat test if needed
10
BIS.B #SELM1+SELM0,&BCSCTL2 ; Select LFXT1CLK

das ist aus dem Manual

von Stefan W. (wswbln)


Lesenswert?

...und Dein Delay wird nicht vom C-Compiler wegoptimiert?

von Daniel G. (daniel83)


Lesenswert?

Wenn mir der Compiler das als nächste Anweisung beim inline debuggen 
anzeigt??

Ich glaube aber nicht, das dort der Hase begraben ist. Sondern eher 
tatsächlich in möglicherweise defekter Hardware.

Für mich interesant ist die Frage, ob die initialisierung grundsätzlich 
korekt ist?
Die 0,5 MHz genauer 0,578MHz die 8 MHz sind, weil ich diese Halbiere und 
der Prozessor je Port Pin, den er setzten muss 1 Taktbraucht, also für 
den einen Port 8Takte *2 weil ich nur wechsele?

Wenn beide WErte irgendwie zufällig sind, dann bringt mich diese 
Überlegung auch nciht weiter und ich kann nicht wirklich auf Fehlersuche 
gehen.

von Daniel G. (daniel83)


Lesenswert?

Ich suche auch eine Möglichkeit um ordentlich den Takt zu ermittel. 
Meine LED Wariante kann ja nicht der sicherste Weg sein.
Den Oszilator kann ich am Montag vieleicht mal tauschen das ergebnis mit 
dem Schnellen Board stimmig ist und ein Software bug damit 
ausgeschlossen ist.

von Stefan W. (wswbln)


Lesenswert?

Mal andersrum gefragt: Was steht dir eigentlich an Messmitteln zur 
Verfügung?

von Daniel G. (daniel83)


Lesenswert?

Ich habe auf der Arbeit, wo auch die Boards stehen ein Digital 
Industrieal Skop von Fluke und Rowley Chrosstudio mit entsprechendem 
JTAG Interface

von Jörg S. (joerg-s)


Lesenswert?

Du kannst dir die internen Clocks an den µC Pins direkt ausgeben lassen. 
Einfach den entsprechenden Pin (Siehe Datenblatt) mit PSEL umschalten.
Dann kannst du problemlos mi dem Oszi messen.

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.