Forum: Mikrocontroller und Digitale Elektronik Problem mit Timern auf Atmel Mega8L (Asuro)


von Thomas B. (thomasonfire)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.