Forum: Mikrocontroller und Digitale Elektronik MSP430: Timer-Problem


von Nat (Gast)


Lesenswert?

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.

von Johnny (Gast)


Lesenswert?

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.

von Nat (Gast)


Lesenswert?

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?

von Stefan (Gast)


Lesenswert?

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

von Nat (Gast)


Lesenswert?

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.

von odic (Gast)


Lesenswert?

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.

von Stefan (Gast)


Lesenswert?

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