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

Graficzny dekoder pilotów IR [AVR -> PC] sprawdź pilota

mirekk36 30 Dec 2010 18:55 80650 126
Optex
  • #91
    romantv
    Level 17  
    Witam
    Proszę o pomoc, czy odebrany kod z pilota mogę zapisać nie w pliku txt a w EEPROM-ie AVR
    Oczywiście mam namyśli kod z różnych pilotów.

    PS
    Program działa rewelacyjnie tylko zapisuje dane do pliku txt.
  • Optex
  • #92
    mirekk36
    Level 42  
    romantv wrote:
    Witam
    Proszę o pomoc, czy odebrany kod z pilota mogę zapisać nie w pliku txt a w EEPROM-ie AVR
    Oczywiście mam namyśli kod z różnych pilotów.

    PS
    Program działa rewelacyjnie tylko zapisuje dane do pliku txt.


    Niestety nie ma najmniejszej możliwości z mojej strony teraz na jakiekolwiek przeróbki w programie tak aby spełnić życzenia, które tu się pojawiają.
  • #93
    mario832
    Level 17  
    Zauważyłem ,że odbiornik czasem może się zawiesić. Miałem tak przy testowaniu pilota uniwersalnego. Przydatne byłoby również jakby odbiornik informował o typie sygnału odebranego (RC5 ,Sony ,itp.) ,to chyba dałoby się załatwić w samym interfejsie użytkownika ,bez grzebania w kodzie µP. Co prawda ramki transmisyjne są charakterystyczne dla poszczególnych standardów, ale mimo wszystko czasem może pojawić się bardziej "dziwaczna" i wtedy trzeba troszkę się wysilić.
  • Optex
  • #94
    mirekk36
    Level 42  
    mario832 wrote:
    ....,to chyba dałoby się załatwić w samym interfejsie użytkownika ,bez grzebania w kodzie µP. .....


    Zarówno bez grzebania jak i z grzebaniem (co za różnica) wszystko da radę załatwić .... to jest tylko i wyłącznie prosty przykład jak można coś takiego zrobić we własnym zakresie. A możliwości rozwojowe są ogromne dzięki czemu można spokojnie wykorzysywać je już w projektach komercyjnych i na sprzedaż bez zmrużenia oka ;) w najbardziej dziwnych kombinacjach.
  • #95
    snajper47
    Level 1  
    Witam. Ten projekt ogromnie mnie zainspirował do poznania bliżej tematu podczerwieni. Postanowiłem napisać aplikację o podobnej funkcjonalności, ale używjąc biblioteki vusb. Udało mi się:
    -odczytywać czasy sygnałów z dobrą dokładnością (35 taktów zegara @ 12Mhz)
    -wysyłać je do komputera przez USB
    -wczytywać z komputera ramkę
    Niestety wysyłanie nadal nie działa i nie jestem jeszcze w stanie określić dlaczego.

    Użyłem atmegi16
    TSOP podpięty na ICP1
    dioda podpięta na OC1A
    USB podpięte jest na portach PD2 oraz PD4 zgodnie ze schematami zawartymi na stronie vusb. Do komunikacji użyta jest klasa custom-class.

    Taktowanie kwarcem 12 Mhz.

    Ze względu na to, że do projektu, który wykonał mirekk36 nie było kodów źródłowych, to postanowiłem podzielić się swoimi. Jest tam przykład tego jak wysyłać dane wielkości kilkuset bajtów przez USB, jak korzystać z przerwania ICP do otrzymania czasów w ramce podczerwieni, a także jeszcze nie działające poprawnie wysyłanie sygnału, który jest zapisany w postaci czasów. Ale jak tylko wymyślę, co jest nie tak, to również to dorzucę.

    Jeśli ktoś chciałby jakichś dodatkowych informacji lub nie mógł zrozumieć kodu proszę śmiało pytać, docenię także pomoc w sprawie nie działającego wysyłania ramki.

    Pozdrawiam!
  • #96
    rybek_el
    Level 10  
    w kodzie w odbieraniu z TSOP snajper47 masz taką linijkę:

    snajper47 wrote:
    Code: c
    Log in, to see the code

    gdzie ov_counter to jest ilość przepełnień timera a rising/falling to odczytany stan timera.
    Nie mogę zrozumieć jaki jest sens dodawania tych dwóch wartości.
    Jeśli już to chyba:
    Code: c
    Log in, to see the code

    czego oczywiści nie możemy zrobić na 16 bitach.
  • #97
    sasiadoswdzw
    Level 2  
    Witam
    Jakich jeszcze brakuje elementów na schemacie z atmega8 i odbiornikiem IR ?
    Bo jest na nim napisane że to schemat uproszczony.
    Dziękuje
  • #99
    mic11
    Level 10  
    Cześć

    Albo mi się wydaje albo program ma problem z odbiorem kodu RC6. Przetestowałem 2 inne piloty pracujące na kodzie RC5 i wszystko ok. Za każdym razem prawidłowe odczytanie kodu nawet przy dłuższym przytrzymaniu przycisku. Natomiast jak biorę na tapetę pilota RC6 to dzieją się "dziwne" rzeczy. Każde naciśnięcie tego samego przycisku daje różne wyniki tzn mniej więcej wygląda to tak. pierwsze naciśnięcie -tylko stan wysoki, drugie - kilka jedynek, trzecie - wygląda na właściwe (ale nie wiem czy tak jest bo dopiero rozgryzam tego pilota a standard RC6 nie jest do końca znany), czwarte i kolejne - jest coraz "gęściej" aż po kolejnym ekran się czyści i program zawiesza. Przy przytrzymaniu przycisku to samo tylko że na wykresie dodatkowo pojawiają się ukośne linie i po chwili zwis programu. Czy to mój pilot jest nietypowy czy to błąd programu? I pytanie z innej beczki: czasami mam taką opcję że zanim zdążę zapisać zrzut ekranu to wykres się czyści - czy to błąd programu? I jeszcze coś - wykres da się powiększyć - ale czy da się zapisać "rozstrzelony" wykres - bo ten całościowy wykres z etykietami to jedna wielka ciapa i nic na nim nie widać.
    To mój pilot (dostałem go w torebce z naklejką: RC MCE X10 - chociaż jak się to wrzuci do google to wyskakują inne piloty ale też z rodziny MCE także to pewnie to samo):
    Graficzny dekoder pilotów IR [AVR -> PC] sprawdź pilotaGraficzny dekoder pilotów IR [AVR -> PC] sprawdź pilota
  • #100
    piotrva
    VIP Meritorious for electroda.pl
    RC6 wysyła dużo więcej danych niż standardowe RC5, dodatkowe nagłówki, itp. Rozpisywać się nie będę:
    http://www.sbprojects.com/knowledge/ir/rc6.php
  • #101
    mic11
    Level 10  
    piotrva wrote:
    RC6 wysyła dużo więcej danych niż standardowe RC5, dodatkowe nagłówki, itp. Rozpisywać się nie będę:
    http://www.sbprojects.com/knowledge/ir/rc6.php

    Tak, zdążyłem się zorientować :) używam google. A tu jest wersja oparta na stronie którą podałeś ale z rozszerzonym info o "trybach". A tu info "podobno" oparte o dokumentację Philipsa. Tu jest perełka - nie w pełni ale jednak działający kod do odbioru RC6 napisany w C++ dla Arduino. I jeszcze jedna ciekawostka - odbiornik kodu IR SONY napisany w Bascomie - może się przydać przy pisaniu programu do odbioru innego kodu IR też w Bascomie - chociaż już się nasłuchałem że Bascom jest za wolny i albo C++ albo wstawka asemblerowa ale jak widać po ostatnim przykładzie wszystko da się zrobić w Bascomie :)
    A kończąc moje za długie przynudzanie - chciałem raczej uzyskać odpowiedź autora czy jego program nie odbiera kodów RC6 czy może winny jest tu mój "egzotyczny" pilot od bliżej niezidentyfikowanego zestawu media center?

    p.s. właśnie do napisania prostego programu do atmegi do odbioru kodu z tego pilota potrzebne mi są wykresy z tego dekodera: sprawdzę w jakim trybie pracuje pilot, pozapisuję wyniki i na sztywno przypiszę zdarzenia jakie ma wysyłać atmega na port rs232 do jakiejś wtyczki odbierającej np dla programu xbmc (który z komputera robi prawdziwe htpc)
  • #102
    mirekk36
    Level 42  
    mic11 --> niestety nie mam pojęcia co się dzieje - u mnie wszystkie piloty jakie miałem do dyspozycji powodowały normalną pracę i wyświetlanie wykresów. Ale masz rację, że jak są wąskie impulsy to z etykiet się nic nie dowiemy bo nachodzą jedna na drugą, a i rozszerzanie wykresu działa też jakoś tak troszkę nieteges - no ale tu korzystałem z gotowego komponentu pod Delphi jakim jest TChart więc on ma również jak widać swoje ciemne i mroczne strony ;)

    Ja u siebie już dosyć mocno przerobiłem ten program tak, żeby można było piknie odczytywać ba nawet więcej generować dane o kolejnych długościach impulsów od razu na potrzeby pliku *.h jeśli programujemy w języku C ;) i działa to bez pudła - zobacz na zrzuty ekranu:

    Graficzny dekoder pilotów IR [AVR -> PC] sprawdź pilota

    i proszę bardzo już mamy podane czasy pięknie i to od razu w tablicy - tylko kopiuj / wklej i bezpośrednio do kodu w C dla AVR ;)

    Graficzny dekoder pilotów IR [AVR -> PC] sprawdź pilota

    A odnośnie kodowania RC6 to ja zwykle daję sobie spokój z tym - jest tyle innych możliwości i pilotów. A tych chcesz koniecznie podrobić jakby tego pilota tak?
  • #103
    piotrva
    VIP Meritorious for electroda.pl
    Perełka to jest to:
    http://www.arcfn.com/2009/08/multi-protocol-infrared-remote-library.html
    Dekoder standardów:
    NEC, SONY (SIRC 12-, 15-, 20-bit), RC5, RC6
    Pod Arduino (testowałem wszystkie standardy :D), ale można przerobić na czyste C
  • #104
    romantv
    Level 17  
    Witam
    Czy kod odebrany mogę zapisać w pamięci uC ?
    Jeżeli nie to czy można program pod uC tak przerobić by ta funkcja była realizowana?
  • #105
    mirekk36
    Level 42  
    romantv wrote:
    Witam
    Czy kod odebrany mogę zapisać w pamięci uC ?
    Jeżeli nie to czy można program pod uC tak przerobić by ta funkcja była realizowana?


    No a w tej chwili jak to działa? Właśnie tak jak piszesz. Odebrany kod musi być przecież zapisany w pamięci procka ;) żeby potem można było użyć opcji programu na PC do jego ponownego wyemitowania. Więc masz to czego oczekujesz przecież.
  • #106
    Dawid_20
    Level 17  
    Można liczyć na wsad do M32? Ponieważ nie posiadam pod ręką adaptera pod M8 do zestawu testowego.
  • #107
    PiotrEtenM500
    Level 19  
    Sofcik mirekk36 jest fajny automatyzuje procesy, które robi się ręcznie. Bynajmniej ja tak robię. Ale mam zupełnie odwrotną sytuację, mam piloty, znam kody. mam napisany soft pod AVR co mi emuluje nadawanie, zresztą to jest bardzo proste. Ale proste już nie jest, napisanie softu odbierającego nadawany kod z pilot w AVR'ku. Wygląda to tak:

    1. słowo mam 12 bajtowe z czego 8 pierwszych to kod pilota. 4 kolejne to informacja wykonawcza (binarnie 16 rozkazów) i 13 bajt to stop i jednocześnie flaga. pierwszych 8 bajtów to triplex czyli bajt 0,1 lub F.

    słowo wygląda tak
    Graficzny dekoder pilotów IR [AVR -> PC] sprawdź pilota[/img]

    czyli kod bardziej cyfrowo wygląda tak:

    011102220001F

    bit 0 to w kodzie Bascoma generuję tak:

    Code:
       Set Rfout
    
             Waitus T
             Reset Rfout
             Waitus T1
             Set Rfout
             Waitus T
             Reset Rfout
             Waitus T1


    analogicznie bit 1

    wartość Oscylatora jest bardzo tolerancyjna i waha się od 250-600
    Oscylator oznaczony jest tu jako:

    T = 467
    T1 = T * 3
    T2 = T * 7
    T3 = T * 8

    Code:
     Set Rfout
    
             Waitus T1
             Reset Rfout
             Waitus T
             Set Rfout
             Waitus T1
             Reset Rfout
             Waitus T


    bit F

    Code:
    Set Rfout
    
             Waitus T
             Reset Rfout
             Waitus T1
             Set Rfout
             Waitus T1
             Reset Rfout
             Waitus T


    i bit kończący słowo

    Code:
    Set Rfout                                          ' sync bit
    
             Waitus T
             Reset Rfout
             Waitus T2


    Pilot komunikuje się radiowo na 433MHz wiec w odbiorniku są gigantyczne szumy. Rozpoczynając transmisje zawsze pierwsze słowo idzie na "straty" ze ze względu na fakt, iż flaga jest na końcu co jest początkiem detekcji słowa.

    Teraz pytanie jak napisać dekoder?

    Co tu można zliczać?, bo jak do tej pory rozjeżdża mi się to wszytko przy dekodowaniu. Na razie nie wkleję kodu dekodera by nie sugerować, być może złego kierunku jaki obrałem. Kod nadajnika jak najbardziej mogę wstawić jeśli jest ktoś zainteresowany.

    Kod pochodzi z układów firmy Holtek i generowany jest układem PT2262, wysyła on max 12 rozkazów "przycisków"

    Chcę zastąpić dekoder sprzętowy PT2272 AVRem

    Pilota bez problemu zastępuje atmega8 i wyższe

    Graficzny dekoder pilotów IR [AVR -> PC] sprawdź pilota
  • #108
    cbool10
    Level 14  
    Ja mam pytanie trochę z innej beczki ale zahaczające o ten temat.
    Czy wykorzystując informacje z tej strony lub z tego dekodera można stworzyć plik *.ir do irremote?
  • #109
    fratello
    Level 10  
    Great job, Mr.Mirek !
    I,m looking for long time an device for reading one JVC remote controller ...I try with WinLirc, IR-Scope, tfla ...but never the codes reading don't "fx". Now I will try Your hw/sw !
    Please, can You post how making setting for fuses & bytes on programming Atmega8 ? Thanks in advance !
  • #110
    mirekk36
    Level 42  
    fratello wrote:
    You post how making setting for fuses & bytes on programming Atmega8 ?


    As I wrote in my first post, we use:

    1. F_CPU for - Int.Rc Oscillator 8MHz
    2. RS232 baud rate = 38400 bps

    so Fuses for ATmega8 should be set as on picture below:

    Graficzny dekoder pilotów IR [AVR -> PC] sprawdź pilota Graficzny dekoder pilotów IR [AVR -> PC] sprawdź pilota

    of course you can use for free this program MkAvrCalculator Link, and set fusebytes in very comfortable way ;)
  • #111
    fratello
    Level 10  
    You are a Gentleman ! Thank You so much !

    Dodano po 52 [minuty]:

    Based on my previous experiences with Atmega8 ( building this schematic : http://www.mikrocontroller.net/articles/AVR-Transistortester ) , when I discover the internal oscillator of Atmega it's not so accurate (and ALL the measurement who need time-base are inaccurate too) ....
    I wonder if it's not an good ideea to use external quartz ?! And modify, of course, the source ?
  • #112
    mirekk36
    Level 42  
    fratello wrote:

    Based on my previous experiences with Atmega8 ( building this schematic : http://www.mikrocontroller.net/articles/AVR-Transistortester ) , when I discover the internal oscillator of Atmega it's not so accurate (and ALL the measurement who need time-base are inaccurate too) ....
    I wonder if it's not an good ideea to use external quartz ?! And modify, of course, the source ?


    Believe me please, internal oscillator is not accurate but not in all cases. Besides you have still OSCCAL register, and you can correct F_CPU even if you are using UART and other time based transmissions. Just do it, and check ;) If you will have next questions, write me, please.

    I deal with infrared for many years, and I assure you that in these cases, you can safely use the internal oscillator 8MHz ;)
  • #113
    fratello
    Level 10  
    Ok ! I trust you ! Thanks again ! Regards !
  • #114
    cbool10
    Level 14  
    cbool10 wrote:
    Ja mam pytanie trochę z innej beczki ale zahaczające o ten temat.
    Czy wykorzystując informacje z tej strony lub z tego dekodera można stworzyć plik *.ir do irremote?


    Ma ktoś jakiś pomysł?
  • #115
    cbool10
    Level 14  
    To da radę coś takiego zrobić czy nie
  • #117
    Halkilor
    Level 15  
    Czy możliwe jest opisanie formatu w jakim należy do tego programu posyłać dane po COMie?
  • #118
    steter
    Level 9  
    Witam, bardzo ciekawy program, ale nie działa link do pobrania wsadu, czy można by go odświeżyć?
    Z góry dzięki.
    Pozdrawiam.
  • #119
    Morcinek92
    Level 14  
    Jak kolega wyżej, czy można odświeżyć LINK do pobrania
  • #120
    fratello
    Level 10  
    Mr. Mirekk, I am in trouble ... Please, help, I dont know what else to do.
    1.I build the receiver ; all hardware is check and re-check ; solid 5 Volts.
    2.I use 2 different Atmega8-16PU , programmed as You say (E4 ; D9), with PonyProg (no error, verifying OK).
    3.I use 2 different TSOP 1136.
    4.I use 2 different USB to serial adapter !
    5.I use even a simple serial adapter (see foto).
    6.I made the correct setting of COM(s) port - COM1 (default,hw), COM10 and COM11 (with USB to serial adapter) : 38400,8,None,1,None.
    COM1 port work fine, I've tested with serial PIC programmer ; the adapters works fine too!

    But ... I have nothing on screen (MkDekoder) !!! What can I do /check ?!
    Please, HELP ME ! Thanks in advance !


    Graficzny dekoder pilotów IR [AVR -> PC] sprawdź pilota

    Dodano po 5 [godziny] 11 [minuty]:

    I put an LED from pin 3 of Atmega8 (with R=1k) to ground. It's always ON, but if I push one remote button, can see the "pulses" on this LED ... But on PC still not have any "sign" :( ...