die ISR des Timer B funktionieren, das habe ich im Zusammenhang mit einem kleinerem Programm geprüft. Hat jemand eine Idee, was schief läuft
also meine Therie ist, dass die Wechselzeit, die durch TimerA0 bestimmt wird, viel zu schnell ist (2000 Hz). Deswegen hatte ich zu Angfang CLLD 1 gesetzt, die Änderung der Frequenz/Pulsbreite erst zu übernehemn, wenn CCR= erreicht ist. aber das funktioniert auch nicht
lukker schrieb: > also meine Therie ist Les' mal nach, was das C-Schlüsselwort volatile für eine Funktion hat. Grüßle Volker
Volker B. schrieb: > es' mal nach, was das C-Schlüsselwort volatile für eine Funktion hat Was ich dazu gelesen habe: Der Operator volatile sagt dem Compiler, dass der Inhalt einer Variablen sich außerhalb des normalen Programmflusses ändern kann. Das kann zum Beispiel dann passieren, wenn ein Programm aus einer Interrupt-Service-Routine einen Wert erwartet und dann über diesen Wert einfach pollt das würde für die Variable i und Wobbel_Dir gelten. als müsste ich vor beiden variablen volatile einfügen?
lukker schrieb: > das würde für die Variable i und Wobbel_Dir gelten. als müsste ich vor > beiden variablen volatile einfügen? Versuch macht kluch :-) Kaputtgehen kann nichts, also warum nicht einfach mal probieren? Grüßle Volker
ich habe deswegen so doof gefragt, weil es an der Tatsache nichts ändert, dass die LED nicht toggelt. Denn volatile wäre erst im nächsten Schritt, wenn die LED schonmal toggeln würde,interessant, um Frequenz etc zu ändern
habe den Fehler gefunden, es wurde das kleine aber feine _BIS_SR(GIE); vergessen
Volker B. schrieb: > Les' mal nach, was das C-Schlüsselwort volatile für eine Funktion hat. Na, das ist jetzt aber ein Eigentor. :-P Die Variable Wo... Wird nur in einer Funktion benutzt. Da gibt es kein Problem, das volatile lösen könnte. Hübscher wäre natürlich lokal static.
und großen Dank an dich Volker. Hatte das mit volatile nicht auf dem Schirm, ohne Funktioniert es nicht!
Eine vereinfache Darstellung: Stelle dir einfach vor, dass der C Compiler Variablen gerne in CPU Registern cached weil der Zugriff darauf schneller ist. Wenn die Variable innerhalb einer ISR und ausserhalb einer ISR verwendet wird, hast du womöglich zwei Caches. Dann sind die Änderungen von der ISR ausserhalb der ISR nicht sichtbar (oder umgekehrt). Das gemeine daran ist, dass der Fehler nicht immer auftritt. Eine Codeänderung an ganz anderer Stelle kann das dann aber auslösen.
lukker schrieb: > und großen Dank an dich Volker. Hatte das mit volatile nicht auf > dem > Schirm, ohne Funktioniert es nicht! Na Volker, musst dich nicht selbst für Blödsinn belobigen. Der gezeigte Code geht ohne volatile, da die Variable nur in einer einzigen Funktion verwendet wird!
kann mir bitte jemnad helfen, ich weiß nicht weiter. Ich denke, dass wenn ich eine kleinere Frequenz einstellen möchte, der Timer in einen Überlauf geht?
MaWin schrieb: > Volker B. schrieb: > Les' mal nach, was das C-Schlüsselwort volatile für eine Funktion hat. > > Na, das ist jetzt aber ein Eigentor. :-P > Die Variable Wo... Wird nur in einer Funktion benutzt. Da gibt es kein > Problem, das volatile lösen könnte. > > Hübscher wäre natürlich lokal static. hi sorry, aber das ist doch quatsch wendelsberg
lukker schrieb: > kann mir bitte jemnad helfen Zeige dein aktuelles Programm, den Schaltplan und beschreibe dein Problem präziser. Am besten wäre, wenn du ein Messprotokoll von einem Logic Analyzer bereitstellen würdest.
Stefan ⛄ F. schrieb: > Zeige dein aktuelles Programm, den Schaltplan und beschreibe dein > Problem präziser. Am besten wäre, wenn du ein Messprotokoll von einem > Logic Analyzer bereitstellen würdest. ein Messprotokoll gibt es nicht. Ich benutze den MSP430F5529, also Schaltplan ist frei zugänglich. Mein problem ist folgendes Was erzeugt werden soll: ein PWM Signals mit variabler Frequenz. D.h., dass ich nach jeder Periode sowohl die Frequenz als auch Pulsbreite ändere, indem ich in der ISR eines zweiten Timers eine entsprechende Variable ändere. Die Wechselzeit des zweiten Timers sollte dabei natürlich schneller sein als die Frequenz, dass das eign Signal erzeugt. Wenn ich aber jz die Frequenz über die Variable auf eine kleinere Frequenz einstelle, kann das zum Überlauf führen. Knann ich das verhindern, indem ich sage, dass dem Timer die neue Frequenz und pulsbreite zu einem bestimmten Zeitpunkt übergebe
Du toggelst die LED in zwei ISR. Bist du ganz sicher dass das gewollt war? Teile das doch erstmal auf zwei getrennte LEDs auf, dann schauen wir weiter. Ein Messprotokoll wäre schon ziemlich hilfreich, da du die Interaktionen der beiden Timer (insbesondere was das Fehlerbild angeht) nicht klar in Worte fassen kannst. > ein Messprotokoll gibt es nicht. Ich benutze den MSP430F5529, > also Schaltplan ist frei zugänglich. Der Chip hat 80 Pins, da gibt es viele Möglichkeiten, sie zu beschalten. Das musst du uns schon zeigen. Fehlfunktionen kommen nämlich nicht selten von falscher Beschaltung - ist logisch, oder? Nur mal so ein Beispiel, warum dein Text nicht klar ist: > Wenn ich aber jz die Frequenz über die Variable auf eine kleinere > Frequenz einstelle, kann das zum Überlauf führen Welche Frequenz, welche Variable, kleiner als was, was läuft über? > Knann ich das verhindern, indem ich sage, Durch "sagen" wird am Verhalten deines Programmes nicht ändern. Du musst etwas machen. Du magst jetzt antworten, dass das doch klar war. Aber nicht klar war, was du konkret machen willst. Du hast da viele Informationen im Kopf, die wir auch brauchen, sonst können wir dir nicht helfen. Von welchen konkreten Frequenzen und Pulsbreiten reden wir hier überhaupt? Welche stimmen mit deiner Erwartung überein, und wo weichen sie ab? Woher weist du das so genau, wenn du kein Messprotokoll hast?
Immerhin steht im 17 Post schon mal drin, um welchen Prozessor es sich dreht. Bei Programmierung der Timer kann das schon nicht ganz unwesentlich sein ...
welche Variablen und Zeiten gemeint sind, wird aus dem beigefügten Code ersichtlich. Habe ihn dafür extra aufs Wesentliche zusammengeschrumpft. Stefan ⛄ F. schrieb: > Welche Frequenz, welche Variable, kleiner als was, was läuft über? Die Frequenzen stehen in dem Array Freq, die Werte für die Pulsbreiten in dem Array PBreite. Gemeint ist die Variable i, die in der ISR von Timer A0 schrittweise inkrementiert wird. Mit "kleiner als was" ist folgendes gemeint: Je nach dem, welchen Wert die Variable Wobbel_Dir hat, wird i inkremntiert oder dekremntiert. Das signal sieht dann ähnlich wie die Amplitudenmodulation aus, nur dass die Amplitude kontant bleibt =) über laufen tut das Zählregister des Timer B0, wenn dieser vom Timer A0 einen kleineren Wert für CCR0 erhält, als wie er breits in der neuen Periode gezählt hat.
lukker schrieb: > welche Variablen und Zeiten gemeint sind, wird aus dem beigefügten Code > ersichtlich. Nein wird es nicht. Soll' ich den jetzt für dich reverse engineeren und dann hoffen, dass das auch dem entspricht, was du vor hattest? Soll ich raten, woher der Mikrocontroller mit welcher Taktfrequenz versorgt wird? Weißt du, wenn man so wie du an Probleme heran geht, dann hat man es nicht verdient, Erfolg zu haben. Ehrlich Mann, wie kann man nur so faul sein!
Stefan ⛄ F. schrieb: > Welche stimmen mit deiner Erwartung überein, und wo weichen > sie ab? Woher weist du das so genau, wenn du kein Messprotokoll hast? habe die Zeiten ausgrechnet, die sich für die eingestellte Konfiguration des Timer B0 für die jeweiligen Arraywerte ergeben sollten. Und es sieht zum Beispiel ein Blinder, wenn die Pulsbreite nicht halb so groß ist, wie die Frequenz
Stefan ⛄ F. schrieb: > Nein wird es nicht. Soll' ich den jetzt für dich reverse engineeren und > dann hoffen, dass das auch dem entspricht, was du vor hattest? Soll ich > raten, woher der Mikrocontroller mit welcher Taktfrequenz versorgt wird? > > Weißt du, wenn man so wie du an Probleme heran geht, dann hat man es > nicht verdient, Erfolg zu haben. Ehrlich Mann, wie kann man nur so faul > sein! habe doch danach alles beschrieben. ich verstehe dich. Aber ohne den Code wirds sehr schwer für mich, es verständlich zu machen
Stefan ⛄ F. schrieb: > Soll ich > raten, woher der Mikrocontroller mit welcher Taktfrequenz versorgt wird? okay sorry, dachte du kennst dich mit dem MSP aus.
lukker schrieb: > Aber ohne den Code wirds sehr schwer für mich, > es verständlich zu machen Da ist wohl der Knackpunkt. Wenn du nicht beschrieben kannst, was das Programm tun soll und was es stattdessen tut, dann kann Dir keiner helfen. Dann kannst du dir nicht einmal selbst helfen. Dazu kommt fehlendes Equipment zum nachmessen und visualisieren. Du musst dir erst einmal selber helfen.
Stefan ⛄ F. schrieb: > Dazu kommt > fehlendes Equipment zum nachmessen und visualisieren. das will ich nicht bestreiten. aber ich verstehe sehr wohl, was der code macht. könnte romane schreiben haha. Aber damit schrecke ich die Leserschaft ab. Was brauchst du konkret?
lukker schrieb: > ich verstehe sehr wohl, was der code macht Offenbar nicht, sonst könntest du den Fehler selber finden.
aber mal davon abgesehen: hast du verstanden, was ich mit Überlauf meine? und wie ich das verhindern kann?
> es ist kein fehler im Code Das ist genau die Einstellung, die deinen Weg zur Sackgasse macht. > Was brauchst du konkret? Habe ich geschrieben. Aber da du meine Sprache nicht verstehst, warte mal ab ob sich hier noch jemand andere meldet, mit dem du dich besser verständigen kannst. Ich bin ja nur einer von vielen.
Stefan ⛄ F. schrieb: > Habe ich geschrieben. Aber da du meine Sprache nicht verstehst, warte > mal ab ob sich hier noch jemand andere meldet, mit dem du dich besser > verständigen kannst. Ich bin ja nur einer von vielen. du hast viel geschrieben und gleichzeitig wenig. Schade
lukker schrieb: > du hast viel geschrieben und gleichzeitig wenig. Schade Ich habe die meiner Meinung nach wichtigen Fragen gestellt. Du hättest antworten sollen, dann wären wir weiter gekommen. Du bist meinen Fragen aber überwiegend ausgewichen, nur wenige hast du beantwortet. Nutze die Chance, die Fragen zu beantworten, dann werden andere das aufgreifen und weiter machen.
Stefan ⛄ F. schrieb: > Nutze die Chance, die Fragen zu beantworten, dann werden andere das > aufgreifen und weiter machen. also die einzig unbeantwortet Frage ist wohl die nach der Taktquelle?
lukker schrieb: > also die einzig unbeantwortet Frage ist wohl die nach der Taktquelle? 1) Nein 2) Warum beantwortest du nicht wenigstens diese Frage? Du willst doch offenbar keine Hilfe!
Stefan ⛄ F. schrieb: > 2) Warum beantwortest du nicht wenigstens diese Frage? Du willst doch > offenbar keine Hilfe! weil es nichts mit meinem problem zu tunj hat... gebe es auf, man wird hier ja nur angepöbelt
Ja, wenn du meinst, dass die Taktfrequenz und die Stabilität des Oszillators nichts mit dem Timing zu tun hat, dass ist Aufgeben wirklich die einzig vernünftige Option.
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.