PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Timer1 als Stoppuhr



Floriz
27.03.2014, 09:19
Hallo,
Ich habe ein kleines Problem mit dem Timer1. Ich würde gerne den Timer1 als Stoppuhr verwenden.
Ich möchte, dass die Stoppuhr startet, sobald der Int0 ausgelöst wurde. Stoppen soll sie, wenn der Int1 ausgelöst wurde.
Die Werte von TCNT1H und TCNT1L soll in zwei Register gespeichert werden, damit ich mit diesen weiter rechnen kann.
Ich hoffe ihr könnt mir helfen :)
Wenn ihr noch Fragen habt oder etwas unklar formuliert ist könnt ihr gerne nochmal nachfragen.

Danke für eure Bemühungen
Gruß Floriz

PS: Das ganze soll in Assembler geschrieben werden :)

PICture
27.03.2014, 12:36
Hallo!


Ich möchte, dass die Stoppuhr startet, sobald der Int0 ausgelöst wurde. Stoppen soll sie, wenn der Int1 ausgelöst wurde.

Und die o.g. Int's werden so ausgelöst: ... ;)

Floriz
27.03.2014, 13:43
Hmm. Ich versteh deine Antwort nicht ganz. Ich möchte gerne das der Timer1 mit dem auslösen des Int0 anfängt loszulaufen. Dieser soll dann solange zählen, bis Int1 ausgelöst wurde. Diesen Wert den der Timer dann gezählt hat möchte ich in 2 Register speiechern, die ich dann zur weiteren berechnung brauche. Muss ich den Timer dann als Zähler verwenden? Und wie bekomm ich die Werte von den TCNT1-Registern in ein Register?

Gruß Floriz

Besserwessi
27.03.2014, 15:58
Den Timer sollte man im normalen Modul laufen lassen, also nicht gerade PWM (vor allem nicht die langsamen Modi mit hoch runter zählen). Das Starten und stoppen muss man von Hand machen, also die Register zum Timer passend einstellen in den ISRs. Der Timer wert liegt in 2 Registern zu 8 Bits (TCNT1L und TCNT1H) - wobei intern auch noch ein Automatische Zwischenspeicherung erfolgt. Daher muss man beim Schreiben und lesen auf die Reihenfolge von low und high Byte achten. Der transfer von IO Register in ein CPU Register geht per Befehl IN (sofern die Register ein niedrige Adresse haben) oder LDS.

Das Stoppen könnte man ggf. besser über die ICP Funktion machen: damit kann man auch einen Interrupt auslösen, aber zusätzlich wird automatisch der Zählerstand in spezielle Register gerettet.

Valen
30.03.2014, 18:04
...
Und die o.g. Int's werden so ausgelöst: ... ;)


Hmm. Ich versteh deine Antwort nicht ganz. ...

Gruß Floriz

Aus PICTure's be-endung seiner Bericht:


MfG
Wir unterstützen dich bei deinen Projekten, aber wir entwickeln sie nicht für dich. (radbruch) ...

Ich denke er meint das er nicht 'Auf Kommando' ein Programm für dich schreiben möchtest, sondern das du schon erst etwas selbst basteln sollte. Recherchiere erst mal das Datenbuch von dein Mikroprocessor. Hmmm, hattest du das schon mal erzählt welcher das ist? Lass uns erst mal sehen was du schon versucht hat. Dann können wir helfen wenn das nicht funktioniert.