Von der Hardware-anbindung ist schon mal die Auswertung über den AD ein Problem: Der ADC ist relativ langsam. Schon da hat man ein Unsicherheit von vielleicht 0,1 ms - eventuell auch noch mehr. Bei einer gesamten Zeit von rund 3 ms ist das schon reichlich. Wenn die Lichtschranken das hergeben würde ich die Signal lieber Digital auswerten, also über Pina. Wenn es weiter mit dem ADC sein soll, kann man vermutlich die geschwindigkeit des AD-Taktes etwas höher wählen, z.B. ein Teiler von 16 oder gar 8.
Die Schleife ist auch recht lang und fragt alles mögliche ab - da kann man lieber 2 Schleifen haben: eine zum Warten auf Start und eine zum Warten aus Stop. Mehr sollte in den Schleifen nicht drin sein.
Die Zeitmessung sollte man auch nicht mit der ISR machen, sondern einfach den Timer das hochzählen überlassen. Man startet den Timer, wenn man die Startbedingung erkannt hat, und ließt dann beim Stop den Timer aus. So wie eingestellt zählt der Timer µs - das reicht also schon bis 65 ms oder für eine Geschwindigkeit bis 1 m/s runter. So wie das Programm jetzt ist braucht die ISR viel zu lange, und es kommt schon längst der Nächste Interrupt, bis die ISR fertig ist. Der µC macht dann einmal die 1 ISR (ca. 50-80 ASM Befehle) und dann einen ASM Befehl des Programm. Entsprechend läuft das Programm nur mit etwa 1-3 Prozent der normalen Geschwindigkeit.
Die genauste Lösung wäre die Benutzung der ICP Funktion - da muss dann aber das Signal der Lichtschranke mitspielen.
Lesezeichen