Laatst kwam ik op zolder een oude RC auto van Lego tegen en ik wil daarvan het protocol uitzoeken. De bijbehorende zender heb ik nog, maar die is onbetrouwbaar. Hierdoor wil ik zelf een zender maken. Het probleem waar ik nog tegenaan loop is uitvinden hoe de checksum gemaakt wordt.
Even wat achtergrond. De zender heeft 3 standen voor: links, rechts, vooruit en achteruit. Daarnaast zit er nog een schuifknop op om kanaal 1, 2 of 3 te kiezen. Tot slot zitten op de achterkant twee knoppen die ingedrukt kunnen worden.
Samen met een scope heb ik al veel informatie kunnen verzamelen. De zender stuurt een AM signaal waarop de commando's gemoduleerd worden. De draaggolf is 27,145 MHz. Een "bit" in een commando duurt tussen de 16 en 40 ms en de tijd tussen bits is altijd 16 ms. Alle tijden zijn een veelvoud van 8 ms.
Een voorbeeld van een commando (F3-L3, zie tabel hieronder) op de scope:
:strip_exif()/f/image/vy3K9k20t7ERXqJqPKVbqi7o.png?f=user_large)
Een groot aantal uitgelezen commando's heb ik uitgewerkt in een spreadsheet, die staat: hier in Onedrive. Hieronder een stukje daaruit:
De eerste twee kolommen geven het commando aan dat ik geef met de knoppen. Daarachter staan de tijden van een "bit" uit het commando. De tijden tussen "bits" zijn weggelaten in de tabel.
Zoals te zien in de tabel is de betekenis van alle waardes in het commando bekend voor mij. Het enige dat nog niet lukt is zelf de checksum berekenen. Ik heb verschillende dingen geprobeerd zoals: kijken of ik een patroon kan herkennen, de waardes omzetten naar 4-bits reeksen of bytes, XOR en dat soort dingen, CRC RevEng en de som van waardes, maar niets heeft mij tot nu toe tot de oplossing gebracht. De waardes simpelweg overnemen is altijd een optie, maar dan zijn niet alle commando's mogelijk, dus dat heeft niet mijn voorkeur.
Is er misschien iemand die meer ervaring met dit soort checksums heeft en mij in de goede richting van een oplossing kan helpen?
Even wat achtergrond. De zender heeft 3 standen voor: links, rechts, vooruit en achteruit. Daarnaast zit er nog een schuifknop op om kanaal 1, 2 of 3 te kiezen. Tot slot zitten op de achterkant twee knoppen die ingedrukt kunnen worden.
Samen met een scope heb ik al veel informatie kunnen verzamelen. De zender stuurt een AM signaal waarop de commando's gemoduleerd worden. De draaggolf is 27,145 MHz. Een "bit" in een commando duurt tussen de 16 en 40 ms en de tijd tussen bits is altijd 16 ms. Alle tijden zijn een veelvoud van 8 ms.
Een voorbeeld van een commando (F3-L3, zie tabel hieronder) op de scope:
:strip_exif()/f/image/vy3K9k20t7ERXqJqPKVbqi7o.png?f=user_large)
Een groot aantal uitgelezen commando's heb ik uitgewerkt in een spreadsheet, die staat: hier in Onedrive. Hieronder een stukje daaruit:
Speed | Steer | Preamble | Channel | Button | Steer + direction | Speed | Checksum | |||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
F3 | L3 | 48 | 16 | 24 | 16 | 24 | 40 | 40 | 40 | 40 | 16 | 16 |
F3 | L2 | 48 | 16 | 24 | 16 | 24 | 24 | 24 | 40 | 40 | 24 | 32 |
F3 | L1 | 48 | 16 | 24 | 16 | 16 | 24 | 40 | 40 | 40 | 24 | 40 |
F3 | M | 48 | 16 | 24 | 16 | 32 | 24 | 24 | 40 | 40 | 24 | 40 |
F3 | R1 | 48 | 16 | 24 | 16 | 32 | 24 | 40 | 40 | 40 | 32 | 24 |
F3 | R2 | 48 | 16 | 24 | 16 | 40 | 24 | 24 | 40 | 40 | 32 | 16 |
F3 | R3 | 48 | 16 | 24 | 16 | 40 | 40 | 40 | 40 | 40 | 16 | 32 |
De eerste twee kolommen geven het commando aan dat ik geef met de knoppen. Daarachter staan de tijden van een "bit" uit het commando. De tijden tussen "bits" zijn weggelaten in de tabel.
Zoals te zien in de tabel is de betekenis van alle waardes in het commando bekend voor mij. Het enige dat nog niet lukt is zelf de checksum berekenen. Ik heb verschillende dingen geprobeerd zoals: kijken of ik een patroon kan herkennen, de waardes omzetten naar 4-bits reeksen of bytes, XOR en dat soort dingen, CRC RevEng en de som van waardes, maar niets heeft mij tot nu toe tot de oplossing gebracht. De waardes simpelweg overnemen is altijd een optie, maar dan zijn niet alle commando's mogelijk, dus dat heeft niet mijn voorkeur.
Is er misschien iemand die meer ervaring met dit soort checksums heeft en mij in de goede richting van een oplossing kan helpen?