Gast
#6211968
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
|
Anzeige
|
LED toggelt nicht
Gast
#6211968
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
Gast
#6212064
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
Gast
#6212225
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
Gast
#6212723
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
Gast
#6212763
habe den Fehler gefunden, es wurde das kleine aber feine _BIS_SR(GIE); vergessen
Gast
#6212778
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.
Gast
#6212784
und großen Dank an dich Volker. Hatte das mit volatile nicht auf dem Schirm, ohne Funktioniert es nicht!
Gast
#6212938
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.
Gast
#6213010
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!
Gast
#6213141
die LED toogelt nicht mit den im Array vorgegeben Zeiten. Woran kann das liegen?
Gast
#6213364
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?
Gast
#6213390
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
Gast
#6213396
wendelsberg schrieb: > sorry, aber das ist doch quatsch Hochachtung vor deiner Hilfsbereitschaft...
Gast
#6213404
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.
Gast
#6213408
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
Gast
#6213432
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?
Gast
#6213489
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 ...
Gast
#6213632
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.
Gast
#6213637
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!
Gast
#6213640
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
Gast
#6213643
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
Gast
#6213646
Stefan ⛄ F. schrieb: > Soll ich > raten, woher der Mikrocontroller mit welcher Taktfrequenz versorgt wird? okay sorry, dachte du kennst dich mit dem MSP aus.
Gast
#6213647
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.
Gast
#6213648
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?
Gast
#6213650
lukker schrieb: > ich verstehe sehr wohl, was der code macht Offenbar nicht, sonst könntest du den Fehler selber finden.
Gast
#6213652
aber mal davon abgesehen: hast du verstanden, was ich mit Überlauf meine? und wie ich das verhindern kann?
Gast
#6213655
es ist kein fehler im Code. ich muss noch eine Zeile einfügen, denke ich.
Gast
#6213656
> 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.
Gast
#6213660
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
Gast
#6213667
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.
Gast
#6213847
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?
Gast
#6214109
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!
Gast
#6214123
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
Gast
#6214159
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. Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|