MSP430: Timer-Problem

Gast #1017240
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.
Gast #1017258
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.
Gast #1017315
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?
Gast #1017385
>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?
Gast #1017417
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.
Gast #1020070
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.
Gast #1020074
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.