W międzyczasie szukam szukam (żeby nie było )
Pozwolę sobie po części odpowiedzieć na pytanie kopiując wypowiedź Pana Mirka z forum Elektrody.
Myślę że się nie obrazi a tu się przyda dla potomnych.
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
"na lircu w opisie pilota, którego będziesz posiadał Wink można zobaczyć":
Kod:
name Minolta_RC3
bits 8 -----> ilość bitów w kodzie klawisza
flags SPACE_ENC -----> standard kodowania
eps 25 --->
aeps 100 ---> współczynnik wypełnienia nośnej 25/100
header 3872 1708
one 527 436
zero 527 1331
ptrail 527
pre_data_bits 24
pre_data 0xD3AC7D
gap 9052
toggle_bit 0
begin codes
one_sec 0x000000000000007F
two_sec 0x00000000000000FF
end codes
jak więc widać używane jest kodowanie typu
SPACE Wink
i teraz zaczynając od linijki
header 3872 1708 - oznacza to, że na początku trzeba wyemitować header (nagłówek charakterystyczny dla danego pilota) w tym przypadku trzeba nadawać nośną powiedzmy 36KHz przez okres 3872us a następnie zrobić przerwę przez 1708us
gdy już to wyemitujesz Wink to trza się zabrać za przesłanie kodów klawiszy pilota. Ale uwaga - widzisz tam powyżej coś takiego jak
pre_data_bits 24 co oznacza, że bezpośrednio po headerze trzeba najpierw wyemitować przed kodem każdego klawisza stałą 24 bitową paczuszkę danych a dopiero po tym należy wyemitować 1-dno bajtowy kod klawisza. W twoim przypadku te 24 bity mają wartość:
pre_data 0xD3AC7D natomiast kody klawiszy (wygląda na to że pilot ma 2 klawisze)
Kod:
begin codes
one_sec 0x000000000000007F
two_sec 0x00000000000000FF
end codes
pierwszy ma wartość 0x7F a drugi 0xFF
Ok a teraz jak sobie poradzić z kodowaniem jednego bitu, otóż masz na to właśnie dokładny przepis. Trzeba tylko wiedzieć ile czasu zajmują dwa różne stany w trakcie emitowania jednego bitu. Jako, że jest to kodowanie typu SPACE to jak widać stan wysoki jest stały i wynosi zawsze w twoim przypadku 527us a zmienia się tylko czas stanu niskiego w zależności od bitu - czy JEDEN czy ZERO
Kod:
one 527 436
zero 527 1331
i tu znowu masz jak na dłoni podane. Jeśli masz zamiar wyemitować bit o wartości = JEDEN to musisz emitować nośną przez czas 527us i zrobić przerwę o czasie trwania 436us
Jeśli chcesz wyemitować bit o wartości ZERO to emitujesz nośną znowu przez czas 527us ale przerwa po nim już będzie wynosić 1331us
Teraz tylko poskładać to do kupy - czyli już chyba wiesz? skoro pre data bits = 24 to masz jakby 3 bajty - 0xD3 , 0xAC , 0x7D - więc już widzisz jakie bity po kolei musisz emitować prawda? gdy je nadasz po headerze to wtedy zabierzesz się za wysłanie bitów znajdujących się w bajtach kodów klawiszy
i UWAGA - na końcu gdy wystąpi przerwa po ostatnim nadanym bicie - musisz jeszcze wyemitować krótki sygnał (tzn nośną o długości 527us)
Kod:
ptrail 527
w twoim przypadku akurat
ptrail = czasowi stanu wysokiego w każdym bicie.
i to koniec - tak złożona ramka dotrze do aparatu i zrobi co trzeba Wink
pozdrawiam
Aha na początku wspomniałem , że nośną można do testów ustawić na 36kHz bo nie jest tu ona podana tylko jakie powinno być wypełnienie (a nośne też raczej nigdy nie bywają wyższe niż 45kHz, więc przedział do sprawdzenia jest niewielki). Wypełnieniem jednak nie trzeba sobie koniecznie głowy zawracać. Natomiast jeśli nie wiadomo jaka nośna a jest inna niż 36kHz to efekt może być tylko taki że zamiast zasięgu kilku-kilkunastu metrów będziesz miał nie więcej niż tych kilka metrów (co czasem i tak w zupełności wystarcza). Ale jest na to rada - ja też nie wiedziałem na jakiej nośnej nadaje Olympus więc dobierałem ją doświadczalnie - zwiększałem o 1kHz powyżej 36kHz i sprawdzałem maksymalny interesujący mnie zasięg. Okazało się, że przy 38kHz jest dla mnie on najbardziej zadowalający - choć nie ma tak naprawdę aż tak wielkich różnic Wink
.. więc powodzenia - jak widzisz nie jest to takie trudne
:)