Hallo Leute. Ich arbeite mit MSP430F2012, habe nicht so viel Erfahrung damit, vielleicht kann mir jemand helfen. Ich habe folgende Aufgabe. Beim Start des Programms wird PWM, ADC und ein Teimer von 10 Sekunden gestartet. Alles funktioniert soweit. Wenn mir der ADC einen vorgegebenen Wert innerhalb von diesen 10 Sekunden liefer oder einen Wert, der kleiner ist als der vorgegebene Wert, soll der 10 Sekunden Timer abgebrochen werden und ein 5 Sekunden Timer gestartet werden. PWM und ADC sollen aber weiter laufen. Hat jemand vieleicht eine Idee wie ich dem Timer von 10 Sekunden auf 5 Sekunden umstellen kann. Bedanke mich jetzt schon für die Antworten.
Ja, einfach den Timer anhalten, rücksetzen, Compare Wert (CCR-irgendwas) auf den neuen Wert umstellen für 5 Sekunden und Timer wieder starten. Ist im Manual (SLAU049 irgendwas) ziemlich gut beschrieben.
Ich kann doch den Compare-Wert gar nicht ändern, weil ich den für das PWM benutze. Den 10 Sekunden Timer realisiere anders. Wenn PWM von 0xFFFF auf Null fählt, löst er ein Interrupt aus. Ich zähle einfach die Interrupts und nach 153 Interrupts sind 10 Sekunden vorbei. Wie mache ich, dass er aufhört die 10 Sekunden zu zählen sondern anfängt die 5 Sekunden zu zählen?
>Ich zähle einfach die Interrupts und >nach 153 Interrupts sind 10 Sekunden vorbei. >Wie mache ich, dass er aufhört die 10 Sekunden zu zählen sondern anfängt >die 5 Sekunden zu zählen? Und wer hinder Dich daran in der ISR nicht bis 153 sondern nur bis 76 zu zählen?
Ich habe es versucht aber es hat nicht funktioniert. Ich habe es folgendermassen versucht zu machen. Ich frage erst mit einer if-Anweisung die Temperatur ab und wenn sie kleiner als das vorgegebene Wert ist, weise ich einer Variable den Wert für 5 Sekunden zu. Das Problem ist, wenn die Temperatur kleiner als der vorgegebene Wert ist, wird der Variable immer wieder ein Wert zugewiesen. Wie kann ich es machen, dass wenn die Temperatur kleiner ist die Variable den Wert nur einmal bekommt und nicht immer wieder.
Nimm doch einfach eine zweite Variable in deren Abhängigkeit du den Timer neu initialisierst. Beim ersten Unterschreiten der Temperatur änderst du die Variable dann entsprechend und setzt sie unter (noch zu definierenden Umständen) wieder zurück.
Eine andere Möglichkeit wäre es, in der ISR (in der ja bei Dir die Anzahl der Interruptaufrufe gezählt wird) einfach temperaturabhängig entweder auf 5s oder 10s zu prüfen.
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.