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

Attiny2313, pilot i sterowanie trzech odbiorników.

MatiZ 13 Jul 2009 15:27 2779 27
NDN
  • #1
    MatiZ
    Level 15  
    Witam serdecznie drogich kolegów. Piszę tego posta bo mam poważny problem...
    Mianowicie, potrzebuję zrobić prosty sterownik w oparciu o uC AT2313, który po otrzymaniu sygnału z pilota w odpowiedniej kolejności załącza trzy urządzenia, po otrzymaniu kolejnego sygnału wyłącza je w odwrotnej kolejności. Niby proste, ale cały temat ma drugie dno. Pilot wyposażony jest w jeden przycisk, po jego naciśnięciu wysyła impulsy w podczerwieni o częstotliwości 750Hz. Nie ma możliwości modyfikacji tego pilota.
    Problem pojawia się w momencie współpracy pilota z uC. Zbudowałem prosty układ z fototranzystora i i tranzystora wzmacniającego impulsy z niego. Całość podłączyłem do portu uC w ten sposób ze pojawienie się impulsu podczerwieni na fototranzystorze wywołuje stan niski na porcie.
    Całość komplikuje się z momencie w którym muszę napisać program który będzie reagował tylko na impulsy z pilota, a nie na ciągły sygnał z podczerwieni jaki może się pojawić przypadkowo np. zapalenie żarówki.

    W tym momencie dodam ze wszystko co napisałem do tej pory działało w ten sposób ze załączało urządzenia w momencie wystąpienia stanu niskiego na porcie. niby działało poprawnie, ale układ reagował np. na zaświecenie żarówki.

    Drodzy koledzy. Bardzo proszę o pomoc w napisaniu prostego programu. Zależy mi najbardziej na tym aby ktoś mnie pokierował, w jaki sposób napisać program który będzie w stanie reagować tylko na impulsy z pilota a nie na inne źródła podczerwieni jak np. żarówka.
    Krótko mówiąc aby program reagował na krótkie impulsy w krótkim odstępie czasu (750Hz) a nie na długi impuls jakim jest np zapalenie żarówki.

    Z góry serdecznie dziękuję i pozdrawiam. Mateusz Bartkowicz


    Poprawiłem temat. Regulamin - 11.1, proszę o tym pamiętać na przyszłość. [c_p]
  • NDN
  • #3
    manekinen
    Level 29  
    W czym problem? Po pojawieniu się pierwszego stanu niskiego zacznij zliczać impulsy (kolejne stany niskie), np przez 1/10 sekundy, i jeśli będzie ich około 75 to znaczy że nadaje pilot. Włókno mimo tego że będzie się rozjaśniać 100 razy na sekundę (10 razy na 1/10 sekundy (dla 50Hz sieci)) to ma dużą bezwładność więc układ i tak nic nie naliczy, odbierze sygnał ciągły.
  • #4
    kuuczoo
    Level 26  
    Co do rozwiązań elektronicznych się nie wypowiem, ale jeśli chodzi o program to można to załatwić łopatologicznie:
    1- po odczytaniu stanu niskiego czekasz 1/4 okresu (0.25 *1/750) i badasz czy jest 0 jeśli nie, to nic, jeśli tak, to...
    2- czekasz pół okresu i badasz czy jest stan 1 na wejściu, jeśli nie, to koniec, jeśli tak, to...
    3- czekasz pół okresu i badasz czy jest stan 0 na wejściu, jeśli nie to koniec, jeśli tak to...

    kroki 2 i 3 możesz powtórzyć z 10 razy dla pewności, jeśli przejdzie to znaczy że zadziałał pilot, jeśli nie, to znaczy że to coś innego.

    Można też załatwić to na kombinowanego:
    - fototranzystor podpinasz na RX,
    - ustawiasz bitrate na niestandardowy 1500...
    - i tu musisz chwile pomyśleć, tzn sprawdzić jaki pierwszy bajt dostaniesz w taki sposób, po otrzymaniu tego bajtu wyłączasz odbiornik UART i robisz co masz zrobić, potem znowu włączasz i czekasz na konkretny znak

    Nie jestem do końca pewien czy to się sprawdzi, ale spróbować możesz...
  • #5
    MatiZ
    Level 15  
    Kolego manekinen pomysł jest dobry, ja tez wymyśliłem coś podobnego.... szkopuł w tym ze nie potrafię sobie z tym poradzić praktycznie (program)

    Byłbym naprawdę wdzięczny za jakieś przykładowe fragmenty kodu.

    Dodam ze jestem w programowaniu początkujący, więc każda pomoc jest mile widziana. Z góry serdecznie dziękuję
  • #6
    janbernat
    Level 38  
    "Co do rozwiązań elektronicznych się nie wypowiem..."
    Jak żarówka świeci wystarczająco mocno to fototranzystor wejdzie w stan nasycenia i wtedy d... blada.
    Na nic nie reaguje.
    Podobnie jak na niego zaświeci słoneczko.
    Jedyne rozwiązanie- fototranzystor umieścić poza zasięgiem żarówki i słoneczka(w jakiejś rurce np.).
  • NDN
  • #7
    mirekk36
    Level 42  
    MatiZ --> a cóż to za kosmiczny pilot ??? który jak piszesz wysyła tylko impulsy 750Hz ???

    żeby coś ci pomóc to najpierw odpowiedz dokładnie na kilka pytań?

    1. skąd wiesz, że ten pilot nadaje jakieś tylko 750Hz ??? jesteś pewien, że w tym sygnale nie ma żadnej nośnej np 36-40kHz a te twoje 750Hz to tylko modulacja nośnej ???

    2. podglądałeś chociaż dobrym oscylem to co on nadaje??? czy ten sygnał o którym piszesz 750 Hz to ciągły sygnał bez żadnej przerwy w czasie gdy wciśnięty jest klawisz pilota?? czy jednak są to jakby paczki szpilek??? jakie jest wypełnienie szpilek - każdej takie samo???

    3. Masz jakąś specyfikację tego pilota? nazwę? typ?? Zaglądałeś na stronkę:

    http://lirc.sourceforge.net/remotes/

    żeby sprawdzić tam to swoje cudo ???

    .........................

    coś mi się nie chce wierzyć , że to jakiś pilot z kosmosu, który nie generuje nośnej , która następnie jest modulowana (to jest najbardziej prawdopodobne z tego co opisujesz)

    jeśli jest tak jak myślę - to pierwszym krokiem do rozwiązania twoich problemów z żarówą, świetlówą czy słońcem jest - scalony odbiornik podczerwieni - w ciemno możesz kupić TFMS 5360 (na 36kHz) i to jego (ale zgodnie z notą aplikacyjną) podłącz do procka.

    sprawdź na jakimś lepszym oscylu dokładny przebieg z tego pilota albo znajdź go na tej stronce, którą podałem wyżej - tam będziesz miał dokładne parametry tego co on nadaje i jak nadaje.

    potem to już tylko zrobienie typowego odbiornika kodów z pilota IR na procku ;)

    (albo napisz/opisz tu dokładnie co to za pilot) bo tak? to nakombinujesz się jak koń pod górę a i tak nic sensownego nie zrobisz idąc tą drogą swoich 750Hz. )

    No! - chyba, że jesteś nie na 100 ale na 1000% pewien, że wiesz co piszesz i robisz - i nie jednego pilota już obcykałeś? to wtedy - jeśli ja się mylę - to pomyślimy co zrobić z tym twoim ;)
  • #8
    MatiZ
    Level 15  
    mirekk36 ------>> Pilot jest "no name", nie mam pojęcia od czego był, ma tylko jeden przycisk. NA pilocie nie ma żadnych informacji o producencie, typie. Nic. Zero jakichkolwiek oznaczeń, ani napisów. Mała czarna obudowa z jednym dużym przyciskiem. Po jego wciśnięciu załączany jest prosty generatorek na dwóch tranzystorach, trzech rezystorach i kondensatorze, który generuje przebieg prostokątny o częstotliwości 758,7Hz i wypełnieniu ok.23% Wartości te są zmierzone oscyloskopem cyfrowym, z diody podczerwieni. Pomiar przebiegu odebranego przez fototranzystor odpowiada również przebiegowi który wyżej opisałem.

    Gdyby to był standardowy pilot na np. 36-38kHz nadający np. RC5 to bez problemu opisany przez Ciebie układ odbiornika by działał, a ja napisał bym sobie program również bez większych problemów.

    Bardzo proszę o jakąkolwiek pomoc w napisaniu programu który będzie prawidłowo reagował tylko na sygnał z tego nieszczęsnego pilota a nie na np. światło żarówki.

    P.S. Jeśli może to coś pomóc to mogę dołączyć schemat pilota i oscylogram przebiegu.
  • #9
    kuuczoo
    Level 26  
    Nie wiem jak bardzo masz parcie na to aby zastosować tego pilota, ale czy nie prościej i lepiej byłoby nawet zbudować sobie małego pilota na jakimś atiny i nie męczyć się z tym noname bez gwarancji powodzenia ?
  • #10
    MatiZ
    Level 15  
    Jest to jakieś wyjście, ale zależy mi bardzo na zastosowaniu tego pilota. Przeróbka jest raczej mało możliwa ze względu na bardzo mała ilość miejsca w obudowie tego pilota. Myślę ze jest możliwe napisanie programu który będzie w stanie rozpoznawać impulsy z pilota i tylko na nie reagować. Idea jest dość prosta, żeby program reagował tylko na impulsy o częstotliwości ok. 750Hz, a nie reagował na inne częstotliwości, szczególnie na niższe, bo na pewno będą to zakłócenia.
  • #11
    mirekk36
    Level 42  
    MatiZ --> no ok - w takim razie takie dokładne pomiary oscylem cyfrowym to już coś. Rzeczywiście pilot - dziwoląg ale .....

    skoro masz dokładną częstotliwość i nawet współczynnik wypełnienia udaje się dokładnie określić to:

    1. trzeba w procku zrobić procedurę odbioru powiedzmy .. np 64 bitów. Jeden bit to będzie jeden okres tego przebiegu

    2. procedura ta powinna działać na przerwaniach - np wejście ICP Timera1 w procku. W przerwaniu mierzysz dokładnie timerem czas każdej połówki. Czasy każdej połówki jakie trzeba odmierzyć określasz na podstawie częstotliwości oraz współczynnika wypełnienia plus-minus jakaś tam tolerancja. Można tak z grubsza powiedzieć, że procedura odbioru tego będzie podobna do procedury odbioru RC5 - tyle, że tu nie będzie żadnych bitów startu, toggle, command czy address.

    ustawiasz sobie wartość jakiejś 32bitowej zmiennej - mogą być dwie - taki sztuczny command i address każdy po 32 bity.

    Procedura musi zaczynać się w celu eliminacji błędów próbą rozpoznania długości długości pierwszej połówki. Jeśli nie jest taka jak trzeba - np za krótka albo za długa - to wyjście i błąd - podobnie w czasie badania każdej połówki okresu. Jeśli po drodze coś nie tak - to zerujesz odbierane słowo, podówjne słowo czy jak tam zrobisz i od nowa (w ten sposób już eliminujesz proste zakłócenia w postaci włączenia czy wyłączenia światła) - gorzej przy włączaniu świetlówki bo ona może generować dłuższy ciąg - no ale nigdy nie będzie to równo 64 okresy o danym współczynniku wypełnienia)

    tak więc - gdy odbierzesz ten sztuczny command i address - razem ze 64bity - a przy okazji procedura cały czas nadzoruje (bada) czy są odpowiednie długości połówek - to raczej jesteś w pełni uodporniony na dziwne zakłócenia.

    oczywiście nie muszą to być aż 64 bity - można spróbować o wiele mniej - no ale to już kwestia prób - ile badać żeby jak najlepiej uodpornić się na ew błędy.
  • #12
    MatiZ
    Level 15  
    mirekk36-->> Powiem Ci ze to co piszesz wygląda na prawdę sensownie i dobrze, ale jest jeden problem. Mianowicie mój poziom wtajemniczenia w programowanie AVR'ów nie pozwala mi na napisane tego samodzielnie. Byłbym Ci wdzięczny za głębsza pomoc. Np fragmenty kodu. Z góry serdecznie dziękuję.
  • #13
    mirekk36
    Level 42  
    MatiZ --> ja w Bascomie już hmm jakby dawno nie piszę - teraz głównie w C a szczególnie takie rzeczy. Proponuję poczytaj sobie temat:

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

    i rzeczywiście spróbuj może sobie po prostu zrobić własnego małego pilocika. Przecież można go zrobić nawet w Bascomie bo tam masz gotowe procedury do tego - jak rc5send czy sendrc5 - więc nawet nie będziesz się musiał zastanawiać i oprogramowywać zarówno części nadawczej jak i odbiorczej. W nadajniku - czyli swoim pilocie użyjesz rc5send a w odbiorniku Getrc5 i masz problem jakby z głowy

    oczywiście - większym problemem bywa zwykle uzyskanie takiego efektu jak w podanym linku aby pilocik w stanie spoczynku pobierał mikroAmpery, żeby bateria wystarczyła na baaardzo długo

    jednak jeśli z tym nie będziesz mógł sobie poradzić to wtedy - możemy się dogadać odnośnie wsadu do ATtiny2313 czy tam procka z wgranym wsadem - i sobie już od strony elektronicznej przecież zrobisz takiego pilocika - wg opisu z tego linka

    ..... no chyba, że musisz tylko i wyłącznie tego pilota używać - to wtedy - pozostaje niestety tylko zagłębienie się jednak co nieco w tajniki programowania IR - bo bez tego ani rusz - na podstawie nawet kwałka, napisanego przez kogoś do tak nietypowego pilota, kodu - mało sam dalej zdziałasz

    a w gruncie rzeczy cała tematyka nie jest taka ciężka ;) na prawdę i miło się w niej grzebie
  • #14
    MatiZ
    Level 15  
    Jest to do zrobienia, ale jak już mówiłem, szczególnie mi zależy mi na zachowaniu tego pilota w formie nie zmienionej. Głównie ze względu że to co już zrobiłem działa, tylko trzeba programowo zrobić zabezpieczenie żeby program reagował na zmieniające się szybko impulsy (750Hz) a nie na powolne impulsy jakim np. jest zapalnie żarówki czy światło słoneczne.
  • #15
    mirekk36
    Level 42  
    MatiZ ---> ok, no to poszukaj gdzieś w necie przykładów w bascomie jak wykorzystywać wejście ICP i jak mierzyć odczinki czasu, albo przykłady odbiorników RC5 (choć to może być trudne bo kto by robił od podstaw RC5 w Bascomie skoro to jest wbudowane) - ale nawet na mcselec.com są chyba przykładowe procedury do odbierania kodów SONY zrobione w czystym bascomie

    trza się z tym niestety próbować oswoić, zaznajomić - popróbować - na pewno coś ci wyjdzie - ogólnie wiesz już jaką drogą iść
  • #16
    MatiZ
    Level 15  
    Mam pewien pomysł bardzo prosty ale...
    jak by sprawdzić stan portu i jeśli jest stan niski (pojawił się sygnał IR), po czym odczekać chwilę i sprawdzić ponownie stan jeśli jest wysoki (sygnał ustąpił) to wykonać instrukcje załączenia, jeśli dalej jest niski, czyli IR dalej jest, co by świadczyło np. o zapalonej żarówce, to program wróci do początku.
    Pomysł banalny, ale ma szanse działać. Problem tylko jak w bascomie wywołać powrót do początku na zasadzie:

    If IR=0 then
    waitms 10
    if IR=0 then
    (tu pasuje jakaś instrukcja powrotu do początku)
    else
    instrukcje załączenia



    CO o tym myślicie ?
  • #17
    mirekk36
    Level 42  
    MatiZ wrote:
    Mam pewien pomysł bardzo prosty ale...
    jak by sprawdzić stan portu i jeśli jest stan niski (pojawił się sygnał IR), po czym odczekać chwilę i sprawdzić ponownie stan jeśli jest wysoki (sygnał ustąpił) to wykonać instrukcje załączenia, jeśli dalej jest niski, czyli IR dalej jest, co by świadczyło np. o zapalonej żarówce, to program wróci do początku.
    Pomysł banalny, ale ma szanse działać. Problem tylko jak w bascomie wywołać powrót do początku na zasadzie:

    If IR=0 then
    waitms 10
    if IR=0 then
    (tu pasuje jakaś instrukcja powrotu do początku)
    else
    instrukcje załączenia



    CO o tym myślicie ?


    łooo matko bosko - a co to znaczy dla ciebie "poczkać chwilę" ??? ;)


    cóż to za sposób???? - zakładając nawet, że jakoś zdefiniujesz tę swoją chwilę - niech ona trwa X czasu - to skoro nadawany sygnał naprzemian daje ci raz stan niski raz wysoki - to skąd będziesz wiedział, że akurat stan wysoki to twoja żarówka albo że to kolejny stan wysoki nadawanej częstotliwości 750Hz ???? to raczej - sorry - ale bardzo straszny sposób ;)

    .......... jeśli zamierzasz rozpatrywać pojawienie się jednego stanu niskiego jako syganłu IR - to zapomnij o sukcesie swojej misji. Przecież twój sygnał z pilota to bardzo długi ciąg ZER i JEDYNEK w całym czasie gdy wciśnięty jest klawisz pilota - o czym więc ty myślisz ?
  • #18
    MatiZ
    Level 15  
    Dobra, może trochę mnie poniosło. Na razie napisałem program który załącza moje urządzonka w momencie zmiany stanu to znaczy pojawiania sie stanu niskiego (IR) a następnie stanu wysokiego (brak IR). Działa prawie dobrze....:) prawie.... jak zapalę żarówkę to nie reaguje. Zareaguje dopiero jak ją wyłączę. Czyli może warto to udoskonalić w ten sposób zeby on nie czekał na pojawienie sie stanu wysokiego (brak IR) w nieskończoność, tylko jesli nie pojawi się on w ciągu np. 10ms to wróci do początku programu...
  • #19
    mirekk36
    Level 42  
    MatiZ --> przy takim sposobie - prawie wszystko dookoła będzie ci włączało lub wyłączało twoje urządzenia ;)

    mówiąc wszystko mam na myśli np świetlówkę - ta to dopiero da popalić twojemu układowi - jak wygeneruje w trakcie zapalania ciąg ;)

    .... żarówka - jeśli przy włączaniu czasem nastąpi iskrzenie styków we włączniku 220V i żarówa w niezauważalny sposób dla twojego oka sobie pomruga - to już twój układ zaświruje na maxa

    .... inne źródła światła - silne - np słońce czy ciągle świecąca żarówa - machnij kilka razy szybko ręką przed swoim detektorem - a już będziesz bez użycia pilota mógł włączać lub wyłączać swoje urządzenia
  • #20
    MatiZ
    Level 15  
    Dlatego wspomniałem o 10ms opóźnienia między jednym sprawdzeniem a drugim....ani żarówka ani nic innego poza pilotem nie będzie w stanie "mignąć" tak szybko......
  • #22
    MatiZ
    Level 15  
    Męczę ten program, męczę i jak bym tego nie ruszył efekt taki sam, więc wpadłem na kolejny pomysł (już wcześniej sugerowany). Otóż jak by usunąć ten generator z pilota, w jego miejsce włożyć ATtiny15L i wgrać prosty program np:
     
    ...
    Dim togbit as byte, command as byte, adress as byte
    do
    Rc5:
    command =12
    togbit=0
    adres=0
    Rc5send togbit, adress, command
    loop
    


    Układ w celu oszczędzania baterii działał by w ten sposób ze switch w pilocie załączał by zasilanie procka. W momencie jak proc otrzyma zasilanie zacznie wysyłać ten sam kod.

    A układ odbiorczy działał by na komendzie getrc5

    Co koledzy na to?
  • Helpful post
    #23
    mirekk36
    Level 42  
    jedyny słuszny sposób w twoim przypadku, jeśli jeszcze na razie nie potrafisz sam obsłużyć protokołu IR

    od czegoś trzeba zacząć - w miarę potrzeb - przyjdzie doświadczenie po wielu różnych próbach

    .... a ten sposób o którym już nie tylko ja wspominałem - na pewno bardziej ci się sprawdzi i będzie działał niezawodnie

    więc do dzieła ;)
  • #24
    MatiZ
    Level 15  
    Masz rację kolego.... powinienem był to od razu zrobić... na razie z tego co podsumowałem to same plusy z takiego rozwiązania będą. Jedyne czego się boję to tego ze procek według datasheet'u potrzebuje co najmniej 2,7V do poprawnej pracy, a aku z pilota ma 2,4V, nie wiem jak to będzie chciało pracować
  • #25
    janbernat
    Level 38  
    https://www.elektroda.pl/rtvforum/topic281553.html
    Ale żarówka też daje IR.
    W telewizorach przed diodą IR jest zwykle kawałek plastiku.
    Może to jest ten filtr?
    A może na odbiorniku?
    Trzeba sprawdzić widmo światła żarówki.
    Ostatecznie w oświetlonym żarówkami pokoju pilot do telewizora zwykle działa.
    A fototranzystor silnie oświetlony się nasyca i nic nie pomoże żadna modulacja.
  • #26
    MatiZ
    Level 15  
    Quote:
    https://www.elektroda.pl/rtvforum/topic281553.html


    Tam jest mowa o filtrze IR.. mi taki filtr nic nie pomoże , bo źródło zakłóceń jakim jest np żarówka emituje więcej IR niż pasma widzialnego, więc zastosowanie filtra nic mi nie da.
  • #27
    janbernat
    Level 38  
    No ale telewizor chodzi...
    Może w dziale RTV wiedzą więcej.
  • #28
    MatiZ
    Level 15  
    Odbiornik IR w OTV działa na innej zasadzie niż układ który planowałem zrobić. Pomysł już zapadł więc temat uważam za zamknięty.
    Szczególne podziękowania dla kolegi mirekk36 za odświeżenie mi umysłu. Klikam na "pomógł" Dziękuję i pozdrawiam.