MSP430F2013 Clock Konfiguration

OP #3208681
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
Persönliche Seite #3208748
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
OP #3209303
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.
Gast #3210776
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.

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