Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[Attiny26] [Bascom] Uczenie kodu z pilota IR.

pier 17 Aug 2010 10:22 4705 13
  • #1
    pier
    Level 23  
    Witam.
    Potrzebuję napisać program który odbierze ramkę danych z dowolnego pilota IR zapamięta ją a później będzie na tą ramkę danych reagował odpowiednio.
    Proszę o jakieś podpowiedzi.
    Pozdrawiam.
  • #2
    gaskoin
    Level 38  
    nie jest to takie proste. Skąd mikrokontroler ma wiedzieć, że przycisnąłeś akurat np wyłączenie, skoro kodów nie zna ? chyba, żebyś wczytywał je sekwencyjnie, klawiszami po kolei na pilocie, ale algorytm jest zbyt skomplikowany, żeby po prostu napisać Ci jak to zrobić :) Napisz może jak chciałeś to rozwiązać, czy już masz jakiś zalążek programu ?
  • #3
    jousto
    Level 17  
    z teoretycznego punktu widzenia sprawa jest prosta program powinien mieć tzw tryb nauki gdzie po przyciśnięciu przycisku jest możliwość przechwycenia próbki sygnału z pilota w określonym czasie, zapamiętanie go a następnie odczyt z pamięci i wysterowanie diody nadawczej.
    Ale z punktu widzenia praktycznego sprawa komplikuje się:
    Po pierwsze jak długo należy zapisywac próbkowany sygnał aby wiadomo było że został zapamiętany cały rozkaz z pilota. Tu niezbędna byłaby dodatkowa analiza za pomacą analizatora stanów logicznych lub chćby oscyloskopu z pamięcią.
    Po drugie z jaką rozdzielczością należy zapisywać napięcie aby odbiornik dobrze zinterpretował sygnał. Też należy indywidualnei przeprowadzic analizę.
    Po trzecie z jaką rozdzielczością czasową (ile próbek/sek) należy zapisywać aby zapamiętany sygnał mogł być na tyle równy wzorcowi aby odbiornik go potem poprawnie zinterpretował.
    Na takei pytania musisz sobie odpowiedzieć na początek, a potem to tylko sprawa napisania programu.
  • #4
    nsvinc
    Level 35  
    Z praktycznego punktu widzenia, musisz zastosować mikrokontroler
    na tyle szybki i z dużym RAMem, aby móc przechwycić kompletną sekwencję
    do pamięci "sampla", a następnie zakładając konkretną podziałkę czasową
    (clock recovery) i format, rozkodować dane i zapamiętać
    gotowy kod. W przypadku, gdy pilot nadaje niezgodnie z udokumentowanymi
    standardami (RC5,RC6,SIRC), zapamiętać całą ramkę jako po prostu
    strumień bitów, i odtworzyć w razie takiej potrzeby.
    Faktycznie, proces nie jest prosty. I na pewno nie jest implementowalny
    w zadnym ATTiny - mało RAMu i mało MIPSów...

    Jesli jestes pewny w jakim formacie nadaje pilot, mozesz zrobić
    mechanizm odbierania i dekodowania danych dla jednego konkretnego
    formatu. Wtedy da się to wsadzić do ATTiny.
  • #5
    pier
    Level 23  
    Widzę że to nie takie proste. Mam wzmacniacz do którego chciałem dorobić regulację głośności. Nie chciałem do tego celu użyć nowego pilota tylko wykorzystać nie używane przyciski pilota TV Sharp.
  • #6
    sp3ots
    Level 38  
    Witam !
    Zapoznaj się z takim:
    Przedwzmacniacz sterowany ATmega8
    Ne 3/2005 str4 395-k
    To jest to czego szukasz, ( mam taką nadzieję ).
    Pozdrawiam. Stefan
    ps. Ne, to czasopismo "Nowy Elektronik"
  • #7
    pier
    Level 23  
    Nie, to nie to. Przedwzmacniacz 395 k jest sterowany pilotem RC5 a mi chodzi o dowolny pilot. Jeśli chodziło by mi o kod Rc5 to nie był by tego postu.
  • #8
    lukego
    Level 17  
    Tu masz coś o SHARP-ie

    Co do RAMU, mipsów itd. to wcale nie musi być aż tak źle, bo układ nie musi poprawnie odesłać ramki. Ma tylko na nią reagować, czyli jak dostanie powiedzmy :
    1010111011101

    A będzie próbkował z innym np. 3x mniejszym okresem to odbierze

    10111 zapamięta i zawsze na powyższą komendę będzie reagował, sęk w tym, że może też reagować na inne, ale nie jest to pewne bo częstotliwość próbkowania można dobrać eksperymentalnie.

    Czyli jednym słowem kosztem pełnego determinizmu można zrobić bardzo prosty układ. Coś za coś.
  • #9
    pier
    Level 23  
    Znalazłem w pliku pomocy polecenie input które odbiera dane. Tylko tam jest przykład jak odebrać bajt danych z całego portu np. D a jak zrobić aby odebrał tylko z jednej końcówki np. z portd.0? Piszą tam coś o adresie z którego odbierane są dane ale nie wiem jaki adres wpisać aby tak odbierać dane z pilota.
  • #10
    sepako
    Level 14  
    Ja wykorzystał bym przerwanie INTx i jeden z timerów - w obsludze przerwania zapisujesz licznik timera, inkrementujesz adres pamięci i zerujesz
    licznik i tak przez określony czas, później analizujesz przebieg pod katem powtórzeń tego samego polecenia ale to można na podstawie pauzy pomiędzy komendami.
  • #11
    rpal
    Level 27  
    To wcale nie jest takie proste jak tu koledzy piszą. 2-3 tyg temu rozgryzałem to zagadnienie mając do dyspozycji 3 piloty. Wcześniej się tym nigdy nie zajmowałem bo nie było mi to do szczęścia potrzebne. Miałem na tapecie 3 piloty z czego 2 niby RC5 a jeden zupełnie nie znany. Te niby RC5 oprogramowałem używając czyjegoś gotowca, oczywiście nie działały. Jak się okazało szerokości impulsów były o rząd wielkości większy niż przewidywał standard RC5 zatem wysnuwam wniosek że kodowanie może być takie jak zakłada standard ale producent pilota i tak zrobi po swojemu. W końcu stanęło na tym że zająłem się pilotem noname od karty wizyjnej PCta która to nie mieściła się w żadnym znanym mi kodowaniu bo pilot wysyłał o ile dobrze pamietam 34 impulsy w każdej swojej ramce. O dziwo udało mi się go rozpracować trochę na czuja ale wyszło OK. zatem wniosek jest taki że co pilot to inna ramka i inny standard. Jak sobie z tym poradzisz i samonauką twojego procka ? Poza tym piszesz że ma po zdekodowaniu "coś zrobić", ale co ? w końcu reakcję na odebrany znak musisz Ty przewidzieć i z góry ją określić w swoim programie nie wiedząc jeszcze co odbierzesz. Więc odbieram te wymagania jako system samouczący się znaków z nieznanej ilości pilotów o nieznanym systemie kodowania i w dodatku reagujących na nieznane znaki w nieznany sposób. Mi osobiście trąci to sztuczną inteligencją a tego jeszcze NASA nie opanowało .PZDR i określ precyzyjnie o co ci chodzi.
  • #12
    nsvinc
    Level 35  
    spokojnie...

    Robiąc nagrywanie i odtwarzanie strumienia bitów z odpowiednio częstszym
    samplowaniem, możesz przechwycić to co mówi dowolny pilot i to odtworzyć
    w dowolnym czasie.

    Poza tym, zastosowanie odpowiedniego mikrokontrolera i algorytmu, można
    opracować mechanizm próbujący się doszukać zegara i go odtworzyć, i wtedy samplować z 2x[policzony_zegar].

    Ale i tak najprostszym rozwiązaniem jest np. coś na CM0+karta SD. Wtedy
    można ściemnić teoretycznie nieskonczoną ilość pilotów i ich kodów...
  • #13
    User removed account
    User removed account  
  • #14
    maciekk
    Level 11  
    Układ na ATTiny13 „Zdalny włącznik” działa doskonale, przydała by się też wersja z wyjściami monostabilnymi – więc prośba do autora tego projektu jeśli tu zagląda, o zamieszczenie takiej wersji wsadu zgodnie z obietnicą
    Quote:
    „jak trzeba monostabilnie (naciśnięty guzik w pilocie 1-ka logiczna na pinie do momentu zwolnienia klawisza) to mogę przekompilować program i zamieścić HEX-a.”


    Z góry dziękuję i pozdrawiam.