różne kody tego samego przycisku pilota

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ODPOWIEDZ
Awatar użytkownika
matrix
Użytkownik
Posty: 1796
Rejestracja: 15 mar 2006, 5:21
Lokalizacja: Sochaczew
Kontakt:

różne kody tego samego przycisku pilota

Post autor: matrix » 16 maja 2010, 22:50

słuchajcie, mam drobny zgryz. otóż mam pilota z tego zestawu co na fotce, pracuje on w RC5 i mam pytanie:

czemu przy każdorazowym naciskaniu przycisku zmienia się komenda wysyłana z owego pilota?

nie są to bardzo różne komendy tylko dwie na przemian dla danego przycisku. na przykład dla przycisku V> (ten niebieski w prawo) są komendy 144 i 16 które się zmieniają co naciśnięcie.
Załączniki
1_11779374149b[1].jpg

marcin1326
-
Posty: 10
Rejestracja: 13 cze 2007, 14:59
Lokalizacja: Kraków
Kontakt:

Post autor: marcin1326 » 17 maja 2010, 2:02

To jest ta sama komenda. Zmienia się tylko tak zwany "togglebit". Wklep sobie do kalkulatora choćby windowsowego liczby 16 i 144 a zobaczysz że różnią się one tylko jednym bitem.
Zapewne Twój odbiornik przyłącza ten togglebit do komendy. Należy go albo programowo ignorować albo wykorzystać fakt że jest on zmieniany na przeciwny przy każdym wciśnięciu przycisku.

Awatar użytkownika
matrix
Użytkownik
Posty: 1796
Rejestracja: 15 mar 2006, 5:21
Lokalizacja: Sochaczew
Kontakt:

Post autor: matrix » 17 maja 2010, 8:43

nie za bardzo kumam gdyż:
16 binarnie to 10000 a
144 binarnie to 10010000
więc różnica polega na dodaniu pierwszych trzech bitów.

jakieś sugestie co do ignorowania tych trzech bitów?

marcin1326
-
Posty: 10
Rejestracja: 13 cze 2007, 14:59
Lokalizacja: Kraków
Kontakt:

Post autor: marcin1326 » 17 maja 2010, 10:00

rzeczywiście masz rację. Najlepiej by było jakbyś podesłał jakąś dokumentacje tego sterownika. ale...
Zauważ też że 16 binarnie to także 00010000
natomiast 144 to 10010000

komenda w kodzie RC5 składa się z sześciu bitów, natomiast bajt ma 8 bitów, więc pewnie ktoś chcąc wykorzystać cały bajt dodaje togglebit jako MSB (czyli po ludzku na początku)

Więc tak na moje oko wystarczy ignorować tylko MSB.

PS. Zapewne naciskasz przycisk "volume+", spróbuj nacisnąć np. "program -", powinno wyskoczyć 33 i 161.

zajrzyj też tu: http://www.sbprojects.com/knowledge/ir/rc5.htm

Awatar użytkownika
matrix
Użytkownik
Posty: 1796
Rejestracja: 15 mar 2006, 5:21
Lokalizacja: Sochaczew
Kontakt:

Post autor: matrix » 17 maja 2010, 18:20

marcin1326 pisze:PS. Zapewne naciskasz przycisk "volume+", spróbuj nacisnąć np. "program -", powinno wyskoczyć 33 i 161.
zgadza się i jedno i drugie. natomiast przy projekcie jaki zamierzam realizować najzwyczajniej napiszę na przykład:

Kod: Zaznacz cały

If command=16 or command=144 then
 ....
 ....
 ....
End if
chyba że może siftnąć komendę?

EDIT:
wystarczy napisać:

Kod: Zaznacz cały

shift command , left , 3
i za każdym naciśnięciem tego samego przycisku pokazuje jednakowy numer komendy.

marcin1326
-
Posty: 10
Rejestracja: 13 cze 2007, 14:59
Lokalizacja: Kraków
Kontakt:

Post autor: marcin1326 » 17 maja 2010, 22:42

Prawda, obydwa sposoby są ok. Pamiętaj tylko, że przy shiftowaniu zmieniasz liczbę reprezentującą komendę. Nie będzie to już 16 lub 144 tylko 128 (binarnie 10000000).

Awatar użytkownika
matrix
Użytkownik
Posty: 1796
Rejestracja: 15 mar 2006, 5:21
Lokalizacja: Sochaczew
Kontakt:

Post autor: matrix » 17 maja 2010, 22:44

marcin1326 pisze:Pamiętaj tylko, że przy shiftowaniu zmieniasz liczbę reprezentującą komendę. Nie będzie to już 16 lub 144 tylko 128 (binarnie 10000000).
akurat to dla mnie w moim projekcie nie ma znaczenia. ważne że kod zawsze jest taki sam.

marcin1326
-
Posty: 10
Rejestracja: 13 cze 2007, 14:59
Lokalizacja: Kraków
Kontakt:

Post autor: marcin1326 » 18 maja 2010, 12:44

Przy shiftowaniu tracisz jeszcze bit MSB komendy, co spowoduje, że układ będzie reagował niepotrzebnie na przycisk o numerze bitowo 110000 czyli 48, o ile taki istnieje na pilocie.

Awatar użytkownika
marcing
Użytkownik
Posty: 868
Rejestracja: 14 lut 2006, 14:13
Lokalizacja: z pociągu...
Kontakt:

Post autor: marcing » 18 maja 2010, 15:03

Nie łatwiej użyć AND?

Kod: Zaznacz cały

...
command = command AND &B00111111
...
IF command = 16 THEN
...
END IF
...

Awatar użytkownika
matrix
Użytkownik
Posty: 1796
Rejestracja: 15 mar 2006, 5:21
Lokalizacja: Sochaczew
Kontakt:

Post autor: matrix » 18 maja 2010, 16:45

marcin1326 pisze:Przy shiftowaniu tracisz jeszcze bit MSB komendy, co spowoduje, że układ będzie reagował niepotrzebnie na przycisk o numerze bitowo 110000 czyli 48, o ile taki istnieje na pilocie.
istnieje, sprawdziłem, przycisk nie ma wpływu na działanie, znaczy nie uruchamia układu. tak więc shift jak najbardziej daje radę.

sta
Użytkownik
Posty: 215
Rejestracja: 26 kwie 2006, 0:32
Lokalizacja: 52°11'N 20°51'E

Post autor: sta » 18 maja 2010, 21:50

marcing pisze:Nie łatwiej użyć AND?
Nie ma to tutaj wielkiego znaczenia ale instrukcja shift powinna być szybsza

keruseykaryu

Post autor: keruseykaryu » 19 maja 2010, 7:39

sta pisze:Nie ma to tutaj wielkiego znaczenia ale instrukcja shift powinna być szybsza
Zależy jak sobie to kompilator zapisze. Jedno pewne jest: And jest bardziej czytelne, po kilku dniach będziesz się zastanawiał po co Ci ten Shift był.
marcing pisze:command = command AND &B00111111
Oj, się kolega rozpędził. Jak już to tylko 7 bit wypadałoby maskować. Na bicie szóstym jest przesyłany ExtRC5 bit. http://www.sbprojects.com/knowledge/ir/rc5.htm

ODPOWIEDZ