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
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).
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]
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.
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.
int i=0; int sin_tabelle[1333]; for(i=0;i<1333;i++) Kann Dein i jemals den Wert 1333 erreichen?
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.