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

Jak dekodować sygnał z chińskiego pilota z układem JA6221 bez oscyloskopu?

august_ 18 Gru 2006 11:48 16831 63
Najlepsze odpowiedzi

Jak rozpoznać i odczytać protokół sygnału z chińskiego pilota z układem JA6221 bez oscyloskopu?

To nie był RC5, tylko kodowanie typu SPACE/NEC, więc trzeba analizować długości przerw między impulsami, a nie szukać stałego „bit clocka”. [#3344215] Najprościej użyć noty Holteka dla JA6221 oraz bazy konfiguracji LIRC/WinLIRC, bo dla podobnego pilota PixelView wyszło: `SPACE_ENC|CONST_LENGTH`, `header 9000 4500`, `one 563 1687`, `zero 563 562`, `pre_data_bits 16`, `pre_data 0x61d6` i 16 bitów danych. [#3345189] [#3346616] Do samego rozpoznania bez oscyloskopu pomaga WinLIRC, który zapisuje na początku pliku parametry transmisji i czasy poszczególnych stanów. [#3346511] W końcu okazało się też, że nośna nie była 38 kHz, tylko około 33,51 kHz; zmierzone czasy to około 462 µs dla impulsu i 5,12 ms / 7,62 ms dla przerw, zależnie od trybu wyzwolenia migawki. [#3351799]
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA
  • #1 3344119
    august_
    Poziom 27  
    Posty: 1081
    Pomógł: 70
    Ocena: 47
    Witam!
    Mam pilot jak na zdjęciu:
    Jak dekodować sygnał z chińskiego pilota z układem JA6221 bez oscyloskopu?

    Próbuję zdekodować sygnały, które wysyła.
    Założyłem sobie (nie wiem czy słusznie), że to RC5, ale nie wiem jak sprawdzić.. oscyloskopu nie posiadam.

    Pilot jest chiński, obsługuje go układ JA6221 (lub coś w podobie).. nie ma kwarcu, więc częstotliwość jest ustalana za pomocą rezonatora RC.

    Ale do rzeczy.
    Jak wspomniałem wcześniej - napisałem program testowy, który po pojawieniu się 0 na wejściu czeka czas 2,5 bitu startowego, potem przeczekuje 4 bity adresowe a potem odczytuje 8 kolejnych bitów i wystawiam je na port gdzie zapalają się diody.

    No i mam problem z doborem czasów. Chciałem próbkować stan w sposób podany na:
    http://www.ustr.net/infrared/infrared1.shtml

    Precyzyjnie czekałem 4,752ms, potem po 1,728ms na bit... no i stany się zmieniają, ale nie jest to powtarzalne...
    Zmieniałem czasy, cudowałem.. od 1ms do 2ms na bit.. i nic z tego nie uzyskałem.. przy skrajnych czasach - bity nie są wyłapywane.

    A może to po prostu nie jest standard RC5?
    Jakich czasów spróbować?
    Może ktoś podsunie jakiś pomysł?

    Pozdrawiam i z góry dzięki
    august
  • REKLAMA
  • Pomocny post
    #2 3344215
    mirekk36
    Poziom 42  
    Posty: 9195
    Pomógł: 964
    Ocena: 2289
    raczej na pewno nie jest to kod RC5, mam podobny pilot i jak narazie doszedłem do wniosku, że może to być kodowanie typu SPACE stosowane np przez JVC. Jeśli chcesz wykryć mniej więcej w jakim standardzie nadaje twój pilot to zmierz czas tzw nagłówka - czyli ile trwa pierwszy impuls. Jego długość jest charakterystyczna prawie dla każdego standardu nadawania IR. Jak zapewne wiesz w RC5 czas ten = 1,7ms natomiast w standardzie SIRC(SONY) trwa 2,4ms - a w standardzie SPACE(JVC) trwa 8,4ms. Musisz gdzieś zdobyć jakąś tabelę z której wyczytasz dla jakich standardów jakie są nagłówki a potem to jakoś obsłużysz. Ja narazie napisałem, zresztą też korzystałem na początku z tej stronki, obsługę dla RC5, SONY i JVC a za jakiś czas jak będę pilnie potrzebował zacznę też rozgryzać te piloty od kart TV do PCta. Mam kilka takich pilotów i akurat te wszystkie moje piloty wysyłają nagłówek pond 8,4ms ;)

    pozdrówka
  • REKLAMA
  • #3 3344284
    august_
    Poziom 27  
    Posty: 1081
    Pomógł: 70
    Ocena: 47
    Dzięki.
    Opis protokołów jest tutaj... spróbuję coś dopasować.
    Zacznę od JVC.
  • REKLAMA
  • Pomocny post
    #4 3345189
    Nawigator
    Poziom 33  
    Posty: 1923
    Pomógł: 167
    Ocena: 160
    Daj sie wykazac google. 2 minuty i jest:
    http://www.holtek.com/pdf/consumer/6221_2v140.pdf
    dekodowanie wrzuć szukanie np. ir nec decoding a na stronie producenta Holtek są tez ciekawe noty aplikacyjne o dekodowaniu tego kodu np.
    http://www.holtek.com/english/tech/appnote/consumer/pdf/ha0040e.pdf
    Użyj przerwania np. INT0 i licznika. Ale szczerze mówiąc nie wiem jak poradzisz sobie bez oscyloskopu aby odczytać kolejne bajty transmisji, chyba że uda ci się po zdekodowaniu wysłać 4 bajty uartem do komputera.
    Pozdr. N.
  • Pomocny post
    #6 3346511
    ksz
    Poziom 15  
    Posty: 113
    Pomógł: 12
    august_ napisał:
    Witam!
    Mam pilot jak na zdjęciu:
    ...


    Może użyj WinLIRCa..? Mi pomógł bardzo przy walce z pilotem Sanyo, żaden z bardziej znanych standardów nie pasował, w końcu polutowałem na szybko odbiornik (http://lirc.org/receivers.html) i zgrałem kody przycisków.. Na początku pliku który zapisuje WinLIRC w trybie nauki są dane na temat sposobu transmisji oraz czasów poszczególnych stanów..
    Chyba że ewentualnie znasz model pilota, to sprawdź tu http://lirc.sourceforge.net/remotes/
    Jak byś potrzebował pomocy z WinLIRCem to pisz na PW, bo tu zaglądam 'nie systematycznie':)

    Powodzenia, pozdr.
    Krzysiek Sz.
  • #7 3346616
    august_
    Poziom 27  
    Posty: 1081
    Pomógł: 70
    Ocena: 47
    Witam!
    Dziękuję, bardzo mi pomogliście.

    Link do datasheeta układu 6221 jest bardzo pomocny i pokrywa się z tym co znalazłem dzięki ksz.
    To mój pilot
    http://lirc.sourceforge.net/remotes/pixelview/

    A to dane, które znalazłem:
    
    #  
    # brand:             PixelView
    # model:             PlayTV Pro remote control
    #
    # supported devices: 
    #   works both with home-brew and TV card receiver (use lirc-0.6.6 or better)
    #
    
    
    begin remote
    
      name      pixelviewp
      bits          16
      flags     SPACE_ENC|CONST_LENGTH
      eps            20
      aeps          200
    
      pre_data_bits   16
      pre_data       0x61d6
    
      header       9000  4500
      one           563  1687
      zero          563   562
      ptrail        563
      repeat       9000  2250
      gap          108000
      toggle_bit      0
    
      frequency    38000
      duty_cycle   33
    
          begin codes
    
              power                    0x0000000000007887
              zoom                     0x00000000000038C7
              scan                     0x000000000000E01F
              tv/fm                    0x000000000000C03F
              vol+                     0x000000000000F807
              vol-                     0x000000000000E817
              chan+                    0x0000000000006897
              chan-                    0x00000000000028D7
              mute                     0x00000000000018E7
              source                   0x00000000000000FF
              loop                     0x000000000000C837
              +100                     0x00000000000008F7
              fn-                      0x00000000000020DF
              fn+                      0x00000000000030CF
              reset                    0x000000000000B04F
              freeze                   0x000000000000F00F
              function                 0x000000000000708F
              0                        0x00000000000040BF
              1                        0x000000000000807F
              2                        0x000000000000D02F
              3                        0x000000000000D827
              4                        0x000000000000A05F
              5                        0x000000000000906F
              6                        0x000000000000A857
              7                        0x000000000000609F
              8                        0x00000000000050AF
              9                        0x00000000000048B7
    
          end codes
    
    end remote
    


    Wszystko się na pierwszy rzut oka zgadza. Standard nie wydaje się być trudny.
    Po odczekaniu bitów startu - muszę wykrywać czy jest długa czy krótka przerwa i na tej podstawie określić stan logiczny... może uda się bez oscyloskopu.
    Dziękuję jeszcze raz.
  • #8 3347625
    mirekk36
    Poziom 42  
    Posty: 9195
    Pomógł: 964
    Ocena: 2289
    ... jak masz podane czasy dokładnie, to po co oscyloskop??? ;) ..... ale fajna ta stronka od kolegi ksz ;) ... teraz mi też łatwiej będzie zrobić sofcik do tych pilotów od kart TV

    Dodano po 6 [minuty]:

    ... no i już mam, znalazłem dane do moich pilotów - to głównie AverMedia, kodowanie tak jak przypuszczałem typu SPACE, lekka przeróbka kodu od JVC i już działa ;) ... ponieważ nie mogę tu wcisnąć koledze ksz "pomógł" to wrzucam mu od siebie kilka punktów i dzięki ;)
  • #9 3348057
    Samuraj
    Poziom 35  
    Posty: 2792
    Pomógł: 286
    Ocena: 619
    Może ktoś opisać jak interpretować te komendy
    np. coś takiego:
    
    begin remote
    
        name CANON-RC1/RC5
        flags SPACE_ENC
    
        bits 1
        one 550 5250
        zero 550 7143
        ptrail 550
    
        eps 30
        aeps 50
    
        begin codes
              S 0x0
              2S 0x1
        end codes
    
    end remote
    

    Chyba na początku 1 logiczna przez 550 (5,5 ms ???) potem 0 a dalej??
  • #10 3348096
    august_
    Poziom 27  
    Posty: 1081
    Pomógł: 70
    Ocena: 47
    Porównaj kod, który ja wkleiłem z notą katalogową układu 6221, którą podał Nawigator - da się wydedukować na tej podstawie.

    Z tego co widzę - u Ciebie nie ma nagłówka, jest tylko wysyłana 1 albo 0.
    1 - 0,55ms stan wysoki potem - 5,25ms stan niski... zero analogicznie.
  • #11 3348872
    Samuraj
    Poziom 35  
    Posty: 2792
    Pomógł: 286
    Ocena: 619
    Im dłużej na to patrzę tym chyba mniej rozumiem :D
    Usiłuje sklecić zdalny wyzwalacz migawki, znalazłem kody, niby proste są dwa 0 i 1. To się wcześniej domyśliłem, bo na firmowym pilocie są dwa przyciski ustawienie ostrości i wyzwolenie migawki.
    Teraz teoria.
    W tym pdf'e http://www.holtek.com/pdf/consumer/6221_2v140.pdf na stronie 6 opisane jest jak wygląda 0 logiczne a jak 1. Czy wystarczy wysłać taki ciąg dla:
    S2 - 0,55ms stanu wysokiego i (jak napisał august_) 5,25ms stanu zerowego
    S - 0,55ms (1) i 7,143ms (0)

    S2 i S to pewnie przyciski na pilocie.

    Czy dobrze widzę ze 1 to nie jest włączenie diody nadawczej tylko sterowanie jej częstotliwością 38kHz ??
    Choć w tym opisie kodów pilota nie ma wpisu frequency 38000, tak jak jest to w przypadku układu 6221, a to znowu przekonywało mnie do ustawienia tylko i wyłącznie odpowiednio długo stanu wysokiego.

    Nie rozumiem jeszcze tych wpisów:
    
        ptrail 550 
    
        eps 30 
        aeps 50 
    
  • #12 3349077
    Jarema
    Użytkownik obserwowany
    Posty: 1179
    Pomógł: 86
    Ocena: 32
    Samuraj napisał:
    Czy dobrze widzę ze 1 to nie jest włączenie diody nadawczej tylko sterowanie jej częstotliwością 38kHz ??


    Witam,
    Jakby nie było musi występować czestotliwość nośna :D.
  • #13 3349101
    mirekk36
    Poziom 42  
    Posty: 9195
    Pomógł: 964
    Ocena: 2289
    kolego Samuraj,

    z opisu twojego pilota wynika, że jest to kodowanie typu SPACE i nie jest wysyłany żaden nagłówek (header). Natomiast pilot generuje tylko dwa rodzaje kodów o nazwach S i 2S, ktróre oznaczają, że jeśli wysyłamy kod S to oznacza, że trzeba wysłać porpostu zero zgodnie z podanymi czasami, a kod 2S to wysłanie jedynki.

    aby wysłać ZERO musisz wygenerować (jak już podpowiadał kolega august) dwa impulsy. Pierwszy o długości 0,55ms (zero) i potem drugi o długości 7,143ms (jeden)

    ... aby wysłać JEDYNKĘ musisz wygenerować pierwszy impuls o długości 0,55ms (zero) a następnie drugi o długości 5,25ms (jeden).

    parametr "ptrail 550" oznacza chyba (ale tu może się mylę), że na zakończenie wysyłasz impuls 0,55ms (zero)

    oczywiście sygnał powinien być sterowany poprzez 38KHz. Więc oczywiście nie ma tu mowy o zwykłym włączaniu czy wyłączaniu diody IR. Uzyj sobie jako odbiornika typowego TFMS5638 lub podobnego. Nawet jesli nośna będzie się nieco różniła np 36KHz to i tak powinno działać. Podobnie, jesli chcesz nadawać to musisz najpierw generować falę nośną

    pozdrówka
  • #14 3349115
    Samuraj
    Poziom 35  
    Posty: 2792
    Pomógł: 286
    Ocena: 619
    Ok dzięki za szybką odpowiedz. Teraz juz wszystko wiadomo. Przystępuje do prób. najpierw generator 38kHz.
    Zapewne zrobię to na którymś Timerze.Mam do dyspozycji w tej chwili ATtiny2313, a następnie bedę bramkował wyjście dla diody IR w odpowiednich czasach.
  • #15 3349128
    august_
    Poziom 27  
    Posty: 1081
    Pomógł: 70
    Ocena: 47
    Samuraj napisał:
    Im dłużej na to patrzę tym chyba mniej rozumiem :D
    Usiłuje sklecić zdalny wyzwalacz migawki, znalazłem kody, niby proste są dwa 0 i 1. To się wcześniej domyśliłem, bo na firmowym pilocie są dwa przyciski ustawienie ostrości i wyzwolenie migawki.


    Jeśli to pilot do aparatu - to na pewno nie będzie bitów startu itp. bo każde opóźnienie jest niemile widziane.

    Cytat:

    Teraz teoria.
    W tym pdf'e http://www.holtek.com/pdf/consumer/6221_2v140.pdf na stronie 6 opisane jest jak wygląda 0 logiczne a jak 1. Czy wystarczy wysłać taki ciąg dla:
    S2 - 0,55ms stanu wysokiego i (jak napisał august_) 5,25ms stanu zerowego
    S - 0,55ms (1) i 7,143ms (0)

    S2 i S to pewnie przyciski na pilocie.

    Czy dobrze widzę ze 1 to nie jest włączenie diody nadawczej tylko sterowanie jej częstotliwością 38kHz ??


    Może być inna częstotliwość nośnej, przy czym ja odbieram 38kHz czujnikiem 36kHz.. wielkiej różnicy w zasięgu nie ma.

    Czyli w Twoim przypadku - aby przesłać jedynkę logiczną musisz przez 0,55ms mrugać diodą IR z częstotliwością 38kHz (lub inną).
  • #16 3349142
    Samuraj
    Poziom 35  
    Posty: 2792
    Pomógł: 286
    Ocena: 619
    Cytat:

    Czyli w Twoim przypadku - aby przesłać jedynkę logiczną musisz przez 0,55ms mrugać diodą IR z częstotliwością 38kHz (lub inną).

    I o taką wypowiedż mi chodziło :D
    Ma ktoś prosą receptę na generator 38kHz na ATTiny 2313 :?:
    38kHz to wychodzi że zmiana stanu musi nastąpić co ok 0.78ms :?:
    Dobrze liczę :?:
  • #17 3349194
    august_
    Poziom 27  
    Posty: 1081
    Pomógł: 70
    Ocena: 47
    Samuraj napisał:
    Cytat:

    Czyli w Twoim przypadku - aby przesłać jedynkę logiczną musisz przez 0,55ms mrugać diodą IR z częstotliwością 38kHz (lub inną).

    I o taką wypowiedż mi chodziło :D
    Ma ktoś prosą receptę na generator 38kHz na ATTiny 2313 :?:
    38kHz to wychodzi że zmiana stanu musi nastąpić co ok 0.78ms :?:
    Dobrze liczę :?:


    Chyba coś źle liczysz.
    Okres przebiegu 38kHz trwa 1/38000 =26,316us. Stan zmienia się 2x na okres więc dzielimy ten czas przez dwa i mamy zmianę stanu co 13,16us.

    PS. Uwzględnij to co pisze mirekk36 o zakończeniu nadawania.

    Dodano po 1 [minuty]:

    PS. I procedurkę chyba lepiej napisać tak aby ew. zmiana częstotliwości nośnej nie była uciążliwa.
  • REKLAMA
  • #18 3349264
    ksz
    Poziom 15  
    Posty: 113
    Pomógł: 12
    Samuraj napisał:
    Może ktoś opisać jak interpretować te komendy
    np. coś takiego:
    
    begin remote
    
        name CANON-RC1/RC5
        flags SPACE_ENC
    
        bits 1
        one 550 5250
        zero 550 7143
        ptrail 550
    
        eps 30
        aeps 50
    
        begin codes
              S 0x0
              2S 0x1
        end codes
    
    end remote
    

    Chyba na początku 1 logiczna przez 550 (5,5 ms ???) potem 0 a dalej??


    to już chyba zostało powiedziane, ale dodam: czasy w tych plikach są w us

    dodam jeszcze (ze źródeł [Win]LIRCa):
    eps - _relative_ tolerance
    aeps - _absolute_ tolerance

    Ja tak przynajmniej wywnioskowałem ze źródeł programu, że te czasy w tych plikach są minimalne, jakich można się spodziewać, do tego dochodzi w/w tolerancja..
  • #19 3349270
    Samuraj
    Poziom 35  
    Posty: 2792
    Pomógł: 286
    Ocena: 619
    Moment moment.
    Widzę tutaj mała nie konsekwencje.
    Pierwsza wartość określa jak długo ma trwać 1 czy 0, chyba pierwsza to, 0 bo po długości 1 aparat rozpoznaje, co to za kod przycisku. Proszę zauważyć, że w obu przypadkach pierwsza wartość jest taka sama 0,55ms.

    Co do obliczeń rzeczywiście się pomyliłem bo nie wiem jak ale wyliczyłem ze 1s to 6000ms. Po poprawce wychodzi już tak prawidłowo.
    Timer1
    Prescaler: 1
    Freq: 12MHz
    W.pocz 65378
    Przerwanie co: 13,17us
  • #20 3349339
    august_
    Poziom 27  
    Posty: 1081
    Pomógł: 70
    Ocena: 47
    Gdzie widzisz niekonsekwencję?
    Jeśli nadawanie trwa 0,55ms a przerwa 5,25ms to jest to jedynka logiczna.

    Jeśli nadawanie trwa 0,55ms a przerwa 7,14ms to jest to zero logiczne.

    A więc aby nadać np. 101 to:

    055 nadawanie - 5,25 przerwa - 0,55 nadawanie - 7,14 przerwa - 0,55 nadawanie - 5,25 przerwa - 0,55 nadawanie (na koniec)
  • #21 3349342
    mirekk36
    Poziom 42  
    Posty: 9195
    Pomógł: 964
    Ocena: 2289
    ... aparat(czyli jego odbiornik) nie rozpoznaje przycisku jak powiedziałeś "po długości 1" .
    Kodowanie bitów w tym standardzie (nazwa SPACE) polega na modyfikacji czasu przerwy między impulsami. Bit o wartości logicznej 1 kodowany jest jako impuls o czasie trwania w twoim przypadku 0,55ms i przerwa o czasie trwania 5,25ms. Analogicznie dla bitu o wartości logicznej 0 mamy impuls o stałym czasie 0,55ms i tym razem przerwę o długości 7,143ms. Teraz jest to jaśniejsze?

    ... natomiast kwestia czy omawiany wyżej impuls o długości 0,55ms ma wartość 1 czy 0 to zależy w którym miejscu na to patrzysz. Ja pisałem, że ma on wartość 0 ale na wyjściu odbiornika TFMS. Czyli na jego wejściu w tym czasie na wejściu leci sobie nośna ;)

    Dodano po 3 [minuty]:

    .... o ale już kolega august zdążył podać ci żywy przykład jak wysłać np sekwencję bitów ;)
  • #22 3349367
    august_
    Poziom 27  
    Posty: 1081
    Pomógł: 70
    Ocena: 47
    mirekk36 napisał:
    ... aparat(czyli jego odbiornik) nie rozpoznaje przycisku jak powiedziałeś "po długości 1" .
    Kodowanie bitów w tym standardzie (nazwa SPACE) polega na modyfikacji czasu przerwy między impulsami.


    To ja jeszcze dodam, że to się nazywa ogólnie PPM (Pulse position modulation).
  • #23 3349563
    mirekk36
    Poziom 42  
    Posty: 9195
    Pomógł: 964
    Ocena: 2289
    .... hmmmm tak już wdając się z kolegą augustem w czystą teorię ;) ... to mi się jednak wydaje, że PPM stosowane jest np przez SONY, bo tam rzeczywiście stan logiczny zależy od szerokości impulsu przy stałej długości przerwy. Natomiast w kodowaniu typu "Space-time coding" mamy do czynienia z impulsem o stałej długości natomiast zmienia się długość przerwy.

    ... a jeszcze jest inaczej np u Philipsa (RC-5) - to jest kodowanie typu Shift coding lub biphase coding.

    pozdrawiam
  • #24 3349595
    august_
    Poziom 27  
    Posty: 1081
    Pomógł: 70
    Ocena: 47
    No nie wiem jak to się wszystko ma do siebie, ale w nocie katalogowej 6221 jest napisane, że jest to kodowanie PPM.

    A Sony ma praktycznie to samo tylko zanegowane + dodany nagłówek... no i najpierw ma komendę, a potem adres..
  • #25 3349721
    Samuraj
    Poziom 35  
    Posty: 2792
    Pomógł: 286
    Ocena: 619
    Dłubie, dłubie i coś nie wychodzi :cry:

    Cytat:

    A więc aby nadać np. 101 to:

    055 nadawanie - 5,25 przerwa - 0,55 nadawanie - 7,14 przerwa - 0,55 nadawanie - 5,25 przerwa - 0,55 nadawanie (na koniec)


    Dlaczego 101 jak wysylany jest tylko 1 bit :?:

    No ale nic spróbujemy tak:

    
    #include <avr/io.h> 
    #include <avr/interrupt.h>
    
    void delay(unsigned int a)
    {
    
    	//65000 = 500 ms
    	//797   = 549,67 us
    	//7572	= 5250 us
    	//10303 = 7143 us
    	unsigned int j;
    	
    		for(j=0;j<a;j++);
    }
    
    unsigned char nad;
    
    SIGNAL (SIG_OVERFLOW1)
    {	//przerwanie co 13,17 us
    	TCNT1=65400;			// wartość początkowa TCNT1
    	if (nad == 1) 
    		PORTD = ~PORTD;
    	else
    		PORTD = 0x01;
    }
    
    
    void main(void)
    {
    	DDRD = 0b1;		//ustawienie portu jako wyjscie
    
    	//konfiguracja Timera1
     	TCNT1 = 65400;			// wartość początkowa TCNT1
    	TCCR1B = 0x01;			//prescaler 
    	TIMSK = 1<<TOIE1;
    	sei(); 
    	nad = 0;
    
    	//przerwa 0.5s
    	unsigned char a;
    	for (a=0;a<10;a++);
    		delay(65000);
    
    	nad=1;
    	delay(796);
    
    	nad=0;
    	delay(7572);
    
    	nad=1;
    	delay(796);
    
    	nad=0;
    	delay(10303);
    
    	nad=1;
    	delay(796);
    
    	nad=0;
    	delay(7572);
    
    	nad=1;
    	delay(796);
    
    	nad=0;
    }
    


    Rezultat taki że zero reakcji ze strony aparatu.
    Szkoda że nie mam miernika w domu to bym posprawdzał czy częstotliwość jest prawidłowa.
  • #26 3349790
    august_
    Poziom 27  
    Posty: 1081
    Pomógł: 70
    Ocena: 47
    Samuraj napisał:
    Dłubie, dłubie i coś nie wychodzi :cry:
    Dlaczego 101 jak wysylany jest tylko 1 bit :?:


    101 żeby pokazać jak wygląda kodowanie.
    Jak przesyłasz jeden to masz:

    0,55ms nadawanie - 5,25 przerwa - 0,55ms nadawanie

    zero:
    0,55 nadawanie - 7,14 przerwa - 0,55 nadawanie.


    Poza tym w twoim przypadky nośna wcale nie musi być 38 kHz...
  • #27 3349806
    mirekk36
    Poziom 42  
    Posty: 9195
    Pomógł: 964
    Ocena: 2289
    .... hmmm szkoda, że nie znam prawie wogóle C więc tu ci nie pomogę, ale wydaje mi się, na tyle o ile się orientuję ;), że coś całkowicie robisz źle

    ... np gdy startujesz z pierwszym impulsem

    nad=1;
    delay(796);

    to co się wg ciebie dzieje z twoim wyjściem na diodę IR?

    czy przypadkiem nie wystawiasz na siłę stanu 1 przez cały czas trwania impulsu tj 0,55ms???

    ... to powinno działać tak, że na ten czas 0,55ms powinien twój timer zacząć generować nośną 38KHz na wyjściu nad przez czas 0,55ms, potem robisz przerwę w generowaniu nośnej przez timer na czas 5,25ms - dzięki temu wygenerujesz cały jeden kompletny bit - a chyba u ciebie ten program działa całkiem inaczej? chyba że się mylę bo nie znam na tyle C jak zastrzegłem na początku ;)

    Dodano po 38 [sekundy]:

    .... hehehe jak zwykle kolega august wyprzedził mnie o 0,55ms ;)
  • #28 3349823
    Samuraj
    Poziom 35  
    Posty: 2792
    Pomógł: 286
    Ocena: 619
    [quote="mirekk36"].... hmmm szkoda, że nie znam prawie wogóle C więc tu ci nie pomogę, ale wydaje mi się, na tyle o ile się orientuję ;), że coś całkowicie robisz źle

    ... np gdy startujesz z pierwszym impulsem

    nad=1;
    delay(796);

    to co się wg ciebie dzieje z twoim wyjściem na diodę IR?

    czy przypadkiem nie wystawiasz na siłę stanu 1 przez cały czas trwania impulsu tj 0,55ms???

    ... to powinno działać tak, że na ten czas 0,55ms powinien twój timer zacząć generować nośną 38KHz na wyjściu nad przez czas 0,55ms, potem robisz przerwę w generowaniu nośnej przez timer na czas 5,25ms - dzięki temu wygenerujesz cały jeden kompletny bit - a chyba u ciebie ten program działa całkiem inaczej? chyba że się mylę bo nie znam na tyle C jak zastrzegłem na początku ;)

    [size=9][color=#999999]
    Dokładnie tak się dzieje, gdy nad=1 to co 13,17 us stan diody IR przestawiany jest na przeciwny, gdy nad=0 dioda jest zgaszona.
  • #29 3349895
    mirekk36
    Poziom 42  
    Posty: 9195
    Pomógł: 964
    Ocena: 2289
    aha no tak teraz zobaczyłem ten warunek if w obsłudze przerwania .... hmmm jeśli tak się dzieje jak opisałeś to teoretycznie powinno to działać ;) ... rozumiem, że dioda IR podłączona jest katodą do wyjścia nad i odpowiednio blisko niej stoi aparat? hmmm ... to może spróbuj jeszcze zmienić częstotliwość nośnej na niższą np 36KHz albo jeszcze mniej - może aparat pracuje na nieco innej niż 38 i ma b.dobry filtr ? ;) .... albo coś jeszcze nie tak jest w sofcie lub hardware - dobrze by było oscylem sobie zobaczyć co się dzieje na diodzie, jesli masz oczywiście.
  • #30 3349905
    august_
    Poziom 27  
    Posty: 1081
    Pomógł: 70
    Ocena: 47
    mirekk36 napisał:
    .... hehehe jak zwykle kolega august wyprzedził mnie o 0,55ms ;)


    hehe :)

    Wracając do tematu.
    Najczęściej spotykane częstotliwości nośnych to:
    30, 33, 36, 36.7, 38, 40, 56 [kHz]

    Może spróbuj od 56 w dół jechać.

    PS. Dzielnik timera masz dobrze ustawiony?
    Może sprawdź w jakimś symulatorze ten czas?
    Czy kwarc masz odpowiedni?
    Dioda IR nie jest odwrotnie włączona?

    Dodano po 7 [minuty]:

    Ale dziwne jest to, że w tym pliku nie jest podana częstotliwość nośnej...

    Ja mam jeszcze taki pilot:
    http://www.bluespot.co.uk/stock_image/rc10.jpg

    Zamierzam go wsadzić do samochodu i sterować radiem.

    
    #
    # contributed by Christoph Bartelmus
    #
    # brand:             BLAUPUNKT
    # model:             RC10
    # supported devices: car remote control
    #
    
    begin remote
    
      name   BLAUPUNKT
      flags RAW_CODES
      eps             0
      aeps          200
    
      ptrail          0
      repeat     0     0
      gap    109400
    
          begin raw_codes
    
              name SRC
                 6875    6850     660
    
              name SRC+
                 8050    8050     660
    
              name UP
                 3850    3850     660
    
              name OK
                 7500    7400     660
    
              name DOWN
                 4450    4400     660
    
              name RIGHT
                 5660    5630     660
    
              name LEFT
                 6280    6200     660
    
              name V+
                 2650    2580     660
    
              name V-
                 3250    3200     660
    
              name MUTE
                 5050    5000     660
    
              name .
                 2050    2000     660
    
          end raw_codes
    
    end remote
    


    Tu też nie mam częstotliwości nośnej.. i kodowanie jest jakieś dziwne.. dla każdego przycisku inne czasy...

    Czyli dla SRC np.
    nadawanie 6875
    przerwa 6850
    nadawanie 660
    ??


    PS. Samuraj: weź aparat cyfrowy, albo wstaw na chwilę zwykłego leda i sprawdź czy coś mruga wogóle.

    Dodano po 11 [minuty]:

    Aha! I jeszcze często jest tak, że nośna nie ma wypełnienia 50% aby oszczędzać baterie w pilocie.
    Może to być np. 33% (dla 6221).

Podsumowanie tematu

✨ Dyskusja dotyczy dekodowania sygnału z chińskiego pilota z układem JA6221 bez użycia oscyloskopu. Pilot nie posiada kwarcu, a częstotliwość nośna jest ustalana przez rezonator RC. Próby dekodowania sygnału metodą RC5 okazały się nieskuteczne, ponieważ pilot stosuje kodowanie typu SPACE (space encoding), charakterystyczne dla niektórych pilotów JVC, Thomson czy Sanyo. Kluczowe jest zmierzenie czasu trwania nagłówka (header) i impulsów, które różnią się w zależności od standardu (np. RC5: 1,7 ms, SIRC Sony: 2,4 ms, SPACE JVC: 8,4 ms). W przypadku JA6221 sygnał jest modulowany nośną około 38 kHz (często spotykane wartości to 30-56 kHz), a bity są kodowane przez stałą długość impulsu (np. 0,55 ms) i zmienną długość przerwy (np. 5,25 ms dla jedynki, 7,14 ms dla zera). Kodowanie to jest często określane jako PPM lub space-time coding, gdzie zmienia się długość przerwy między impulsami. Do dekodowania i generowania sygnału zaleca się użycie przerwań i liczników mikrokontrolera (np. AVR, ATtiny2313) oraz generowanie nośnej 38 kHz za pomocą timerów. Wskazano również na przydatność oprogramowania WinLIRC do analizy sygnałów IR bez oscyloskopu. W dyskusji pojawiły się przykłady konfiguracji pilotów z plików LIRC, opisujące czasy impulsów, przerw, nagłówków, pre_data i ptrail. Omówiono także znaczenie parametrów eps i aeps jako tolerancji czasowej. Wskazano, że adres i dane są przesyłane w określonej kolejności, a adres służy do rozróżnienia urządzeń. W praktyce ważne jest dostosowanie częstotliwości nośnej i dokładne odczytanie czasów impulsów, co może wymagać eksperymentów, zwłaszcza bez oscyloskopu. Podano przykłady pilotów PixelView PlayTV Pro, Panasonic Car Audio, Olympus RM-1, Sanyo RB-D5 oraz innych, wraz z fragmentami kodów i opisami protokołów. Dyskusja podkreśla, że dekodowanie sygnału IR z pilotów chińskich z układem JA6221 wymaga analizy czasów impulsów i przerw, generowania nośnej 38 kHz oraz uwzględnienia specyfiki kodowania SPACE, a także wykorzystania narzędzi takich jak WinLIRC do analizy sygnału bez oscyloskopu.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA