Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Europejski lider sprzedaży techniki i elektroniki.
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[8051][ASM] dekodowanie pilotów IR a różnice w kwarcach pilotów

BANANvanDYK 15 Sie 2011 12:15 4519 5
  • #1 15 Sie 2011 12:15
    BANANvanDYK
    Poziom 37  

    Witam.
    Wróciłem do poprawiania programu w moim wzmacniaczu z powodu problemów wynikających z różnic w kwarcach/rezonatorach stosowanych w różnych pilotach. Metoda odbioru sygnałów polegająca na zaprogramowaniu ustalonych czasów pomiędzy odczytami stanu portu działa idealnie, ale tylko w przypadku gdy program jest dokładnie dostrojony do rezonatora w pilocie.
    W pierwszej wersji był to odbiór standardowego pilota RC5 ze standardowymi czasami trwania bitów. Z początku działało dobrze.
    Później dodałem obsługę pilota Grundig TP720 opartego na układzie MC44107 i kwarcem 485 kHz, kodowanie Manchester, podobny standard stosował Siemens (o czym dalej). W tym układzie wprowadzono niewielkie różnice, np. dodano przesyłanie informacji o słabej baterii w pilocie (kod 4/55) - informacja o tym pojawia się na ekranie telewizora. Ponieważ w datasheet podana jest typowa wartość rezonatora 500 kHz, początkowo nie mogłem odczytywać pilota. Dopiero po dostrojeniu programu do rezonatora 485 kHz wszystko pracowało idealnie. Z tego samego pilota swego czasu korzystałem przy naprawie telewizora Siesta 2 - jedynie odwzorowanie przycisków było zupełnie inne.

    Po latach próbowałem ustawić standardowy pilot RC5, uniwersalny badziewny pilot NZS 2040, który jak pamiętam jest oparty na układzie INA3010 z rezonatorem 432 kHz. Okazało się że zasięg pilota był znacząco gorszy niż Grundiga, w dodatku trzeba było celować w odbiornik IR.
    Z ciekawości sprawdziłem oryginalny niepełnosprawny pilot Samsung RM109 od telewizora Samsung z którym później współpracował w.w. pilot uniwersalny. Tego pilota mój wzmacniacz w ogóle nie czytał. Co ciekawe pilot uniwersalny miał słaby zasięg z telewizorem z którym współpracował, przy innych nie było problemu. Wczoraj i dzisiaj go dokładnie zbadałem. Jest zbudowany na układzie SAA3027P, tam jest oscylator LC o częstotliwości ok. 77 kHz (wg. datasheet 75 kHz). Sygnał jest transmitowany szybciej, jeden bit trwa ok. 1650 us zamiast 1778 us, dlatego nie dało się odczytywać pilota. Po dostrojeniu programu pilota ściąga idealnie, ale standardowych RC5 (np. od uniwersalnego ELMAK od DVD) już nie odbierze.

    Ostatnio dostałem za darmo niesprawny telewizor Siesta 3 wraz z oryginalnym pilotem RB 971, układ SAA2208 z rezonatorem 500 kHz i do niego też trzeba było zmieniać program. Program przystosowany do pilota Grundig w ogóle go nie odbierał, różnica w czasie przesłania informacji. Po dostrojeniu programu pilot oczywiście jest odbierany idealnie. Co ciekawe telewizor Grundig również odbiera sygnał pilota, z tym że odwzorowanie przycisków jest inne.

    Reasumując potrzebuję zmodyfikować program w celu uwzględnienia różnic w częstotliwościach przesyłania informacji przez piloty.

    Wczoraj próbowałem uwzględnić czas trwania sygnału "1" w półbicie startu, ale okazało się że zupełnie nie zdaje to egzaminu, czas trwania sygnału jest różnie interpretowany przez odbiornik IR więc nie przekładało się to na czasy trwania całych bitów. Pilota odbierało tylko przy idealnym ustawieniu pilota w bliskiej odległości od odbiornika, każde odsunięcie zwiększa czas trwania sygnału "1".
    Pozostaje więc pomiar czasu trwania całego bitu, ale przy kodowaniu Manchester jest to niemożliwe, jeżeli bit staru ma wartość "1", a kolejny bit "0" to sygnał IR będzie mieć postać dwóch "1".

    Podaję od razu część kodu źródłowego w obsłudze przerwania i dekodowania sygnałów pilota.
    UWAGA. To jest program po modyfikacjach, do obsługi pilota Siesta oraz poprawione czasy w RC5 (wg. standardu). W przypadku obsługi pilota Grundig i Samsung czasy opóźnień są zmienione.

    Kod: asm
    Zaloguj się, aby zobaczyć kod

    Dodam że mam zamiar dodać obsługę pilota RC6, ale tutaj widzę pewne zmiany w przesyłaniu informacji pomiędzy dwoma pilotami, czyżby chodzi różne tryby - bity mode - 7 różnych rodzajów transmisji? Po oscylogramach od razu widać że jeden pilot przesyła znacznie więcej danych od drugiego i położenie bitu przełącznikowego jest pomiędzy bitami adresu urządzenia a kodem rozkazu. Znalazł ktoś dokumentację Philipsa?

  • #2 15 Sie 2011 15:43
    Nawigator
    Poziom 33  

    Tu:
    https://www.elektroda.pl/rtvforum/topic455066.html

    Co do dekodowania Manchester to poprawne wyniki daje synchronizacja timera dekodera na zboczu o kierunku takim jak pierwszy odebrany po headerze. Header może być zakłócony i służy tylko do ustawienia ARW odbiornika więc zazwyczaj jest niestabilny.
    Resynchronizacja timera zwiększa margines dekodowanych czasów poszczególnych bitów, zwłaszcza przy dłuższych transmisjach.

    N.

  • #3 15 Sie 2011 21:03
    BANANvanDYK
    Poziom 37  

    Ze stron z linku powyżej już korzystałem.

    http://pl.wikipedia.org/wiki/Kod_Manchester

    Chyba mam już pewien percept na tą resynchronizację. Na Wiki piszą że zmiany pomiędzy półbitami służą do synchronizacji, ale z mojego doświadczenia wynika że czas trwania półbitu ze stanem "1" nie jest równa czasowi trwania półbitu "0".
    Z tego powodu synchronizację można dokonywać na każdym zboczu narastającym? W programie od synchronizacji odliczyć 444 us (RC5) i wówczas odczytywać stan półbitu, potem normalne opóźnienia o 889 us. Tylko jedna uwaga, trzeba zabezpieczyć się przed przypadkowym zsynchronizowaniem przy nieoczekiwanie krótkim czasie, a czasy opóźnień przy pracy bez synchronizacji zwiększyć.

  • #5 07 Wrz 2011 17:14
    BANANvanDYK
    Poziom 37  

    Przepraszam za zwłokę, ale nie miałem czasu zająć się tym wcześniej.

    Myślałem trochę o tej synchronizacji, dość niechętnie rozważałem przyjęcie kodu którego link można znalazłem na angielskiej Wikipedii ( http://www.ee.washington.edu/circuit_archive/text/ir_decode.txt ). Program zawsze czeka na zmianę stanu wejścia, dekodowanie na zasadzie pomiaru czasu trwania stanu "H" podczerwieni.

    Postanowiłem zrobić tak jak wcześniej napisałem, synchronizacja na zboczu narastającym sygnału podczerwieni. Wszystko działa jak należy, różne piloty z różnymi kwarcami pracują prawidłowo. Tylko przy jednym kodzie w pilocie uniwersalnym w kodowaniu RC5, program go prawie wcale nie odbierał - powodem były mniejsze czasy w opóźnieniach, z powodu przystosowania programu do obioru pilota Samsung (szybszy oscylator). Po podaniu standardowych czasów opóźnień wszystko działa prawidłowo.
    Nie zmieniałem czasu odmierzanego od synchronizacji do odczytu stanu wejścia, ustawiłem go jak dla pilota Grundig, a i tak piloty RC5 są odczytywane prawidłowo.

    Podaję kod źródłowy z przerobioną pętlą odliczania opóźnień:

    Kod: asm
    Zaloguj się, aby zobaczyć kod


    Przydałoby się oczyścić trochę kod i pomyśleć nad obsługą kodowania RC6. Temat praktycznie do zamknięcia, chyba że ktoś ma jakieś uwagi lub czeka na dalszego "gotowca".

  • #6 19 Wrz 2011 19:45
    BANANvanDYK
    Poziom 37  

    Oczyściłem nieco kod, zablokowałem domaganie się pilota Grundig o zmianę baterii oraz przede wszystkim dodałem obsługę pilota RC6. Przy odczycie Trailer bit występuje pewien problem, ale przy ustawieniu odpowiedniego czasu odczyt pilota działa prawidłowo. Na razie jest obsługa trybu 0, sprawdzanie trybu jest zhaszowane dla testów - pilot od HP Pavilion działa w trybie 6.

    Kod: asm
    Zaloguj się, aby zobaczyć kod

 Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME