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

[644p] [644p][BASCOM] - Jak odczytać sygnał RC6 bez bibliotek?

onliner 25 Gru 2012 17:17 2124 7
REKLAMA
  • #1 11694984
    onliner
    Poziom 10  
    Witam!
    Jako, że bascom nie posiada bibliotek do obsługi RC6, postanowiłem zrobić to programowo. Napisałem więc taki program:
    Kod: text
    Zaloguj się, aby zobaczyć kod

    No i co prawda program coś odbiera, ale niewątpliwie są to bzdury (dla dwóch przycisków potrafi odebrać dokładnie tą samą wartość).Przykład (wciskane przyciski od 1 do 9 na tym samym pilocie)
    Cytat:

    1100110001100011
    1100110001100111
    1100110001100000
    1100110001100010
    1100110001100010
    1100110001100001
    1100110001100011
    1100110001100111
    1100110001100000

    Mój mikrokontroler to atmega 644p, odbiornik IR TSOP4836 . Ciekawą sprawą jest też to, że pierwszy bit powinien trwać 2,66ms . Podczas gdy w programie, zmierzony timerem(timer1, prescaler 1), trwa 17 cykli procesora ( ~1ns )

    Z góry dziękuję za wszelkie uwagi i sugestie, pozdrawiam![/code]
  • REKLAMA
  • #2 11695100
    zumek
    Poziom 39  
    onliner napisał:
    ... ale niewątpliwie są to bzdury...

    Cóż, jaki program , taki wynik jego działania :|
    Moja podpowiedź wygląda tak: Waitms 1 = Waitus 1000


    PS
    Algorytmu nie analizowałem.
  • REKLAMA
  • #3 11696374
    onliner
    Poziom 10  
    Witam!
    Zmodyfikowałem trochę kod obsługi przerwania na poniższy:
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Poniżej zamieszczam obrazek ilustrujący w prosty sposób moje rozumowanie, może ktoś znajdzie błąd ? (oczywiście program zgłasza błąd prezentowany na fotce)
    [644p] [644p][BASCOM] - Jak odczytać sygnał RC6 bez bibliotek?
  • REKLAMA
  • Pomocny post
    #4 11701915
    WOBI
    Poziom 19  
    Nie zadeklarowałeś na jakie zbocze reaguje INT, czyli masz domyślne ustawienia procesora (rejestry są ustawione po resecie na domyślne). Jakie dane wystawia Twój odbiornik IR, czy w stanie spoczynku masz stan H czyli +5V? Jeśli tak to przerwanie powinno być tylko na zbocze opadające.

    Twój odbiornik ma stan wysoki jak nic nie odbiera, każdy wysłany bit z pilota to stan niski na wyjściu odbiornika. Twój kod jest nastawiony tak jak na rysunku, który narysowałeś, na stan wysoki gdy jest bit z pilota a gdy jest cisza (nic nie nadajesz pilotem) to wg rysunku jest stan niski. Czy juz wiesz dlaczego nie działa? Masz odwrócony sygnał, to co wymyśliłeś, to sugerowanie się tym co nadaje pilot według noty standardu RC6. Pamiętaj że odbiorniki IR odwracają (negują) sygnał. Tu masz troche teorii Strona o IR

    czyli Twój kod powinien wyglądać tak, Tylko pamiętaj że nie tędy droga!!!
    i poczytaj to co napisałem niżej

    Kod: text
    Zaloguj się, aby zobaczyć kod


    Tak się nie robi odczytu IR na pętli, każde zakłócenie włączy wykonywanie kodu (reakcję na INT), na odbiorniku IR pojawiają się impulsy od różnych innych źródeł podczerwieni, np żarówki, świetlówki itp. odbiornik reaguje też na zakłócenia elektromagnetyczne np. ktoś zaiskrzy włącznikiem sieciowy (zapali światło lub włączy inny urządzenie elektryczne) Tu masz gotowy przykład w tym poście poczytaj post z gotowcem do nauki
    Robisz na przerwaniu i mierzysz czas timerem, masz wtedy możliwość reakcji na zakłocenie i masz 100% pewności że program startuje od właściwego momentu transmisji IR z Twojego pilota.
    Twój program nie zawsze startuje od bitu START i nie masz pewności co odbierasz. W linku masz gotowy przykład programu.
  • #5 11701934
    piotrva
    VIP Zasłużony dla elektroda
    Dokładnie. Wykorzystaj Timer1 w trybie ICP, potem wykrywaj bity startu i dopiero na końcu zabieraj się za analizowanie danych.
  • #6 11702204
    BlueDraco
    Specjalista - Mikrokontrolery
    Stare przysłowie pszczół: żadnego oczekiwania w obsłudze przerwania!
    Mierz timerem czasy trwania stanów 0 i 1, jak to sugerują Koledzy. Testowanie programowe w przerwaniu timera zgłaszanym odpowiednio często jest na ogół bezpieczniejsze niż użycie trybu Capture.
  • REKLAMA
  • #7 11702271
    piotrva
    VIP Zasłużony dla elektroda
    BlueDraco napisał:
    Testowanie programowe w przerwaniu timera zgłaszanym odpowiednio często jest na ogół bezpieczniejsze niż użycie trybu Capture.

    Czy mógłbyś rozwinąć myśl i powiedzieć:
    1. Dlaczego bezpieczniejsze?
    2. Jakie inne zalety ma Twoje rozwiązanie?
  • #8 11707785
    onliner
    Poziom 10  
    Witam!
    Na początku, dziękuję za poświęcony czas. Problem udało mi się rozwiązać, okazał się błachy - żaden z pilotów (wbrew temu, co myślałem) nie nadawał w RC6 .. Tak więc temat do zamknięcia.
REKLAMA