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:
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.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
Gruß
mic







Zitieren

Lesezeichen