logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Nadajnik IR na ATmega32A do TV SAMSUNG - brak reakcji na komendę POWER

Mathew003 03 Lip 2015 00:49 1347 4
REKLAMA
  • #1 14820819
    Mathew003
    Poziom 9  
    Witam. Zabrałem się za podczerwień i wzorując się na przykładach z zielonej książki M. Kardasia oraz z dokumentacji zamieszczonej na lirc.org/remotes dotyczącej pilota o symbolu BN59-00861A chciałem wykonać własny pilot. Test polegający na wysłaniu komendy POWER ( 0x40BF ) nie powoduję żadnej reakcji TV. Prawdopodobnie coś źle rozumiem/robie zatem proszę o jakieś podpowiedzi lub wytknięcie gdzie są błędy.
    Dioda podłączona przez tranzystor NPN BC337 - świeci (sprawdzone telefonem).

    Oto program testowy:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #2 14821493
    Steryd3
    Poziom 33  
    Nie wiem co prawda jak działa zdalne sterowanie w TV marki Samsung natomiast wiem, że z grubsza wszędzie wygląda to dość podobnie. Taka transmisja odbywa się tak, że dioda IR nadaje sygnał -szpilki o częstotliwości ok. 36-38kHz które są modulowane sygnałem sterującym i ten różni się w zależności od marki i przyjętej strategii kodowania komend. Tak więc Twoja dioda IR powinna wysyłać szpilki 36kHz kiedy wysyłasz stan H i "milczeć" gdy wysyłasz stan L.
    Jeżeli w Twoim kodzie po szybkim zerknięciu widzę algorytm generacji stanów H i L to nie widzę wspomnianej modulacji - chyba, że coś pominąłem lub SAMSUNG działa inaczej.
    ....dopatrzyłem się modulacji!
    Ale czy częstotliwość ma być 40kHz???
    Nie do końca rozumiem też po co komenda sei(); włączająca globalnie przerwanie skoro nigdzie nie ma obsługi jakiegokolwiek przerwania?
    A tak całkiem to przydało by się sygnał podglądnąć oscyloskopem lub choćby jakimś analizatorem stanów logicznych.
  • REKLAMA
  • #3 14822438
    Mathew003
    Poziom 9  
    Dziękuję za odpowiedź. Modulacja jest na wyjsciu OC2 Timera2 :) Sprawdzałem na 36KHz, 38kHz i ostatecznie na 40kHz ci widać w kodzie. Przerwania miały być dalszą rozbudową do odbioru danych podczerwieni i oczywiście w tym kodzie są zupełnie nie wykorzystywane.
    Niestety brak u mnie oscyloskopu jak i analizatora, ale pracuję teraz nad własnym dekoderem ramek również wg przykładu z książki M. Kardasia. Podejrzę sobie jak wygląda ramka emitowana przez mój pilot i wtedy się okaże czy błąd polega na jakiejś niezgodności czy też w kodzie do wysyłania.
  • REKLAMA
  • Pomocny post
    #4 14822446
    dondu
    Moderator na urlopie...
    Mathew003 napisał:
    Niestety brak u mnie oscyloskopu jak i analizatora, ...

    Za 7-8$ z darmową dostawą kupisz w Chinach wystarczająco dobry analizator 8-wejściowy 24MHz. To dobra inwestycja 29zł :)

    Nie definiuj F_CPU w kodzie z tych powodów: http://mikrokontrolery.blogspot.com/2011/03/fcpu-gcc-gdzie-definiowac.html
  • #5 14823444
    Mathew003
    Poziom 9  
    Problem rozwiązany :)
    Problem polegał na tym, że funkcja send od złej strony wysyłała ramkę.
    Zamiast:
    [1110|0000|1110|0000][0100|0000|1011|1111]
    Wysyłałem:
    [0000|0111|0000|0111][1111|1101|0000|0010]

    Wystarczyło zmienić fragment:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Na:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Czyli maskę z 0x01 na 0x8000 oraz przesunięcie bitowe w drugą stronę :)
REKLAMA