Hallo Hermann,

ich verfolge den thread auch schon einige Tage. Ich denke, eine richtige Entprellung wie für prellende Tasten ist bei Dir nicht nötig. Sobald eine Lichtschranke von einem Auto getriggert wurde, könnte schon eine Runde gezählt werden. Wegen der Lücken im Auto dann einfach die Zählung der entsprechenden Spur für eine notwendige Zeit unterbinden um die Mehrfachzählung bei einer Durchfahrt zu verhindern.

Das hast Du ja im Prinzip mit der Prellzeit etc. schon verwirklicht.

Ich schlage dazu, ich nenne es mal "Monoflop" vor:

Programm:
Der Timer 0 erzeugt alle etwa 10ms einen compare0a Interrupt
In der Interruptserviceroutine wird der Ablauf der Monoflops realisiert.
In der Hauptschleife werden die Lichtschranken abgefragt. (bei Autodurchfahrt werden sie "0")
Ist eine Lichtschranke "0" und das entsprechende Monoflop = "0" wird die Runde gezählt und die Monoflop Zeit "aufgezogen"
Der Timer0 hat nach der Ablaufzeit das Monoflop wieder scharf geschaltet. Das Auto ist durch, die Lichtschranke auf "1" und somit bereit für die nächste Durchfahrt.

Code:
$regfile = "ATtiny44.DAT"
$framesize = 24
$swstack = 20
$hwstack = 34
$crystal = 8000000

const deadtime = 100                                        '100 * 10ms of copmare0a interrupt

opto_1 alias pina.1                                         'light barrier track 1
opto_2 alias pina.2                                         'light barrier track 2

porta.1 = 1                                                 'pullup opto_1
porta.2 = 1                                                 'pullup opto_2

ocr0a = 78
config timer0 = timer , prescale = 1024 , CLEAR_TIMER = 1   'about 10 milliseconds compare0A interrupt
on compare0a isr_deadtime
enable COMPARE0A
enable interrupts


dim monoflop_1 as byte
dim monoflop_2 as byte
dim round_1 as byte                                         'round counter
dim round_2 as byte                                         'round counter


do
  if opto_1 = 0 and monoflop_1 = 0 then
    incr round_1
    monoflop_1 = deadtime
  endif

  if opto_2 = 0 and monoflop_2 = 0 then
    incr round_2
    monoflop_2 = deadtime
  endif
loop


isr_deadtime:
  if monoflop_1 > 0 then decr monoflop_1
  if monoflop_2 > 0 then decr monoflop_2
return


end                                                         'end program

Gruß
Searcher