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).
2. Frage:
Warum kommen scheinbar zufällige Werte (zwischen 8 und 45) hier als
Ergebnis raus?
1 | TCCR0 &= ~(1<<CS02 | 1<<CS01 | 1<<CS00); //Timer0 stoppen (vorsichtshalber)
|
2 | TCNT0=0; //Timer0 zurücksetzen
|
3 | TCCR0 |= (1<<CS00); //Starte Timer0
|
4 | Sleep(123); //Irgendeine Zeit warten
|
5 | 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.
1 | 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.