Drabinka rezystorowa – czyli jak podłączyć wiele przycisków do jednego złącza

Drabinka rezystorowa – czyli jak podłączyć wiele przycisków do jednego złącza

Czy zadaliście sobie kiedyś pytanie: a co gdy będę robił jakiś większy projekt z dużą ilością przycisków i zabraknie mi złącz? Niedawno wkroczyłem w grono szczęśliwych posiadaczy płytki Arduino UNO i też zadałem sobie to pytanie. 13 wejść cyfrowych + 5 analogowych – zbyt dużo do tego nie podłączę, a gdybym chciał np. zrobić jakąś klawiaturkę jako kontroler MIDI powiedzmy na 2 oktawy to mamy już 24 przyciski + dodatkowo kilka funkcyjnych. I tu z pomocą przychodzi mały “patent”…

Drabinka rezystorowa to element zbudowany z kilku takich samych rezystorów. Możemy kupić je w gotowych obudowach, bądź zrobić samemu ze zwykłych oporników.

Zasada ich działania jest podobna do potencjometru, z tym, że zamiast kręcić pokrętłem, rezystancję zmieniamy podłączając się do kolejnych nóżek. Można by zadać pytanie – “Po co takie coś? Do czego to mi się przyda? Nie lepiej dać potencjometr – w nim mam płynną regulację?”  Otóż podłączając sygnał przez taką drabinkę (sterując przepływem odpowiednimi przyciskami) do wejścia analogowego możemy dzięki zmianom napięcia odczytać który przycisk wcisnęliśmy. W teorii można by podłączyć aż 1022(!) rezystory, jednak w praktyce ciężko byłoby to wykonać ze względu na tolerancję oraz chociażby zależność rezystancji od temperatury.

Przykład mój zaprezentuje na prostym układzie składającym się z diody i trzech przycisków. Po naciśnięciu pierwszego dioda zamiga raz, drugiego, dwa, i analogicznie dla trzeciego – trzy.

Na początek schemat podłączenia. (Już poprawny)

s1,s2,s3 – przyciski; p – potencometr; A0 – analogowe wejście nr 0; DIG4 – wyjście cyfrowe nr4; R – rezystory; LED – dioda led

Na początek napiszemy prosty program, dzięki któremu dowiemy się, jakie wartości są odczytywane gdy naciśniemy poszczególne przyciski.

kod

Ustawiamy potencjometr mniej więcej w połowie. Pozwoli nam to w przyszłości na ewentualną kalibrację.
Oczywiście możemy go równie dobrze pominąć. Odpalamy program i wciskamy po kolei przyciski.

Dzięki temu po wciśnięciu poszczególnych przycisków w SerialMonitorze uzyskamy coś takiego:

Dzięki tym danym możemy zabrać się za pisanie kolejnego kodu, tym razem już wykonującego jakąś czynność – czyli w tym wypadku miganie diodą.

Ze względu na to, że wartości zawsze będą miały jakąś małą granicę błędu, w warunkach zaznaczyłem, że wybieramy wartości z pomiędzy.

I to by było na tyle, program możemy modyfikować w zależności od naszych potrzeb (zmieniamy kod w warunkach if). Możemy też oczywiście dodać więcej przycisków,

dodajemy pary rezystor- przycisk oznaczone czerwonym prostokątem na pierwszym rysunku.

Miłej zabawy :)

wideo:

PS:Dobra, ze schematem były przeboje, ale dzięki Waszej interwencji wszystko powinno być już OK.

Ocena: 4.02/5 (głosów: 86)

Podobne posty

58 komentarzy do “Drabinka rezystorowa – czyli jak podłączyć wiele przycisków do jednego złącza

    • Autor miał na myśli rozdzielczość przetwornika ADC w AVR-kach. Niestety nie jest to prawda. Jak by nie zrobić takiego dzielnika, jeśli przełączników jest n to ilość kombinacji jest 2^n i tyle właśnie poziomów napięcia. Jeśli mają być odróżnialne od siebie dla mikrokontrlolera to w każdy fragment zakresu jego ADC musi wpadać dokładnie jedna wartość napięcia. Czyli dla rozdzielczości DAC 1024 mamy teoretycznie jedynie 8 przycisków. Teoretycznie również istnieje do tego drabinka, tyle, że inna, która wymaga od przycisku by przełączał masę i napięcie maksymalne. Zwykły przycisk zwierający styki to za mało, ale można to obejść wprowadzając mały błąd do idealnej drabinki. W praktyce jednak dochodzą szumy odczytu DAC, co oznacza, że liczba 8 jest teoretyczna. Przy pomocy filtrów programowych można podpiąć 6 przycisków co sprawdziłem. Może przy dokładnej drabince i 7 ale 8 to fikcja. Oczywiście daje to możliwość detekcji jednoczesnego wciśnięcia kilku przycisków w odróżnieniu od popularnych kombinacji z matrycami.

      Odpowiedz
  • Wybitnie bezsensowny sposob. Widac z reszta, nawet w tresci artykulu, ze trzeba jakies okraczne IFy na zakresy robic, bo nijak nie ma jednoznacznosci stanow. I to wciskajac kilkukrotnie w tych samych warunkach. A co, jak zmieni sie temperatura? Zapewne blad pomiaru wzrosnie.
    Dalej – przy seryjnej produkcji – to jeden rezystor bedzie mial 99,8Ohm, drugi 101,2 Ohm, a trzeci nominalne 100Ohm. Znowu czynnik wplywajacy na blad pomiaru.

    Dosyc standardowym sposobem multipleksowania przyciskow jest zbudowanie matrycy – wtedy wejsc jest co prawda koniecznych n*m, ale pozwala na jednoznaczna identyfikacje wcisnietego przycisku i jest niezalezna od humoru aury pogodowej i dostawcy czesci.

    Odpowiedz
    • Kolega jeszcze raz przeczyta artykuł bo autor ewidentnie wskazuje na problem ze zmianą temperatury i fakt, że “. . . a co gdy będę robił jakiś większy projekt z dużą ilością przycisków i zabraknie mi złącz? . . .” A “IFy” na zakresy i tak będą stosowane i tak ;] Nie ma rzeczy idealnych, a zabezpieczenia są potrzebne. Arduino ma po prostu “rozpoznać” przycisk zakładając, że rezystancja znajdzie się w ustalonym zakresie. A tak swoją drogą to matryce się stosuje i to z powodzeniem, natomiast kiedy już wejście nie ma służyć do obsługi przycisku, a np. do enkodera to aura pogodowa i nawet dostawca części Ci nie pomoże jak nie poradzisz sobie z zakłóceniami na złączach czy powszechnym szumem. A tu jest prosty przykład ćwiczenia i rozwoju z Arduino.

      Odpowiedz
  • witam, wystepowal u Ciebie ten drazniacy problem czyli efekt “Bounce” switcha ?? zrobilem, taki uklad – ogolnie dziala, no ale czasami musze po kilka razy kiknac…

    Odpowiedz
  • Arduino ma nie 13 tylko 14 złączy cyfrowych i 6 analogowych, poza tym złącza analogowe można wykorzystać jako cyfrowe, czyli mamy 20 złączy cyfrowych.
    Radzę się poduczyć z tematu AVRów, ponieważ Arduino, mimo, że ułatwia tworzenie układów nakłada też niektóre sztuczne ograniczenia, na przykład ATmega8 ma bodajże maksymalnie 23 piny do dowolnego korzystania(po przestawienia fusebitów i zastosowaniu wewnętrznego kwarcu) a Arduino Uno R3 (tylko) 14 cyfrowych i 6 wejsc analogowych.

    Odpowiedz
  • Nie jest to najlepsze rozwiązanie. Właśnie mam z tym problem w miniwieży JVC, gdzie panel przycisków rozwiązano w ten sposób. Okazało się, że z czasem styczniki przestały zwierać na zero omów i tym samym na wyjściu otrzymujemy sumę oporu przycisku i oporników z drabinki. Efektem tego jest błędna interpretacja przycisku.

    Odpowiedz

Odpowiedz

anuluj

Masz uwagi?