MSP430 auf 16MHZ falsch?

OP #2951929
Lesenswert?

Hallo zusammen,
Zur Info:
Ich habe ein MSP-FET430U28A mit einem MSP430G2452 uC.

Um eine Zeitmessung durchzuführen habe ich ein simples Programm 
geschrieben und den uC an ein Osz. angeschlossen.
Den uC möchte ich auf 16MHz einstellen und die Periodenwechsel am Osz. 
anzeigen lassen.

Mein Problem ist, das am Osz. angezeigt wird, das Pro Flankenwechsel ca. 
400ns gebraucht werden, jedoch müsste dieser doch ca. bei 62ns liegen.

Jetzt meine Frage:
Habe ich einen Rechenfehler gemacht, stelle ich die 16MHz im Programm 
falsch ein, oder hat dies andere Gründe?

Liebe Grüße und besten Dank für Antworten

Code:
1
#include <msp430G2452.h>
2

3
void main(void){
4

5
  WDTCTL = WDTPW | WDTHOLD;
6

7
  BCSCTL1 = CALBC1_16MHZ;
8
  DCOCTL = CALDCO_16MHZ;
9

10

11
  P1DIR |= BIT0;
12
  P1SEL = 0x00;
13

14
  while(1){
15
    P1OUT ^= BIT0;
16
  }
17
}
Gast #2951935
Lesenswert?

Hi

>Jetzt meine Frage:
>Habe ich einen Rechenfehler gemacht, stelle ich die 16MHz im Programm
>falsch ein, oder hat dies andere Gründe?

Meinst du im Ernst, das das

>  while(1){
>    P1OUT ^= BIT0;
>  }

In einem Controllertakt ausgeführt wird?

MfG Spess
Gast #2951954
Lesenswert?

Hi

>Also braucht er dafür doch mehr Zeit und das mit den gemessenen 400ns
>stimmt bzw könnte hinkommen?

Klar. Das sind einige Assemblerbefehle, die 1..2 Takte brauchen.

Sieh dir doch einfach an, was der Compiler daraus macht.

MfG Spess
Gast #2952030
Lesenswert?

Wenn du jetzt noch irgendeien Zeile Code dazufügst in deiner while(1) 
Schleife, wird sich deine Taktung wieder ändern, daher misst man Zeiten 
immer in Interrupts, weil man dann eine genaue Zeitbasis zugrunde legen 
kann.

Aber dafür musst du wahrscheinlich noch ein bisschen mehr über C und 
MSP430 wissen, um das zu programmieren.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren