Forum: Mikrocontroller und Digitale Elektronik LED toggelt nicht


von lukker (Gast)


Angehängte Dateien:

Lesenswert?

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

von lukker (Gast)


Lesenswert?

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

von Volker B. (Firma: L-E-A) (vobs)


Lesenswert?

lukker schrieb:
> also meine Therie ist

Les' mal nach, was das C-Schlüsselwort volatile für eine Funktion hat.

Grüßle
Volker

von lukker (Gast)


Lesenswert?

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?

von Volker B. (Firma: L-E-A) (vobs)


Lesenswert?

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

von lukker (Gast)


Lesenswert?

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

von lukker (Gast)


Lesenswert?

habe den Fehler gefunden, es wurde das kleine aber feine _BIS_SR(GIE); 
vergessen

von MaWin (Gast)


Lesenswert?

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.

von lukker (Gast)


Lesenswert?

und großen Dank an dich Volker. Hatte das mit volatile nicht auf dem 
Schirm, ohne Funktioniert es nicht!

von Stefan F. (Gast)


Lesenswert?

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.

von MaWin (Gast)


Lesenswert?

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!

von lukker (Gast)


Lesenswert?

die LED toogelt nicht mit den im Array vorgegeben Zeiten. Woran kann das 
liegen?

von lukker (Gast)


Lesenswert?

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?

von wendelsberg (Gast)


Lesenswert?

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

von Floh (Gast)


Lesenswert?

wendelsberg schrieb:
> sorry, aber das ist doch quatsch

Hochachtung vor deiner Hilfsbereitschaft...

von Stefan F. (Gast)


Lesenswert?

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.

von lukker (Gast)


Angehängte Dateien:

Lesenswert?

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

von Stefan F. (Gast)


Lesenswert?

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?

von my2ct (Gast)


Lesenswert?

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 ...

von lukker (Gast)


Lesenswert?

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.

von Stefan F. (Gast)


Lesenswert?

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!

von lukker (Gast)


Lesenswert?

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

von lukker (Gast)


Lesenswert?

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

von lukker (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Soll ich
> raten, woher der Mikrocontroller mit welcher Taktfrequenz versorgt wird?

okay sorry, dachte du kennst dich mit dem MSP aus.

von Stefan F. (Gast)


Lesenswert?

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.

von lukker (Gast)


Lesenswert?

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?

von Stefan F. (Gast)


Lesenswert?

lukker schrieb:
> ich verstehe sehr wohl, was der code macht

Offenbar nicht, sonst könntest du den Fehler selber finden.

von lukker (Gast)


Lesenswert?

aber mal davon abgesehen: hast du verstanden, was ich mit Überlauf 
meine? und wie ich das verhindern kann?

von lukker (Gast)


Lesenswert?

es ist kein fehler im Code. ich muss noch eine Zeile einfügen, denke 
ich.

von Stefan F. (Gast)


Lesenswert?

> 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.

von lukker (Gast)


Lesenswert?

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

von Stefan F. (Gast)


Lesenswert?

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.

von lukker (Gast)


Lesenswert?

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?

von Stefan F. (Gast)


Lesenswert?

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!

von lukker (Gast)


Lesenswert?

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

von Stefan F. (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.