Hallo, ich habe eine IR-Fernbedienung, die mit dem NEC-Protokoll arbeitet. Nun habe ich mit einem IR-Decoder herausgefunden, dass die raw-bits genau 0xFF02FD entsprechen. Wenn ich nun IRMP benutze, dann bekomme ich folgendes heraus: address: 0xFF00 command: 0x40 Der command ist klar. Aber irgendwie habe ich bei der Adresse 0xFF erwartet. Meines Wissens ist die Adresse nämlich nur 8-bit lang + 8-bit invertierte Adresse. Gibt es das auch anders? Und wie erkennt IRMP denn, was von beidem es ist? In dem Fall mit der Adresse 0xFF == ~0x00 wäre schließlich beides möglich. Danke!
ugly_micro schrieb: > address: 0xFF00 Das sieht richtig aus. Wenn man 0xFF invertiert, ist es doch 0x00. Es gehört zu den IRMP Konventionen, das Address und Command als uint16_t abgelegt werden, da die Datenstruktur ja auch für andere Protokolle passen soll.
Matthias S. schrieb: > ugly_micro schrieb: >> address: 0xFF00 > > Das sieht richtig aus. Wenn man 0xFF invertiert, ist es doch 0x00. > Es gehört zu den IRMP Konventionen, das Address und Command als uint16_t > abgelegt werden, da die Datenstruktur ja auch für andere Protokolle > passen soll. Es geht mir aber darum, dass dann nur 0xFF oder auch nur 0x00 doch eigentlich die Adresse ist. Der Befehl ist ja auch nicht 0xBF40 sondern 0x40.
Auzug aus https://www.mikrocontroller.net/articles/IRMP#NEC_.2B_extended_NEC
1 | Daten NEC 8 Adress-Bits + |
2 | 8 invertierte Adress-Bits + |
3 | 8 Kommando-Bits + |
4 | 8 invertierte Kommando-Bits |
Um einen Standard-NEC-Frame eindeutig festzulegen, braucht man lediglich 2 Bytes, nämlich 8 Adress-Bits + 8 Kommando-Bits. Der Rest ist redundanterweise einfach invertiert, also Byte 2 und Byte 4. Wenn ich aber im Artikel eine Zeile weiterlese, finde ich:
1 | Daten ext. NEC 16 Adress-Bits |
2 | 8 Kommando-Bits + |
3 | 8 invertierte Kommando-Bits |
Die Lösung dieses vermeintlichen Widerspruches ist einfach: Irgendwann gingen den Herstellern die 256 maximal möglichen Adressen aus. Also hat man das Protokoll erweitert ("Extended NEC") und auf die Forderung, dass das zweite Byte im Frame die negierte 8-Bit-Adresse ist, verzichtet. Damit hat man nun bis zu 65536 Adressen. In der Regel ist es aber trotzdem so, dass meist das zweite Byte das negierte erste Byte ist. Aber es ist nicht zwingend. Und damit sind nun Geräteadressen von 0x000 bis 0xFFFF möglich. Aus diesem Grund gibt IRMP eine vollständige 16 Bit-Adresse zurück und einen 8-Bit Kommando-Code. Letzterer geht also lediglich nur von 0x00 bis 0xFF. Mit 2 Byte Adressen und 1 Byte Kommando-Code sind nun sowohl NEC als auch Extended NEC eindeutig spezifiziert. EDIT: Okay, ich hätte im IRMP daraus auch zwei Protokolle machen können, wie z.B. NEC und EXT_NEC. Da die technischen Merkmale sich aber nur in diesem einen Punkt unterscheiden, behandle ich beide als "Extended NEC". Damit der Frame von der Identifikation her eindeutig ist und auch von IRSND eindeutig reproduziert werden kann, war die Erweiterung auf 16 Bit für die Geräteadresse die logische Konsequenz - so wie es auch die Hersteller gemacht haben. IRMP behandelt also alle NEC-Frames als Extended-NEC-Protokoll. Denn das Extended-NEC-Protokoll ist einfach eine Obermenge von Standard-NEC. Nachlesen kannst Du das im Detail auch auf: https://www.sbprojects.net/knowledge/ir/nec.php
:
Bearbeitet durch Moderator
Danke. Das heißt aber, wenn ich mit IRSND 0xF8 verschicke, bekomme ich 0x8F70 zurück, oder?
ugly_micro schrieb: > Das heißt aber, wenn ich mit IRSND 0xF8 verschicke, bekomme ich 0x8F70 > zurück, oder? Du meinst jetzt als Adresse? Nein. Wenn Du 0xF8 als Geräteadresse im IRSND verwendest, dann ist das die 16-Bit-Adresse 0x00F8. Und Du wirst auch exakt 0x00F8 im IRMP zurückbekommen. Wenn Du jedoch als Kommando 0xF8 verschickst, dann ist Byte Nr. 3 = 0xF8 und Byte nur 4 = 0x70. IRMP empfängt diese, prüft, ob das Byte Nr. 3 gleich dem negierten Byte Nr. 4 ist und gibt dann als Kommando wieder 0xF8 zurück. Ergo: Du bekommst transparent genau das raus, was Du vorne reingesteckt hast. Alles andere wäre auch Unsinn. Also kümmere Dich nicht darum, wie der IR-Frame intern aussieht, sondern merke Dir einfach: "Bei NEC ist die Geräteadresse 16-Bit breit, das Kommando nur 8 Bit. Ich bekomme vom IRMP exakt das zurück, was ich bei IRSND gesendet habe."
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.