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

[Bascom] Attiny2313 - odbiór RC5 w przerwaniu - PWM

maximus22_kr 25 Kwi 2012 23:22 2615 9
REKLAMA
  • #1 10833493
    maximus22_kr
    Poziom 18  
    Witam
    Mam taki mały program sterujący dwoma sekcjami LED.
    Kod: text
    Zaloguj się, aby zobaczyć kod


    Jeśli chodzi o odbiór RC5 to jest OK, podobnie zwiększanie/zmniejszanie PWM.

    Natomiast problem jest włączeniem/wyłączeniem.
    Przytrzymanie przycisku pilota, podobnie jak przytrzymanie przycisku w układzie procesora powoduje naprzemienne włączanie i wyłączanie LED. Czyli czasem trudno się "wstrzelić" zwłaszcza jeśli chodzi o sterowanie przez RC5.

    Co robię nie tak jeśli chodzi o kod ?
  • REKLAMA
  • #2 10833674
    mickpr
    Poziom 39  
    Po odebraniu i wykonaniu rozkazu wstaw przerwę (sekundę???)...(dobrze myślę?)
  • REKLAMA
  • #3 10834122
    Konto nie istnieje
    Konto nie istnieje  
  • #4 10836808
    maximus22_kr
    Poziom 18  
    Kolego Saabotaz
    Pomysł ciekawy, ale co w sytuacji gdy:
    włączamy LED
    po np 5 minutach wyłączmy
    w międzyczasie nic innego nie wciskałem
    włączanie i wyłączanie odbywa się tym samym przyciskiem

    wtedy chyba nie uda się wyłączyć, bo w tej dodatkowej zmiennej będzie taki sam numer komendy jak w odebranej za drugim razem - chyba, że ja coś źle rozumiem.
    Do tego dochodzą zakłócenia od żarówek - dzisiaj się o tym przekonałem.
    LCD odczytał poprawnie kod, a po włączeniu i wyłączeniu żarówki energooszczędnej mam kod 127.

    Dodano po 23 [minuty]:

    Jeszcze jeden problem.
    W powyższym kodzie jest instrukcji Cls. Jest ponieważ początkowo testowałem z LCD. Jej usunięcie zmniejsza rozmiar kodu, ale powoduje, że układ w ogóle przestaje działać. W Helpie Bascom, piszą, że służy do czyszczenia ekranu LCD, do niczego innego.
    Więc czemu jej brak wpływa na działanie programu ? A właściwie na całkowity brak reakcji - również na zwarcie wejścia Attiny2313. Po zaprogramowaniu wszystkie LEDy świecą cały czas.
  • #5 10837137
    piotrva
    VIP Zasłużony dla elektroda
    Zainteresuj się czymś takim jak toggle bit - zmienia się on tylko w przypadku ponownego wciśnięcia klawisza w pilocie - jeśli klawisz jest przytrzymany to toggle bit się nie zmienia - telewizory i inne urządzenia RC5 właśnie ten element standardu wykorzystują do rozpoznawania ponownego wciśnięcia i/lub przytrzymania klawisza. Wystarczy zapamiętać poprzednią wartość toggle bit i wykonywać działanie tylko wtedy gdy odebrana wartość jest inna od zapamiętanej.
  • #6 10837294
    mickpr
    Poziom 39  
    Saabotaz napisał:
    mickpr - zły pomysł bo będzie mu blokowąło program

    A kto mówił, żeby przerwa była typu "waitms/delay".
    Przerwa może być zrealizowana jako flaga blokująca odczyt RC5 przez określony czas - a pętla odbierająca zdarzenia może chodzić cały czas z pełną prędkością wykonując inne zdarzenia.

    Zaletą "mojego" rozwiązania jest to, że regulując ten czas można zrobić autopowtarzanie - tak istotne przy np rozjaśnianiu/zmianie głośności itp.
  • REKLAMA
  • #7 10839742
    maximus22_kr
    Poziom 18  
    Zastosowałem się do rad Kolegi Saabotaz i Piotrva.

    Kod wygląda tak:
    Kod: text
    Zaloguj się, aby zobaczyć kod


    Czy któryś z Kolegów mógłby wyjaśnić, dlaczego usunięcie instrukcji Cls powoduje, że procesor w ogóle nie pracuje - tzn nie reaguje na RC5 ani na zwieranie wejść ? Wolałbym nie używać Cls, bo jego brak oszczędza 13% miejsca pamięci programu
  • #8 10839795
    Mundi1970
    Poziom 24  
    O temat już był przerabiany :), zapoznaj się z wątkiem Link.

    EDIT: Zauważ że w obsłudze przerwaniu jest włączane przerwanie, więc hardwarowy stos powinien być odpowiednio duży.
  • REKLAMA
  • #9 10841355
    Konto nie istnieje
    Konto nie istnieje  
  • #10 10842677
    maximus22_kr
    Poziom 18  
    Problemem okazał się brak konfiguracji wyjść PWM1a i PWM1b
REKLAMA