wären 100µs, also 0,1ms Schritte möglich? Der Timer also mit einer Frequenz von 10Khz?
Klar, im Prinzip schon: 0,1ms entspricht bei einer Taktfrequenz von 16MHz genau 1600 Zyklen. Der Timer-Preset müsste also mit etwa (!) 65535-1600, also 63635 gewählt werden.
Das Problem mit den Zyklen, die bis zum Sprung in die ISR vergehen, hast Du natürlich auch hier, nur fallen bei 1600 Taktzyklen 10-15 nicht ganz so ins Gewicht. Unschön ist´s aber irgndwie trotzdem, aber es gäbe zwei Alternativen:
Probier mal im Simulator aus, wieviele Taktzyklen bei einem Timer-Überlauf-Interrupt vergehen - die müsstest Du dann von den 1600 abziehen. Mit diesem Timer-Preset hättest Du dann
genau 100µs.
Oder ganz anders: Mit ISR_schranke1 startest Du den Timer, bei 16MHz und einem Prescaler von 1024 zählt der Timer alle 64µs um eins weiter. In der ISR_schranke2 stoppst Du ihn, das Ergebnis noch mit 1000 multiplizieren und anschließend durch 64 teilen - fertig ist die Zeit in ms.
Die zweite Methode hat als Einschränkung, dass der Timer nach etwas über 4 Sekunden überläuft - die Zeit zwischen den beiden Lichtschranken-Passagen darf also nicht länger sein. Bei 100km/h entsprechen 4 Sekunden ja aber schon ener ganz ordentlichen Strecke...
Dann fahrt mal immer schön vorsichtig

(*lach...),
Daniel
Lesezeichen