Hallo

Der TSOP benötigt ca. 6-10 Pegelwechsel der Trägerfrequenz bevor er seinen Eingang umschaltet. Wenn ich mich recht erinnere wird sein Ausgang Low wenn das Trägersignal erkannt wird. Hier wird vermutlich nicht viel Unterschied zwischen den Lesungen entstehen können:

If Tsop = 1 Then
If Tsop = 1 Then

Ich löse das meist mit einer Hilfsvariablen die in der ACS-Funktion auf die Anzahl der zu wartenden Schwingungen gesetzt und in der ISR runtergezählt wird:

Code:
$regfile = "m128def.dat"
$framesize = 42
$swstack = 32
$hwstack = 32
$crystal = 14745600
$baud = 19200

Tsop Alias Portd.2
Config Tsop = Input

Ir Alias Porte.3
Config Ir = Output

Irledleft Alias Portd.3
Config Irledleft = Output

Irledright Alias Portd.5
Config Irledright = Output


Irledleft = 1
Irledright = 1

Declare Sub Acslow()
Declare Sub Acsmid()
Declare Sub Acshigh()
Declare Sub Acsoff()

Declare Function Acsleft() As Byte
Declare Function Acsright() As Byte

Dim Acspwm As Byte
Dim Pulsanzahl As Byte

Config Timer2 = Timer , Prescale = 8
Acspwm = 225
Timer2 = Acspwm
On Ovf2 On_ovf2
Enable Ovf2
Enable Interrupts

Call Acshigh()

Do

If Acsright() = 0 Then
Print 0
End If

Loop

End

Sub Acslow()
Acspwm = 225
End Sub

Sub Acsmid()
Acspwm = 228
End Sub

Sub Acshigh()
Acspwm = 231
End Sub

Sub Acsoff()
Irledleft = 1
Irledright = 1
End Sub


Function Acsleft()
Irledleft = 0
Irledright = 1
Pulsanzahl = 20
While Pulsanzahl > 0
Wend
Acsleft = Tsop
Irledleft = 1
Irledright = 1
End Function

Function Acsright()
Irledleft = 1
Irledright = 0
Pulsanzahl = 20
While Pulsanzahl > 0
Wend
Acsright = Tsop
Irledleft = 1
Irledright = 1
End Function

On_ovf2:
Timer2 = Acspwm
Toggle Ir
If Pulsanzahl > 0 Then Pulsanzahl = Pulsanzahl -1
Return
Das ist allerdings ungetestet. Ob der TSOP mehr Impulse benötigt, wenn die Frequenz nicht genau passt, kann ich nicht sagen. Wenn ich mich nicht verrechnet habe sollten ca. 25 Timertakte zwischen den ISR-Aufrufen etwa 36kHz ergeben.

Gruß

mic