Es gibt relativ sauberen und echt durchdachten Quelltext in Bascom für ein Eigenbauchrony. Die Lichtschrankenhardware würde ich so wie dort zwar nicht bauen aber der Quelltext ist gut. Suche ich bei Gelegenheit raus.
Verwendet wird der SBIS bzw. der SBIC Befehl des AVR.
http://ww1.microchip.com/downloads/en/d…-set-manual.pdf
und für alle die besser deutsch als englisch können so wie ich:
http://www.avr-asm-tutorial.net/avr_de/beginner/sprung.html#SBICS
Das wäre der einfachste Ansatz ohne Interrupts und mit geringem Overhead.
Tatsächlich wird ein Interrupt als Watchdog benutzt aber der ist für die eigentliche Funktion nur dann wichtig wenn was schief geht.
Im wesentlichen wird der Programmablauf an der Lichtschranken 1 Abfrage so lange gestopt bis der Pin das korrespondierende Signal erhält, der Counter wird ausgelesen und gerettet und an der Abfrage der Lichtschranke 2 gewartet bis das passende Signal am Pin kommt. Kommt das passende Signal nicht,
weil der Diabolo rückwärts geflogen ist oder es doch nur eine schnell fliegende Eintagsfliege war, klärt der Watchdog die Situation gibt eine Fehlermeldung aus und alles geht von vorne los.
Hat man tatsächlich zwei passende Signale erhalten wird berechnet und wenn das fertig ist ausgegeben.
Und dann alles wieder von vorne.
Das einzige zeitkritische ist zwischen Signal 1 und 2 und da macht der Prozessor nix anderes aber auch gar nix anderes als auf das Signal warten. Der Watchdog läuft unabhängig im Hintergrund im Timer und braucht keine Prozessorzeit. Wenn er dann doch welche braucht wegen des Timeouts ist es eh egal weil etwas schief gegangen ist also auch nix zeitkritisches mehr kommen kann.
Und ja, das geht auch mit Interrupts. Wenn man weiss warum Interrupts nicht das Allheilmittel sind und dementsprechend drum herum programmiert. Konkurierende Interrupts sind für zeitabhängige Programmierung wegen der mangelnden Vorhersagbarkeit der Ereignisse Mist.
Sauber programmiert mit Interrupts würde man den Programmablauf an den Lichtschrankenabfragen in einer Schleife fangen die nur durch die passenden Interrupts verlassen werden können. Letztendlich hätte man das Beispiel ohne Interrupts nur komplexer mit Subroutinen nachgebaut.
Wie gesagt, kann man machen muss man aber nicht aber wenn man es macht muss man es sauber programmieren.
Eine andere Möglichkeit ist die Nutzung der ICU. Die kann praktisch im Alleingang externen Ereignissen Timestamps verpassen und da wir ja wissen aus welcher Richtung die Diabolos durch die Lichtschranken fliegen...also hoffentlich wissen wir das...
http://ww1.microchip.com/downloads/en/D…SSING_d94e18652
oder falls das nicht funktioniert:
http://ww1.microchip.com/downloads/en/D…A_Datasheet.pdf
Punkt 19.6 Input Capture Unit
Meiner persönlichen Meinung nach kommt hier aber sehr schön heraus warum komplexe Programmierumgebungen wie die Arduino IDE gerade bei solchen kleinen Wunderwerken wie den AVRs den Blick auf das Wesentliche versperren weil viele Sachen durch Abstraktion abgenommen werden und der direkte Durchgriff auf die Hardware verschleiert wird. Die tatsächlichen Eigenschaften der Hardware werden gar nicht mehr wahr genommen.
Ein bisschen hardwarenah programmiert konnte das geforderte nämlich schon der AT90S2313 und selbst die etwas grösseren ATtinys schaffen das mit, zugegebener Massen, einem erhöhten Programmieraufwand auch weil man um die serielle Schnittestelle herum programmieren musste und der Counter etwas beschränkt ist.
Letzter Punkt, ich finde das mit den Anzeigen im Gerät immer ein bisschen gaga. Der Ansatz ist oft das das Gerät "self contained" also für sich alleine arbeiten können soll. Letztlich baut aber jeder Hersteller der auf sich hält eine serielle oder USB Schnittstelle ein die entweder vom PC oder Smartphone aus abfragbar ist. Warum wohl? Weil ich eh die Schussfolge irgendwo speichern will und ein dedizierter Drucker ein bisschen Oberkante ist? Weil ich ein Smartphone in der Regel wesentlich besser ablesen kann und die Werte auch übersichtlicher dargestellt werden können? Weil die Berechnungen viel besser dort aufgehoben sind wo ich die notwendigen Daten auch besser eingeben, speichern und wesentlich komplexere Berechnungen in viel kürzerer Zeit ausführen kann? Weil es aus sicherheitstechnischen Erwägungen blöd ist wenn man mal nicht die v0 sondern die v10, v25 oder v50 will und nicht immer warten möchte bis man zum Gerät laufen darf oder die anderen Schützen dann genervt sind?
Rausgesucht: nutsvolts.com
http://www.nutsvolts.com/uploads/magazi…Chronograph.zip
http://nutsvolts.texterity.com/nutsvolts/200906/?pg=36#pg36