Forum: Mikrocontroller und Digitale Elektronik MSP430 auf 16MHZ falsch?


von Em G. (exe87)


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
}

von spess53 (Gast)


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

von Em G. (exe87)


Lesenswert?

Das weiss ich ja leider nicht,(zu wenig Erfahrung/Ahnung).
Also braucht er dafür doch mehr Zeit und das mit den gemessenen 400ns 
stimmt bzw könnte hinkommen?

von spess53 (Gast)


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

von jk (Gast)


Lesenswert?

Ja, er braucht für diese Befehle mehr Takte, guck' dir z.B. mal die vom 
Compiler erzeugte Assembler Befehle an und lies nach, wie viele Takte 
pro Instruktion benötigt werden :)

von Em G. (exe87)


Lesenswert?

Klasse, 3 Takte.. passt ja dann ca. :)

Vielen Dank

von seb (Gast)


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.

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.