Hallo Michael,
tatsächlich sind nur zwei kleine Änderungen nötig.
Hier habe ich dir mal die neue Version für RC5 gemacht:
Code:
If Flanken_index > 15 And Flanken_index < 27 Then '!!!! geändert
Locate 1 , 1
If Print_pc = 1 Then Print "RC5: "
I = 2 '!!!! geändert Imp_array(4) ist das Toggle-bit
Daten.0 = 1
While I < Flanken_index ' Loop bis zur letzten Flanke, immer beim wichtigen Flankenwechsel in der Mitte des Impulses
Shift Daten , Left ' Daten (Ergebnis) nach links schieben, 0 einfügen
Daten.0 = Daten.1 ' Das letzte Bit wie das vorletzte setzen
If Imp_array(i) > 6 And Imp_array(i) < 11 Then ' kurzer Impuls (also kein Wechsel 0->0 oder 1->1)
Incr I ' nächste Flanke
If Imp_array(i) < 7 Or Imp_array(i) > 10 Then ' kein kurzer Impuls => Fehler (wenn in der Mitte ein kurzer war, dann muss noch ein kurzer kommen)
Exit While ' Abbruch
End If
Elseif Imp_array(i) < 19 And Imp_array(i) > 15 Then 'langer Impuls (also Wechsel 1->0 oder 0->1)
Toggle Daten.0 ' also letztes bit umschalten
Else
Exit While ' sonst Abbruch
End If
Incr I ' nächste Flanke
Incr Bit_count ' zählt die Anzahl der korrekt gelesenen Bits
Wend
If I >= Flanken_index Then 'Wenn kein Abbruch
If Imp_array(i) < 19 And Imp_array(i) > 15 Then 'Falls am Ende noch ein bit-Wechsel 1->0 kommt
Shift Daten , Left 'Daten (Ergebnis) nach links schieben, 0 einfügen
Incr Bit_count
End If
Temp_daten = Daten 'Daten zwischenspeichern
Befehl = Temp_daten And &B00111111 'Befehl sind die letzten 6 bits
Shift Temp_daten , Right , 6 'Befehls-bits rausshiften
Geraet = Temp_daten And &B00011111 'Gerät sind die ersten 5 bits
If Temp_daten.6 = 0 Then '!!!! neu
Befehl = Befehl + 64 '!!!! neu
End If '!!!! neu
If Print_pc = 1 Then Print ": Ger=" ; Geraet ; ", Bef=" ; Befehl
Cls
Locate 1 , 1 : Lcd "RC5"
Locate 2 , 1 : Lcd "Ger=" ; Geraet ; ", Bef=" ; Befehl
End If
End If
Gruß
Rolf
Lesezeichen