Guten Tag,
bitte um Lösungsvorschläge für folgende Aufgabe:
Es soll eine Synchronisation auf ein Digitales Signal entworfen werden.
Das Signal, auf das synchronisiert werden soll hat folgende Sequenz
a-b-c-a...
-(a) Frequenz 100Hz, Rechteck mit 25% PWM (Dauer 100ms)
-(b) Frequenz 100Hz, Rechteck mit 50% PWM (Dauer 100ms)
-(c) Frequenz 100Hz, Rechteck mit 75% PWM (Dauer 100ms)
Schnellstmöglich nach einen Wechsel a-b oder b-c bzw. c-a soll auf dem
Port 1 eines MSP430 ein Synchronisiersignal ausgegeben werden. Bei a-b:
0x10, b-c: 0x20, c-a: 0x40. Das Programm soll die Wechsel der obigen
Sequenzen a,b,c möglichst schnell erkennen und das oben zugeordnete
Signal ausgeben. Der Wechsel der Sequenzen erfolgt kontinuierlich
jeweils nach 100ms.
Hierzu soll ein Programm in C erstellt werden...
Christian schrieb:> Guten Tag,>> bitte um Lösungsvorschläge für folgende Aufgabe:>> Es soll eine Synchronisation auf ein Digitales Signal entworfen werden.> Das Signal, auf das synchronisiert werden soll hat folgende Sequenz> a-b-c-a...> -(a) Frequenz 100Hz, Rechteck mit 25% PWM (Dauer 100ms)> -(b) Frequenz 100Hz, Rechteck mit 50% PWM (Dauer 100ms)> -(c) Frequenz 100Hz, Rechteck mit 75% PWM (Dauer 100ms)>> Schnellstmöglich nach einen Wechsel a-b oder b-c bzw. c-a soll auf dem> Port 1 eines MSP430 ein Synchronisiersignal ausgegeben werden. Bei a-b:> 0x10, b-c: 0x20, c-a: 0x40. Das Programm soll die Wechsel der obigen> Sequenzen a,b,c möglichst schnell erkennen und das oben zugeordnete> Signal ausgeben. Der Wechsel der Sequenzen erfolgt kontinuierlich> jeweils nach 100ms.>> Hierzu soll ein Programm in C erstellt werden...
wie sieht Dein Lösungsansatz aus, was hast Du dir bisher dazu überlegt?
Und wo liegt das Problem, daß Du deinen Ansatz nicht funktionierend
umsetzen kannst?
Grüße
MiWi
Achso, es handelt sich um gar kein wirkliches Problem, sondern nur
irgendeine Klausuraufgabe. Ohne die Anforderungen zu kennen (und dafür
müssen meine Fragen beantwortet werden!), kann man da aber nicht
sinnvoll helfen.
Dein Ansatz ist also nicht besonders durchdacht, weil er sofort
problematisch wird, wenn das Signal nicht wirklich exakt so kommt, aber
im Sinne der Klausuraufgabe sicher nicht "falsch."
Einige Anmerkungen habe ich noch:
1) Deine Variablenbenennung sollte überdacht werden. Variablen werden
heutzutage ausschließlich englisch benannt. Ja, auch von
deutschsprachigen Programmierern in deutschen Programmen.
2) Vielleicht kann es sich lohnen, die Variablen mit einem
Kleinbuchstaben anzufangen. Großbuchstaben sind eher für andere Zwecke
gebräuchlich. Das ändert am Programm nichts, macht es jedoch für geübte
Programmierer leichter verständlich.
3) Dein Flankenzustand wird in einer interrupt-routine verwendet, sollte
also volatile sein.
4) Vorsicht, schlimmer Vorschlag: Den Zeitmerker brauchst du nicht, wenn
davon auszugehen ist, dass sich der Zustand des Timers zwischen den
Fallunterscheidungen nicht ändert. Mit einem langsameren Timer und
angepassten Werten kannst du dann direkt TAR abfragen. Wichtig: DAS
MACHT MAN NICHT! Es führt allerdings zweifelsohne zu kürzerem, kleinerem
Code, der schneller ausgeführt werden kann.
5) Vorsicht, weiterer Vorschlag: Weil deine Eingangssignale unfehlbar
sind, kannst du auch den Timer wegschmeißen und lediglich Flanken
zählen. Dafür musst du nur einmal auf einen Übergang synchronisieren und
kannst dann einfach im Flanken-Interrupt deine Ports setzen. Macht man
auch nicht, da fehleranfällig (Glitches etc.), ist aber extrem schnell,
weil das Programm, wenn es einmal läuft, einfach Daten raushaut.