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 63935 gewählt werden.wären 100µs, also 0,1ms Schritte möglich? Der Timer also mit einer Frequenz von 10Khz?
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