thomasonfire
24.09.2008, 19:59
Hi,
ich habe wichtige Frage zu den Timern auf dem Asuro. Bin
fortgeschrittener Anfänger.
Ich will eine Zeit mit möglichst genauer Auflösung stoppen (Prescaler 1)
und die maximal zu messende Zeit liegt bei 318 ys (mikrosekunden), also
wenn er länge läuft und noch nicht gestoppt wurde, dann kann er auch mit
dem zählen aufhören oder so.
1. Frage:
Welchen Timer kann/darf ich hernehmen? ich würde gerne den 16-bit timer
(t1) hernehmen, weil der länger laufen kann und man so keine Variable
hochzählen muss (was wieder die zeit ungenauer macht).
(Weiß soviel, dass T1 zur Motoransteuerung benutzt wird und T2 für die Infrarot Schnittstelle, möglich wär aber auch ein zweites mal zurück auf PWM zu initialisieren)
2. Frage:
Warum kommen scheinbar zufällige Werte (zwischen 8 und 45) hier als
Ergebnis raus?
TCCR0 &= ~(1<<CS02 | 1<<CS01 | 1<<CS00); //Timer0 stoppen (vorsichtshalber)
TCNT0=0; //Timer0 zurücksetzen
TCCR0 |= (1<<CS00); //Starte Timer0
Sleep(123); //Irgendeine Zeit warten
TCCR0 &= ~(1<<CS00); //Stoppe Timer
jetzt müsste man am besten noch einstellen, dass das Programm einen
Interrupt macht, wo eine Variable bei jedem Timerüberlauf hochgezählt
wird. Weiß leider nicht wie Interrupt Service Routinen bei AVR
funktionieren.
zeit = TCNT0; (Zeit auslesen)
Naja falls jemand einen Fehler findet oder mir irgendwie weiterhelfen
kann. Würd mich über Antworten freuen.
Gruß Thomas
PS: Datenblatt ist hier:
http://www.atmel.com/dyn/resources/prod_documents/doc2486.pdf falls es
sich jemand anschauen mag.
ich habe wichtige Frage zu den Timern auf dem Asuro. Bin
fortgeschrittener Anfänger.
Ich will eine Zeit mit möglichst genauer Auflösung stoppen (Prescaler 1)
und die maximal zu messende Zeit liegt bei 318 ys (mikrosekunden), also
wenn er länge läuft und noch nicht gestoppt wurde, dann kann er auch mit
dem zählen aufhören oder so.
1. Frage:
Welchen Timer kann/darf ich hernehmen? ich würde gerne den 16-bit timer
(t1) hernehmen, weil der länger laufen kann und man so keine Variable
hochzählen muss (was wieder die zeit ungenauer macht).
(Weiß soviel, dass T1 zur Motoransteuerung benutzt wird und T2 für die Infrarot Schnittstelle, möglich wär aber auch ein zweites mal zurück auf PWM zu initialisieren)
2. Frage:
Warum kommen scheinbar zufällige Werte (zwischen 8 und 45) hier als
Ergebnis raus?
TCCR0 &= ~(1<<CS02 | 1<<CS01 | 1<<CS00); //Timer0 stoppen (vorsichtshalber)
TCNT0=0; //Timer0 zurücksetzen
TCCR0 |= (1<<CS00); //Starte Timer0
Sleep(123); //Irgendeine Zeit warten
TCCR0 &= ~(1<<CS00); //Stoppe Timer
jetzt müsste man am besten noch einstellen, dass das Programm einen
Interrupt macht, wo eine Variable bei jedem Timerüberlauf hochgezählt
wird. Weiß leider nicht wie Interrupt Service Routinen bei AVR
funktionieren.
zeit = TCNT0; (Zeit auslesen)
Naja falls jemand einen Fehler findet oder mir irgendwie weiterhelfen
kann. Würd mich über Antworten freuen.
Gruß Thomas
PS: Datenblatt ist hier:
http://www.atmel.com/dyn/resources/prod_documents/doc2486.pdf falls es
sich jemand anschauen mag.