Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Generowanie 8 rozkazów po IR. Na czym i jak to zrealizować?

30 Gru 2009 11:20 2124 13
  • Poziom 36  
    Chcę wysyłać 8 wytypowanych komand w 4 standardach transmisji IR: RC5, Sony, Sanyo i Panasonic. Jeśli okaże się niemożliwe na jednym Porcie (np z powodu różnic modulacji) to może to być 4 porty gdzie na każdy port wyprowadzimy (selektywnie) jeden rodzaj transmisji i potem każdy z tych portów zaopatrzymy w modulatory na wyjściu.

    Najlepiej aby te komendy można było "nauczyć" z oryginalnego" pilota.
    Jaki procesor tu zastosować ? ile kb pamięci programu to zajmie i gdzie najlepiej zapisywać "zczytane" kody ?
  • Poziom 12  
    Pierwszy lepszy mikrokontroler. Np. atmega8, "kody" pilota można zapisać do wbudowanej pamięci EEPROM(np. poprzez odbiornik podczerwieni). Wystarczy jedna dioda na podczerwień podłączona przez tranzystor do jednego pinu mikrokontrolera żeby nadawać w różnych standardach. Do reszty pinów podłączyć pstryczki :D
    Do tego kawałek kodu w C.
  • Poziom 32  
    program sterujacy 8 urzadzeniami o roznych standardach zajmuje około 2500 bajtow wiec chyba najlepsza bedzie do tego Atmega8, wyprowadzenie sygnalu oczywiscie na jeden pin.
  • Poziom 36  
    Zgoda, niech będzie Mega8,
    mam taki pod ręką, konkretnie ATMega8-16 w obudowie DIP.
    Może ktoś zapodać link jak będzie wyglądało hardware do takiego projektu ?
    Znalazłem już kilka schematów modulatorów do IR i zrobię go na 555.
    Teraz jak inicjować wysłanie danego kodu? czy mogę użyć DIP-SW 3-pozycje i zadawać nr kodu ustawieniami DIp-SW? teoretycznie potrzebuję 3 linie aby to obsłużyć, ale jak zainicjować rozpoczęcie nadawania kodu? dodatkowy port czy zadowolić się 7 urządzeniami a ustawienia 000 traktować jako wyłączenie? mnie to bardziej by odpowiadało, od razu generowanie gdy tylko pojawi się kombinacja.

    No i samo czytanie i wpisywanie kodów.
    Pewno zastosuję TSOP1736 i jego wyjście podam na INT0 procka.
    Kod RC5 jest dość dobrze opisany w necie, ale w przypadku Panasonica to nawet nie wiem kiedy byłby początek a kiedy koniec tego kodu, gdzie mogę znaleźć takie informacje?
  • Poziom 12  
    Wszystko można zrobić programowo.
    Jeśli urządzenie ma powtarzać kody, które maja być "ustawiane" przez pilot, nie trzeba implementować kodów RC5 itp - po prostu układ wczyta sekwencje 1 i 0 z pilota, rozpozna początek koniec i zapisze do pamięci.
  • Poziom 32  
    najlepiej wziasc starego pilota wypruc uklad scalony i podmienic atmegą teraz tylko godzina dwie programik i hula
  • Poziom 36  
    pawlik napisał:
    Wszystko można zrobić programowo.
    Jeśli urządzenie ma powtarzać kody, które maja być "ustawiane" przez pilot, nie trzeba implementować kodów RC5 itp - po prostu układ wczyta sekwencje 1 i 0 z pilota, rozpozna początek koniec i zapisze do pamięci.


    To taką wersję będziemy robili


    asembler napisał:
    najlepiej wziasc starego pilota wypruc uklad scalony i podmienic atmegą teraz tylko godzina dwie programik i hula


    ale tu może wystąpić różnica częstotliwości nośnych,
    jeden z pinów proca trzeba chyba przeznaczyć na generowanie takowej,
    wtedy to będzie miało ręce i nogi
  • Poziom 32  
    dlaczego ma wystąpic roznica czestotliwosci nosnych skoro czestotliwosc tą bedziecie wytwarzac programowo? musisz to przemyslec bo wedlug mnie wyjscie na diode nadawcza bedzie realizowane z jednego i tylko jednego pinu
  • Poziom 36  
    asembler napisał:
    dlaczego ma wystąpic roznica czestotliwosci nosnych skoro czestotliwosc tą bedziecie wytwarzac programowo? musisz to przemyslec bo wedlug mnie wyjscie na diode nadawcza bedzie realizowane z jednego i tylko jednego pinu


    Dlatego że wygenerowany przez proc sygnał chcę przesyłać do odbiornika poprzez diodę podczerwieni, więc muszę go modulować, a częstotliwo9ść nośnej zależy od standardu.
  • Poziom 32  
    ale programowo sobie mozesz wytworzyc dowolna czestotliwosc a modulacje bedzie polegala tylko na okresowy zaprzestaniu jej wytwarzania.
    A tak w ogole to sie nie przejmuj za bardzo czestotliwoscia nosnej ja ustawilem zgrubnie na 38khz a poniewaz atmega chodzi na wewnetrznym kwarcu to i tak w zaleznosci od temperatury i napiecia baterii nie dam głowy ze jest akurat 38khz (a raczej dam glowe ze nie ma 38khz)a wszystko chodzi cacy.
  • Poziom 42  
    Zobacz poniżej na link:

    https://www.elektroda.pl/rtvforum/topic1139494.html

    masz tam przykład pilota, który może w zależności tylko od wyobraźni i potrzeb programisty zrobić wszystko to o czym piszesz. Używając tak jak wyżej wspomniał kolega asembler tylko jednego pinu procka, przez którego możesz generować dowolne nośne (tzn różne częstotliwości)

    Piszesz że z powodu różnych częstotliwości nie będziesz mógł generować tego z jednego pinu. A co ma piernik do wiatraka????

    Ty będziesz miał w swoim pilocie diodę nadawczą IR a nie scalony odbiornik IR, który może mieć wbudowany jakiś tam filtr na częstotliwość własnego standardu. Więc już choćby z tego powodu - rozważania na temat różnic w nadawanych czętotliwościach nośnych możesz sobie darować - dioda nadawcza nie ma żadnych filtrów ;)

    Ale nawet gdybyś swoje rozważania wiązał z odbiornikiem który ma np filtr na 36kHz a ty musiałbyś odbierać coś nadawanego z nośną 40kHz - to też możesz sobie odpuścić myślenie o problemach - bo też potwierdzam słowa kolegi asembler że to nie ma większego znaczenia w praktyce - i tak odbiornik zadziała i tak ;) co najwyżej zmniejszy się jego zasięg z 12m do 10m - a to chyba nie będzie dla ciebie problemem ;)

    A z pomysłami generowania nośnej na NE555 to daj sobie w ogóle spokój bo to już zgroza - skoro wszystko można pięknie i bez bólu samym prockiem załatwić
  • Poziom 36  
    mirekk36 napisał:


    Piszesz że z powodu różnych częstotliwości nie będziesz mógł generować tego z jednego pinu. A co ma piernik do wiatraka????

    Ty będziesz miał w swoim pilocie diodę nadawczą IR a nie scalony odbiornik IR, który może mieć wbudowany jakiś tam filtr na częstotliwość własnego standardu. Więc już choćby z tego powodu - rozważania na temat różnic w nadawanych czętotliwościach nośnych możesz sobie darować - dioda nadawcza nie ma żadnych filtrów ;)


    Tego nie wiedziałem, nie wiedziałem że programowo można emulować modulację.
    Dziękuję za podpowiedź.
    Przeczytałem ten wskazany temat, odwiedziłem stronkę LIRC.org i doszedłem do wniosku że łatwiej będzie samemu napisać kod niż go zczytywać i zapisywać do pamięci.
    Ale już na pierwsxym standardzie napotkałem kilka problemów, tak prezentuje się bowiem standard dla mojego Sony:
    Code:
      name  RM-816
    
      bits            9
      flags SPACE_ENC|CONST_LENGTH
      eps            30
      aeps          100

      header       2499   526
      one          1277   523
      zero          676   523
      ptrail        676
      post_data_bits  2
      post_data      0x0
      gap          45002
      min_repeat      2
      toggle_bit      0


    Moje pierwsze spstrzeżenie: niestety to nie jest SIRC tylko SPACE

    SPACE_ENC|CONST_LENGTH czym rózni się od typowego SPACE_ENC ?

    Co oprócz headera i adresu/kodu umieszczamy przed post_data_bits

    co oznacza min_repeat 2
    czy to jest to obowiązkowe powtórzenie całego cyklu poczynając od headera czy tylko fragmentu kodu (którego) w odstępie gap?

    I jeszcze na samym końcu toggle_bit 0 z czym to się je?

    Poprawiłem trochę czytelność tego postu, może teraz ktoś odpowie :|
  • Pomocny post
    Poziom 42  
    1. kodowanie SIRC to właśnie kodowanie Space encoding ;)

    2. Post data bits to dodatkowa ilość bitów (z twojego opisu wynika że są 2) które trzeba wysłać tuż po wysłaniu właściwych bitów DATA czy tam ADDRES i DATA (z tym że z twojego opisu wynika że te 2 dodatkowe bity są zawsze równe 0)

    3. min_repeat oznacza, że dokładnie trzeba całą ramkę w całości powtórzyć minimalnie 2 razy ;) tak samo ma mój TV - jak mu wysyłam jedną ramkę to nie chu chu ..... udaje że jej nie widzi ;) ale jak wyślę ją 2 razy to zadziała ;)

    4. gap to najczęściej oznacz odstęp czasu ciszy w przestrzeni IR pomiędzy wysyłanymi kilkoma ramkami żeby mogły być poprawnie zinterpretowane - JEDNAK! ..... najczęściej bywa tak, że czas gap zawiera w sobie także długość czasu jaki trwa ramka. Rzadziej gap to tylko równy odstęp pomiędzy końcem jednej ramki a początkem drugiej - choć tak też się zdarza wiec to już trzeba sobie wypróbować

    5. zwrócę ci jeszcze uwagę na parametr ptrail - bo często ludziska robią męczą się, a przez to że olewają taki pikusiowy mały ptrail - nic im nie działa ;) Otóż ptrail to sygnał, który dokładnie musi się pojawić po zakończeniu nadawania ostatniego bitu ramki czyli u ciebie po nadaniu 2 bitów post_data_bits
  • Poziom 36  
    W takim razie mam SIRC 12-bit.
    Te zerowe dodatkowe bity wypada chyba wywalić, bo tylko ten pilot je zawiera, mam inny działający RM-830 i tam ich nie ma.
    Teraz jak mam rozumieć taki zapis:
    0x0000000000000102 two
    najwyraźniej chodzi o przycisk opisany jako 2 na pilocie,
    ale jak taki zapis rozbić na adres i rozkaz ?
    Albo taki zapis:
    0x408 2 też dotyczy klawisza 2,
    ale jaki mam wpisać kod rozkaz/adres ?
    czy to jest zapisane w hex i potrzebuję przekonwertować to na bin?

    dodano: sam sobie odpowiadam: nie można wywalić tych zer bo adres będzie niepoprawny, tak wynika z porównania tych wartości, adres TV w obu zapisach wychodzi 0100b co jest równoważne zarówno 102hex +2 zera od strony LB jak i 408hex bez tych dwóch zerowych bitów na końcu.