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

Pilot RC-5 niekontaktuje lub nadaje 2 naraz

Gorandi 13 Maj 2012 18:39 1398 9
  • #1 10892581
    Gorandi
    Poziom 9  
    Witam napisałem taki oto pilot
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Pilot RC-5 niekontaktuje lub nadaje 2 naraz
    i mam problem z przyciskami tzn. nie zawsze działają plus czasami gdy wcisne prawo to generuje sie prawo i odrazu lewo licze na konstruktywną pomoc
  • Pomocny post
    #2 10893779
    dejmos
    Poziom 23  
    Na schemacie wielu rzeczy brakuje mianowicie:
    1. Wszystkie piny GND procesora powinny być podłączone do masy
    2. Wszystkie piny Vcc, Vref oraz AVcc powinny być podłączone do Vcc chyba że wykorzystujemy je do czegoś innego.
    3. Wejścia INT0 i INT1 powinny byś podciągnięte rezystorami np 4k7 do Vcc.
    4. Wejście Reset powinno być podciągnięte do Vcc rezystorem np 10k.
    5. Między Vcc a Gnd należy dać kondensator 100nF jak najbliżej wyjść procesora.
    6. Należy zbocznikować małymi kondensatorami przyciski w celu eliminacj drgań styków, lub rozwiązać to programowo.
    Wprowadzenie tego powinno pomóc. Jest to podstawa przy konstruowaniu urządzeń na procesorach AVR.

    I proponuję dopisać coś takiego. Nie wiem czy pomoże ale zawsze można spróbować:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #3 10893985
    mirekk36
    Poziom 42  
    dejmos napisał:
    Na schemacie wielu rzeczy brakuje mianowicie:
    1. Wszystkie piny GND procesora powinny być podłączone do masy
    2. Wszystkie piny Vcc, Vref oraz AVcc powinny być podłączone do Vcc chyba że wykorzystujemy je do czegoś innego.
    3. Wejścia INT0 i INT1 powinny byś podciągnięte rezystorami np 4k7 do Vcc.
    4. Wejście Reset powinno być podciągnięte do Vcc rezystorem np 10k.
    5. Między Vcc a Gnd należy dać kondensator 100nF jak najbliżej wyjść procesora.
    6. Należy zbocznikować małymi kondensatorami przyciski w celu eliminacj drgań styków, lub rozwiązać to programowo.
    Wprowadzenie tego powinno pomóc. Jest to podstawa przy konstruowaniu urządzeń na procesorach AVR.


    Święta racja - i od tego radzę autorowi także zacząć - ale też doczytać co to może powodować - gdy tak się projektuje: Link
  • #4 10894408
    dondu
    Moderator na urlopie...
    dejmos napisał:
    2. Wszystkie piny Vcc, Vref oraz AVcc powinny być podłączone do Vcc chyba że wykorzystujemy je do czegoś innego.

    Do czego innego można wykorzystać Vcc i AVcc? :)


    dejmos napisał:
    3. Wejścia INT0 i INT1 powinny byś podciągnięte rezystorami np 4k7 do Vcc.

    Nie potrzeba zewnętrznego rezystora - wystarczy programowo włączyć wewnętrzny rezystor pull-up.



    dejmos napisał:
    4. Wejście Reset powinno być podciągnięte do Vcc rezystorem np 10k.

    ... a konkretnie z przedziału 4,7k - 10k



    dejmos napisał:
    5. Między Vcc a Gnd należy dać kondensator 100nF jak najbliżej wyjść procesora.

    ... a konkretnie to do każdej pary pinów Vcc i GND.


    dejmos napisał:
    6. Należy zbocznikować małymi kondensatorami przyciski w celu eliminacj drgań styków, lub rozwiązać to programowo.

    Odradzam stosowanie tak włączonych kondensatorów, by nie wprowadzać do układu źródła zakłóceń.
    Zrób programową eliminację drgań styków.

    Problem autora polega także na tym, że nie stosuje volatile do zmiennych używanych w przerwaniu i na zewnątrz funkcji przerwań.
  • #6 10894734
    dondu
    Moderator na urlopie...
    dejmos napisał:
    2. punkt powinien być inaczej sformułowany,
    3. tak, ale zewnętrzne rezystory nie zaszkodzą,
    4. dlatego napisałem "np",
    5. tak, dla każdej pary,
    6. kiedyś proponowano również kondensatory.
    Pozdrawiam.

    3. tylko po co je dawać skoro już się za nie zapłaciło kupując mikrokontroler, o miejsu na PCB już tylko wspomnę. Projekt ten nie działa w trudnym środowisku.
    4. np. to znaczy także rezystor 2,2k, a to już może powodować problemy z programowaniem, dlatego uściśliłem podając przedział.
    6. Nadal można stosować, ale trzeba wiedzieć jakie są tego konsekwencje i na to zwróciłem uwagę.

    Generalnie Twoje uwagi były prawidłowe, ja je tylko uściśliłem :)
  • #7 10895317
    Jakub
    Poziom 14  
    Kondensatory przy rezonatorze należy podłączyć do GND a nie do Vcc.
  • Pomocny post
    #8 10895514
    dondu
    Moderator na urlopie...
    Jakub napisał:
    Kondensatory przy rezonatorze należy podłączyć do GND a nie do Vcc.

    Oj, ale babol - przegapiłem go :)

    Dodam jeszcze, że to nadawanie 2 razy jest efektem drgań styków (jak się ich pozbyć podałem Ci link w poprzednim poście).
    Twoje przerwania długo trwają. Gdy styk drga, to wywoła pierwsze przerwanie, a po rozpoczęciu jego obsługi zerowana jest flaga przerwania. W tym czasie styki przycisku jeszcze drgają i flaga jest ponownie ustawiona. Po skończeniu obsługi przerwania, uC ponownie stwierdza, że flaga jest ustawiona więc realizuje przerwanie jeszcze raz.

    Najprostszym sposobem zabezpieczenia się przed tym jest zerowanie flagi wystąpienia przerwania na końcu funkcji jego obsługi:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Zwróć uwagę, że piszę o zerowaniu flagi, a w podanym kodzie wpisuję 1, a nie 0 - czy to nie dziwne? Owszem, ale to wyjątkowy system gaszenia flag poprzez wpisanie do nich wartości 1 - szczegóły znajdziesz tutaj: AVR: Czyhające pułapki


    Uwaga następna: stosujesz liczby zmienno przecinkowe w funkcjach opóźnienia:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    nigdy tego nie rób, a zamiast takich kombinacji wykorzystaj opóźnienia w mikrosekundach:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #10 10908400
    Gorandi
    Poziom 9  
    Wszyscy bardzo pomogli. Serdecznie dziękuje
    P.S.
    Karolo1001 nie pomógł
REKLAMA