Problem mit Timern auf Atmel Mega8L (Asuro)

OP #997116
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren