Forum: Mikrocontroller und Digitale Elektronik MSP430F2272 Timer Frequenz berechnen


von Tim H. (msp430h)


Lesenswert?

Hallo zusammen,

ich beschäftige mich mit den µC MSP430 und möchte einen TimerA auf einen 
port ausgeben (Piezo) Buzzer zum ton erzeugen.

Die effektive Frequenz liegt bei 4,1 kHz.

Meine frage wie berechne ich die zahl die ich in das CCRx register 
schreiben muss um auf eine Frequenz von 4,kHz zu kommen.

Ich habe den SMCLK für den Timer bestimmt der eine Frequenz von 1MHz 
hat.

ich habe mir im forum Beitrag "Wie Frequenz von Timer berechnen" 
diesen Beitrag durchgelesen aber versteh das nicht so ganz da ich beim 
msp430 immer dividier nur 1, 2 , 4 oder 8 als Vorteile habe.

danach möchte ich dieses signal auf das P1.5 des MSP430F2272 ausgeben, 
wenn ich das richtig verstanden habe muss ich dort dann die 
Konfiguration von PxSEL und PxDIR auf die im Datenblatt angegeben werte 
für den TimerA Ausgabe setzen.

ich bekomme aber nicht die Berechnung für die Frequenz hin.

könnte einer von euch mir das bitte Erklären.

Vielen Dank im Voraus

von Easy (Gast)


Lesenswert?

Schau dir im Family User Guide das Kapitel zum TimerA an. Du erkennst, 
dass der Timer mehrere Mode unterstützt. Die Berechnung der Frequenz, 
bzw. wie welche Register zu laden sind, hängt vom gewählten Mode ab.

Du musst dir zuerst überlegen, wie du Timer und Port Pin zusammen 
bringen willst?

Ein Timer Beispiel
Beitrag "Re: Frequenzmessung mit MSP430 im LPM3"

von Clemens L. (c_l)


Lesenswert?

Einen Prescaler brauchst du nicht.

1 MHz / 4,1 kHz ist ungefähr 244. Also Up Mode, und CCR0=244.

Um ein Rechtecksignal auszugeben, konfiguriere CCR1 auf Set/Reset (oder 
Reset/Set), und setze CCR1=122. (Andere Werte von CCR1 verändern die 
Länge der 0/1-Abschnitte, aber nicht die Frequenz.)

(Und dann musst du noch den richtigen Pin für CCR1 heraussuchen.)

: Bearbeitet durch User
von Tim H. (msp430h)


Lesenswert?

Easy schrieb:
> Ein Timer Beispiel
> Beitrag "Re: Frequenzmessung mit MSP430 im LPM3"

Hallo Easy,

wie ein Timer interrupt programmiert und wie die einzelnen bits gesetzt 
werden is mir klar.

ich muss aber ja eine Frequenz von 4,1 kHz bekommen damit der Piezo 
(Buzzer) einen ton von sich gibt.

 // init Timer0_A, SMCLK, up CCR0, div 8 -> 18.75 kHz
  TA0CCR0 = 56250;      // 3s
  TA0CCR1 = 18750;      // 1s
  TA0CCR2 = 37500;      // 2s

das ist der code aus dem Beitrag den du mir gepostet hast.
Der Beitrags Author hat den up mode beim Timer genutzt was bedeutet das 
er ja bis zu dem im CCRx wert eingegeben zählt und dann das CCIFG bit 
setzt (interrupt) dann fällt er wieder auf 0 was das (TAVI) bit setzet.

in diesem Beispiel ist eine Frequenz von 18,75 kHz, das TA0CCR1 register 
wird mit 18750 gefüllt so hat man 1Hz (1Hz = 1s).

nur wie ist das wenn ich 4,1 kHz haben will, bis wohin müsste er da 
zählen?
Ich muss halt Wissen wie man es berechnet (den CCrx wert)

ich hoffe es ist verständlich erklärt.

Bin noch jung und Anfänger deswegen fällt mir das erklären schwer.

von Tim H. (msp430h)


Lesenswert?

Clemens L. schrieb:
> 1 MHz / 4,1 kHz ist ungefähr 244. Also Up Mode, und CCR0=244.
>
> Um ein Rechtecksignal auszugeben, konfiguriere CCR1 auf Set/Reset (oder
> Reset/Set), und setze CCR1=122.

Hallo Clemens,

danke für diese bespiel,

bin jetzt etwas verwirrt was CCR0 und CCR1 Betrifft
CCR1 ist 1/2 von CCR0 wegen high und low flanke ?

CCR0 Wäre dann die 4,1kHz die ich auf meine pin legen möchte?

von Clemens L. (c_l)


Lesenswert?

Tim H. schrieb:
> bin jetzt etwas verwirrt was CCR0 und CCR1 Betrifft
> CCR1 ist 1/2 von CCR0 wegen high und low flanke ?

Genau.

Mit anderen Werten von CCR1 könntest du andere PWM-Signale erzeugen.

> CCR0 Wäre dann die 4,1kHz die ich auf meine pin legen möchte?

Ja.

Du könntest auch ein 4,1-kHz-Signal erzeugen, indem du CCR0 bis 122 
zählen lässt und Toggle als Output Mode benutzt (in diesem Fall benutzt 
du den Ausgang von CCR0 uind brauchst CCR1 nicht). Das funktioniert für 
ein 50%/50%-Signal genauso gut, aber es ist öfters sinnvoll, ein anderes 
Verhältnis auszugeben oder (mit mehreren CCRs) verschiedene PWM-Signale 
mit gleicher Frequenz auszugeben.

: Bearbeitet durch User
von Easy (Gast)


Lesenswert?

Also, in dem Beispiel läuft der Timer mit 18,75 kHz. Das bedeutet 18750 
Takte pro Sekunde. Teilt man 1s durch 18750, erhält man die Zeit pro 
Takt. Der Interrupt vom CCRx kommt, bei (Zeit pro Takt) * (Wert im CCRx 
Register).

Es efehlt aber immer noch die Verbindung vom Port Pin zum Timer. ;-)

Der msp430 bietet dafür die Timer OUTMODE an bestimmten Pins an. Dann 
brauchtst du keine ISR. ;-)

von Tim. H (Gast)


Lesenswert?

Easy schrieb:
> Timer OUTMODE

Hallo Easy,

OUTMOD?

Das habe ich nur in dem User Guide gelesen aber ich meine im Timer 
berreich. In der I/O erklärung hbae ich nichts gefunden von OUTMOD.

Könntest du mir das vieleicht erklären?.

Woran erkenne ich welcher Px.x für outmod bestimmt ist?

ich nehme z.B den MSP430 den ich oben angegeben habe und das p1.5

da sehe ich dann folgendes

P1.5 (2) für default [I/O]   Pxdir I = 0 / O =1 PxSel = 0
Timer_A3.TA0                 Pxdir = 1 PxSel = 1
TMS                          Pxdir = X PxSel = X

Danke im Vorraus

von Easy (Gast)


Lesenswert?

Du hast das genau richtig erkannt. Die verschiedenen Pins haben mehrere 
alternative Funktionen. Eine Möglichkeit ist bei manchen Pins die 
Verbindung mit der Timereinheit. Für den TimerA sind das die Pins mit 
der Bezeichnung TA0, TA1, TA2.

Im Timer Kapitel gibt es die Erklärung für OUTMOD. Der Output Mode 6 mit 
(12.2.5.4 Output Example —) Timer in Up/Down Mode könnte dich vielleicht 
interessieren. ;-)

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.