Forum: Mikrocontroller und Digitale Elektronik MSP430 - PWM


von user (Gast)


Lesenswert?

Hallo,

ich habe ein Development board von Olimex mit dem Msp430f1611.
Schaltplan: http://www.olimex.com/dev/images/msp430-pxxx-sch.gif

Als Quarz (Q2) befindet sich ein 8Mz Quarz auf dem Board.

Ich versuche eine PWM zu Programmieren mit dem Up/down-mode vom TimerA. 
Das Dreieckssignal soll eine Frequenz von 3kHz haben.

Um das grob zu überprüfen habe ich die zeit für 12000 
interrupt-auslösungen bestimmt. Bei 3kHz sollte es ca 2s dauern. Real 
dauert es aber ca 12s.

Habt ihr eine Idee woran es liegen könnte?

Hier ist mein bisheriger Code:
http://nopaste.info/817a1e47c3.html

von Jörg S. (joerg-s)


Lesenswert?

SMCLK läuft tatsächlich mit 8MHz?

>Ich versuche eine PWM zu Programmieren mit dem Up/down-mode vom TimerA
Du hast aber auf Up-Mode eingestellt (MC_1), was ich eigentlich für PWM 
auch besser finde...

C-Code kannst du übrigens auch direkt in deinen Beitrag einfügen (Siehe 
Formatierungsoptionen).

von user (Gast)


Lesenswert?

Danke, mit ACLK und dem entsprechendem "hig frequenz bit" läuft es :)

Leider bin ich schon aufs nächste Problem gestoßen.

Die PWM soll ein sinus erzeugen, dafür wollte ich zunächst eine Tabelle 
mit sinuswerten anlegen, jedoch bekomme ich beim berechnen der 
Sinuswerte die Fehlermeldung: "The stack pointer for stack "Stack" is 
outside the stack range"

Code:
[c]int main()
{
int i=0;
int sin_tabelle[1333];

for(i=0;i<1333;i++)
{
sin_tabellie[i]=(int)(sin(i)*1333);
}

.
.
.

}[\c]

von Jörg S. (joerg-s)


Lesenswert?

user schrieb:
> Die PWM soll ein sinus erzeugen, dafür wollte ich zunächst eine Tabelle
> mit sinuswerten anlegen, jedoch bekomme ich beim berechnen der
> Sinuswerte die Fehlermeldung: "The stack pointer for stack "Stack" is
> outside the stack range"
Das heisst das der Stack die "Warnschwelle" überschritten hat, die du im 
Compiler eingestellt hast.
Entweder ignorieren, oder den Stack Bereich vergrößern (so das 
sin_tabelle[] rein passt). Das ändert an deinem Programm aber nichts. 
Die Stack Einstellung im Compiler ist nur eine Hilfe für dich.
Wenn es auf Geschwindigkeit ankommt, sollte man sin_tabelle[] vielleicht 
auch eher als globale Variable anlegen, dann muss sie nicht erst auf den 
Stack kopiert werden.

von user (Gast)


Lesenswert?

Danke, ich habe jetzt die Sinustabelle global deklariert. Dadurch 
bekomme ich die Warnmeldung nicht mehr aber dennoch läuft das Programm 
nicht. Die for-Schleife wird nur bis i=9 ausgeführt, danach beginnt das 
Programm von vorne.

von User (Gast)


Lesenswert?

int i=0;
int sin_tabelle[1333];

for(i=0;i<1333;i++)

Kann Dein i jemals den Wert 1333 erreichen?

von user (Gast)


Lesenswert?

nein, i kann maximal 1332 werden

von Helmut L. (helmi1)


Lesenswert?

user schrieb:
> Die for-Schleife wird nur bis i=9 ausgeführt, danach beginnt das
> Programm von vorne.

Entweder dein Speicher laeuft ueber oder der Watchdog bellt dazwischen ?

Gruss Helmi

von user (Gast)


Lesenswert?

Watchdog wars.

Danke für deine schnelle Antwort

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.