Forum: Mikrocontroller und Digitale Elektronik MSP430 FG4618 - TACCR0 Funktionsweise


von Stefan M. (stefan_m)


Lesenswert?

Hey,

ich schlag mich immer noch mit dem Beispielcode aus der TI Datei 
msp430xG46x_dma_07_CCE.c rum.

Ich hänge da gerade an der Stelle:

  TACCTL1 = OUTMOD_3;                       // TACCR1 set/reset
  TACCR1 = 01;                              // TACCR1 PWM Duty Cycle
  TACCR0 = 025-1;                           // Clock period of TACCR0
  TACTL = TASSEL_2 + MC_1;                  // SMCLK, upmode

Explizit Zeile 3. Was genau bedeutet diese?

Wenn ich mein Sinussignal an dem entsprechenden PIN abgreife, erhalte 
ich eine Frequenz von 1,5 kHz pro Periode. Wie kommt diese Frequenz 
zustande und wie kann ich sie ändern?

von Opa und Oma (Gast)


Lesenswert?

Hallo,

ohne mich mit deinem BSP auseinandergesetzt zu haben, im Upmode beginnt 
der Zähler bei 0 und zählt bis er TACCR0 erreicht hat. Danach beginnt er 
wieder bei 0 usw.
Wie schnell von 0 bis 25-1 gezählt wird, bestimmt die Clockeinstellung.
Du hast SMCLK als Clocksource eingestellt. Schau nach mit welcher 
Frequenz die Taktung von SMCLK erfolgt.

Ob nun eine Periode des Zählers (also 0 bis 24) auch eine Periode deines 
Sinus ist, weiß ich nicht ohne mir den Rest des Code anzuschauen.

Nimm Dir den USERGUIDE zu deinem MSP und lies das Kapitel Basic Clock 
Module.
Finde heraus was ein Lookuptable im Zusammenhang mit der Erzeugung von 
Sinussignalen ist.


Viel Spass
ich

von Stefan M. (stefan_m)


Lesenswert?

Hi,

also in der Datei steht als Beschreibung folgendes:

//   Description: DMA0 and DMA1 are used to transfer a sine and cos 
look-up
//   table word-by-word as a repeating block to DAC12_0 and DAC12_1. The
//   effect is sine and cos wave outputs. Timer_A operates in upmode 
with
//   TACCR1 loading DAC12_0 amd DAC12_1 on rising edge and DAC12_OIFG
//   triggering next DMA transfers. DAC12_0 and DAC12_1 are grouped for
//   jitter-free operation. ACLK = LFXT1 = 32768Hz, MCLK = SMCLK = 
default
//   DCO = 32 x ACLK = 1048576Hz

Demzufolge wäre mein SMCLK = 1048576Hz , oder?

Das Register TACCRO wird jedoch mit dem Takt von ACLK abgezählt. Denn 
wenn ich dort die Dezimalzahl 32768 eingebe, ist meine Periode genau 1 
Sekunde lang. [Wieso wird an dieser Stelle überhaupt mit Oktalzahlen 
gearbeitet?] D.h. der Takt gibt an, in welcher Zeit der Ausgang vom DAC 
die Werte ausgibt.

Mit meinen 32 Werten aus der LookUpTable, die im DMA Speicher hin und 
her geschoben werden, um diese dann vom DAC umzuwandeln und auszugeben, 
erhalte ich bei einem TACCRO = 32768 eine Periode von einer Sekunde.
Halbiere ich TACCR0, verdoppelt sich die Periode auf 2 Perioden pro 
Sekunde.

Kann man sagen, dass der Sinus durch die 32 vorgegebenen Werte mit einer 
Periode aus der LookUpTable schon fest gespeichert ist und er durch den 
Wert im TACCR0 nun die Frequenz dieses Sinus eingestellt werden kann?

Denn wenn ich eine Sinusperiode, erzeugt aus 32 Werten, als "Bild" 
festlege (nur mal angenommen ;)) und er bei TACRR0 = 32768 ein "Bild" 
pro Sekunde ausgibt ... und man dann TACCR0 halbiert und er 2 "Bilder" 
pro Sekunde ausgibt ... entspricht diese Frequenz der "Bildinformation" 
... in meinem Fall dann 2 "Bilder" pro Sekunde = 2 "Sinusperioden" pro 
Sekunde.

Könnt ihr mir folgen ^^

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.