@SvenSellere: Du sagst du hast 8 Kanäle, jeweils mit 0.4ms high davor und einem low-signal von 1-2 ms. Wie lang ist bei dir die Pause nach dem Summensignal? Der Timer braucht eine Pause von mindestens 3.984ms (d.h. keine steigende Flanke in dieser Zeit) damit er überläuft und bei Kanal 1 wieder richtig einsteigt. Kann es sein, dass die Pause bei dir evtl. zu kurz ist?
Wenn das der Fall wäre, könnte man bei Kanälen > 5 einfach die Überlaufzeit des Timers verkürzen. Dann würden auch kürzere Pausen detektiert werden. Wäre schön wenn du mal den Code testen könntest (Propeller besser abmontieren, das war jetzt auf die Schnelle geschrieben), vielleicht hilft das ja schon?
Code:
'===READ RX=====================================================================
Getreceiver:
If Channel > 0 And Channel < 6 Then 'fill empf(1-5)
Empf(channel) = Timer0
Timer0 = 6 'preload for 3.984ms
else 'Channel > 5
Timer0 = 150 'preload for 1.68ms
End If
If Channel = 5 Then 'when all relevant channels were read, enable the servo interrupt
Enable Timer1
End If
Incr Channel 'if no falling edge was detected for a longer period, channel will increase above 11
Return
Alternativ könnte man auch statt "Timer0 = 6" ein "Timer0 = 100" für alle Kanäle versuchen (dann aber muss der Offset von "Sempf" angepasst werden). Damit würde der Timer nach 2.48ms überlaufen, das würde in deinem Fall reichen um die Kanäle auszulesen (0.4ms + 1 bis 2ms). Aber ob das für andere Empfänger auch funktioniert bleibt unklar. Und ich bin an einer Lösung interessiert die für die ca. 100000 möglichen Sender/Empfänger/Summensignalerzeuger Kombinationen funktioniert.
Lesezeichen