Forum: Mikrocontroller und Digitale Elektronik MSP430F2013 Clock Konfiguration


von Tobias B. (xaser)


Lesenswert?

Hi zusammen,

ich spiele gerade mit einer WS2812 LED rum und habe mir dazu das 
eZ430-F2013 Kit aus der Bastelkiste gekramt.

Zum ansteuern der LED brauche ich ein genaues timing, dass ich mit einem 
Bit-Banging Protokoll umsetzen wollte, da es bei anderen methoden wohl 
immer wieder zu Problemen gekommen ist.

Ich möchte also den MSP430F2013 mit 16Mhz betreiben, und wenn ich das 
dem Userguide und Datenblatt richtig entnehmen, müsste das hier dafür 
ausreichen:
1
  WDTCTL = WDTPW + WDTHOLD;  // Stop watchdog timer
2
  BCSCTL1 = CALBC1_16MHZ;
3
  DCOCTL = CALDCO_16MHZ;  //Set clock to 16MHz

Da das Bit-Banging jedoch nicht so gut geklappt hat, und ich an der 
Hardware keine Probleme feststellen konnte, wollte ich mal überprüfen, 
ob der uC tatsächlich mit 16Mhz läuft. Ich habe dazu diesen code 
eingebaut:
1
        P1OUT = 0x01;   //LED ON
2
  unsigned long i = 0;
3
  for(i = 0; i < 2285714; ++i)  //1s loop, 7cycles per loop
4
    _NOP();
5
  for(i = 0; i < 2285714; ++i)
6
      _NOP();
7
  for(i = 0; i < 2285714; ++i)
8
      _NOP();
9
  for(i = 0; i < 2285714; ++i)
10
      _NOP();
11
  for(i = 0; i < 2285714; ++i)
12
      _NOP();
13
  P1OUT &= ~(0x01); ///LED OFF after 5s

Die idee ist, dass ein Schleifen durchlauf laut Code Composer Studio 
Debugger genau 7 cycles braucht, also dürften 2285714 durchläufe fast 
genau eine Sekunde dauern. Die LED sollte also ca. 5 Sekunden leuchten.

Dies ist jedoch bei weitem nicht der Fall, im Release modus ohne 
verbundenen Debugger dauerts ca. 11 Sekunden, mit Debugger konnte ich 
garnicht so lange warten, bis die LED wieder aus ging.

Ich habe leider kein Oszi zu Hause womit ich die Clock-Frequency testen 
könnte, deswegen bleibt mir keine alternative.

Hat jemand eine Idee, woran das liegen könnte?

MfG

von Max G. (l0wside) Benutzerseite


Lesenswert?

Zwei Punkte:
- Der Ansatz mit der Verzögerungsschleife nimmt an, dass der µC 
tatsächlich sieben Instruktionen pro Schleifendurchlauf braucht. Arbeite 
doch mit dem Timer-Interrupt, dann weißt du genauer, wie lange es nun 
gedauert hat.
- Ich habe mir immer den Clocktree aus dem Family User´s Guide 
ausgedruckt und mir reingemalt, wie die Clock zum Rechner kommt. Das ist 
beim MSP430 nicht ganz trivial. So sieht man aber schön, an welchen 
Registern man rumfummeln muss.

Max

von Tobias B. (xaser)


Lesenswert?

Hi, danke für den Tipp, bin jetzt nochmal beim Debuggen alle wichtigen 
Register durchgegangen, sollte stimmen.

Ich habe jetzt mal auf eine PWM methode gewechselt, da scheinen die 
Taktzeiten auch zu stimmen, aber ein ordentliches Signal bekomme ich 
noch nicht zustande.

Ich werde mich wohl morgen mal in die Uni setzen und ein bisschen 
messen.

von transformer (Gast)


Lesenswert?

> Hat jemand eine Idee, woran das liegen könnte?

Erstellt ein List file und zähle dann die Befehle und deren Dauer. Du 
weist doch gar nicht, was der Compiler aus dem C code macht.

von Tobias B. (xaser)


Lesenswert?

transformer schrieb:
>> Hat jemand eine Idee, woran das liegen könnte?
>
> Erstellt ein List file und zähle dann die Befehle und deren Dauer. Du
> weist doch gar nicht, was der Compiler aus dem C code macht.

Natürlich weiß man das - Der CCS Debugger zeigt einem den code im 
disassembly view an - eine cycle count funktion gibts auch.

von transformer (Gast)


Lesenswert?

Tobias B. schrieb:
> im Release modus ohne
> verbundenen Debugger dauerts ca. 11 Sekunden, mit Debugger konnte ich
> garnicht so lange warten, bis die LED wieder aus ging

Tobias B. schrieb:
> Natürlich weiß man das - Der CCS Debugger zeigt einem den code im
> disassembly view an - eine cycle count funktion gibts auch

Da bin ich mir bei dir aber nicht wirklich sicher.

von Tobias B. (xaser)


Lesenswert?

transformer schrieb:
> Da bin ich mir bei dir aber nicht wirklich sicher.

nicht wirklich relevant ob du dir da sicher bist, nach ordentlich trial 
& error und studenlangem tweaking läufts jetzt wie ne 1 :)

von transformer (Gast)


Lesenswert?

Tobias B. schrieb:
> transformer schrieb:
>> Da bin ich mir bei dir aber nicht wirklich sicher.
>
> nicht wirklich relevant ob du dir da sicher bist, nach ordentlich trial
> & error und studenlangem tweaking läufts jetzt wie ne 1 :)

Dann zeig mal deine Lösung, aber bitte den ganzen Code.

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.