MSP430F2013 Clock Konfiguration

OP #3208681
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
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
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 #3209352
> 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.
OP #3209393
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.
Gast #3209460
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.
Gast #3210776
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

Eine eigene Frage? Dieser Thread ist über 13 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.