Mikrokontrolery - Jak zacząć?

... czyli zbiór praktycznej wiedzy dot. mikrokontrolerów.

czwartek, 3 marca 2011

EPP: Klawiatura gdy mało pinów


Autor: Dondu

23 września 2012r.

Zrozpaczony projektant:
O kurcze! Projekt się rozrósł i brakło mi pinów, by zrealizować wszystkie funkcjonalności. Przyjdzie mi zmienić mikrokontroler na większy i zarazem droższy!

Eee tam, zaraz większy, droższy ... trzeba ruszyć głową!


Rozwiązania zadania:
Prawie zawsze znajdzie się jakieś rozwiązanie, by nie trzeba było zmieniać mikrokontrolera i przerabiać części programu. Z reguły najprościej jest zaoszczędzić piny wykorzystane do przycisków.

I to jest właśnie następne zadanie z cyklu Efektywne Planowanie Projektu.


Cel:
Opracować dowolny sposób podłączenia jak największej ilości przycisków wraz z programem eliminującym skutki drgań styków. Oczywiście bez przesady :-), w każdym bądź razie więcej niż 4 przyciski.

W zakresie eliminacji drgań styków, możesz korzystać z rozwiązań zaprezentowanych w poprzednim odcinku EPP: Eliminacja drgań styków


Upominki

Jedno z nadesłanych rozwiązań zostanie nagrodzone przez wydawnictwo Helion dowolną książką z jego oferty, którą autor rozwiązania sobie wybierze :-)






Drugie z nadesłanych rozwiązań zostanie nagrodzone przez sklep


drobnym upominkiem (płytka stykowa wraz z przewodami). 

Kliknij zdjęcia, by poznać szczegóły.



Warunki:
  1. masz do wyboru 4 dowolne piny mikrokontrolera ATmega8, ale wśród tych czterech tylko jeden pin wejściowy przetwornika ADC,
  2. możesz wykorzystać dodatkowe elementów elektroniczne, ale ich łączna cena nie może przekroczyć 1zł netto (ceny przycisków nie bierzemy pod uwagę),
  3. możesz wykorzystać dowolny "bebech" znajdujący się w mikrokontrolerze,
  4. obsługa klawiatury ma działać "w tle", a zmienna globalna stan_przyciskow ma zawierać na bitach aktualny stan każdego z przycisków (stan pewny, czyli po eliminacji skutków drgań),
  5. dla uproszczenia przyjmujemy, że w danym momencie przyciśnięty będzie tylko jeden przycisk, ale możesz opracować rozwiązanie pozwalające na częściowe lub całkowite ominięcie tego ograniczenia,
  6. pozostałe określone dla całego cyklu EPP:  Efektywne Planowanie Projektu

Termin:
Termin nadsyłania rozwiązań do: 7 października 2012r. włącznie.

Chcę przesłać swoje rozwiązanie!
Wszelkie zasady znajdziesz tutaj: EPP: Zasady uczestnictwa i publikacji

Co oceniamy?
Przy wyborze będziemy zwracać uwagę przede wszystkim na jakość nadesłanego materiału, dokładność opisu, a w drugiej kolejności na sposób rozwiązania zadania.

Pytania
Jeżeli masz pytania dot. tego zadania, zadawaj je w tym temacie w formie komentarza, w ten sposób wszyscy będą mogli przeczytać pytanie i moją odpowiedź.

Dotychczasowi autorzy rozwiązań z cyklu EPP:
Listę autorów, którzy nadesłali swoje rozwiązania do któregoś z artykułów z cyklu EPP, możesz znaleźć tutaj: Autorzy rozwiązań 
Oceń artykuł.
Wasze opinie są dla nas ważne, gdyż pozwalają dopracować poszczególne artykuły.
Pozdrawiamy, Autorzy
Ten artykuł oceniam na:

24 komentarze:

  1. Witam. Widzę, że na razie nie ma żadnych rozwiązan tego zadania, więc podsyłam małą pomoc (rozwiązanie sprzętowe).

    http://files.myopera.com/robalstona/albums/11338032/malo_przyciskow.png

    Idea jest taka, żeby ustawić bit portu odpowiadającemu tej kolumnie w której bedziemy chcieli odczytać stan przycisku (np PB1) jako wyjście i ustawić go w stan wysoki, a pozostałe bity ustawiamy jako wejściowe bez wewnętrznych rezystorów podciągających (PB2, PB3). Następnie zczytujemy napięcie jakie zmierzy przetwornik ADC. Tym sposobem można określić które z przycisków w danej kolumnie są wciśnięte i ile jednocześnie. Właściwie to rozwiązanie to jest najprostszy przetwornik cyfrowo-analogowy, Przycisków w kolumnie może być więcej, byleby kolejne dodawane przyciski zwierały więkksza rezystancję od poprzedniej.

    Jedna uwaga:
    Wartość napięcia zasilającego mikrokontroler ma wpływ na wartość zczytana przez ADC, dla tych samych wciśniętych przycisków dla mikrokontrolera zasilanego napięciem 3,3V napięcie zczytane przez ADC bedzie inne niż przy zasilaniu go przez 5V

    OdpowiedzUsuń
  2. Faktycznie tym razem, nikt nie nadesłał rozwiązań zadania. W trakcie przygotowania są dwa artykuły mojego autorstwa, niestety ostatnie 2 tygodnie to notoryczny brak czasu.

    Jedno z tych rozwiązań to właśnie wykorzystanie ADC - pod tym kątem była także przygotowana treść zadania. Nie planowałem jednak używać pinów wybierających kolumny, a zrealizować tylko jedną z nich na stałe podłączoną do Vcc. Uzupełnię artykuł o taką możliwość jak pokazałeś powyżej ;-)

    OdpowiedzUsuń
  3. Kiedy nowe zadanie? Czy będzie to programowe PWM?

    OdpowiedzUsuń
  4. Niestety nastąpiło znaczne opóźnienie w publikacji artykułów. Nadrabiać to będę w ciągu najbliższych 10 dni. Nic nie stoi na przeszkodzie, by następny temat EPP, był taki jak proponujesz :-)

    OdpowiedzUsuń
  5. bardzo mi przykro, że mój mail z propozycją rozwiązania został olany. miałem 3 rozwiązania tego problemu.

    Jedno to ADC, ja jednak nie wykorzystywałem portów PB tylko 5 V, ale z większą rozdzielczością. Drgania styków były sprzętowo rozwiązane.

    Miałem jeszcze dwa rozwiązania, niestety nie otrzymałem do dzisiaj odpowiedzi. Smutne, bo chciałem kilka artykułów też napisać.

    Pozdrawiam
    OSioł

    OdpowiedzUsuń
  6. Adrianie,

    Nie "olałem" Twojej pracy. Jak napisałem wyżej nastąpiło z mojej winy opóźnienie w publikacji artykułów. Resztę napiszę w mailu.

    Przepraszam za kłopot - czas jest nieubłagany :(

    OdpowiedzUsuń
  7. Nowy termin nadsyłania rozwiązań: 22 lipca 2012r.

    OdpowiedzUsuń
  8. kolejny raz brak rozwiązań????

    OdpowiedzUsuń
  9. Niestety chyba temat "nie leży" :)
    Opracuję artykuły we własnym zakresie.

    OdpowiedzUsuń
  10. ja jestem teraz na kwaterce Przystanku Woodstock, więc mam duzo roboty, 15.08 wracam do domu jak wszystko złożymy. Jak tylko wrócę to wezme się do roboty i napisze ten artykuł

    OdpowiedzUsuń
  11. Czekamy z niecierpliwością - sponsor także :-)

    OdpowiedzUsuń
  12. Witam. Chciałem się podzielić przemyśleniami i proszę o poradę. Mam mało wolnych pinów a potrzebuję podłączyć klawiaturę 4x4, tak więc pomyślałem tak:
    1. Każdy przycisk oddzielnie podciągnąć pod VCC (naciskając zwieranie przycisku do masy)
    2. W szeregu z każdym przyciskiem dać rezystor 1% (wszędzie wartość jednakowa), dodatkowo dać w szereg drugi rezystor 1% (tutaj dla każdego przycisku inna wartość)
    3. Wykorzystując jeden port wejściowy ADC podpiąć się pomiędzy rezystory (w każdym przycisku)
    4. Gdy przyciski nie są wciśnięte ADC cały czas będzie odczytywać wartości maksymalne (brak przepływu prądu, podciągnięcie do VCC), gdy nastąpi zwarcie któregokolwiek przycisku (wciśnięcie) to wtedy ADC wykrywa zmianę i dokonuje pomiaru rezystancji (ja nie potrzebuję kilku przycisków wciśniętych jednocześnie)i wykrywa, który przycisk aktualnie jest wciśnięty, odczytaną wartość porównuję (+/- tolerancja) z wartością zapisaną w tablicy programu.
    Dla zasilania 5V przy 16 przyciskach poziomy napięć odczytywane przez ADC powinny się różnić o około 0.3V
    5. Przewidywane problemy
    a. Wciśnięcie przycisku jest bardzo szybkie, krótkotrwałe (po puszczeniu przycisku ten wraca do swojej pierwotnej pozycji - rozwarcie) - czy ADC zdąży "to wykryć"? - w sensie, że po naciśnięciu napięcie zacznie spadać a po puszczeniu zacznie narastać do 5V, czy napięcie zdąży spaść dodanego progu w pełni i czy ADC to wykryje?
    b. Skoro przycisk nie jest podłączony do uC to brać pod uwagę drganie styków? Według mnie nie potrzebnie, tutaj mierzę napięcie (spadek napięcia) i drgania, które są "mylące" dla uC tutaj chyba nie mają znaczenia, dlatego uważam, że kondensator nie jest potrzebny a co za tym idzie dioda także, ale może jestem w błędzie. Jestem ciekaw Waszej fachowej opinii. Czy takie rozwiązanie będzie działać?
    Pozdrawiam
    Cristof

    OdpowiedzUsuń
  13. Witaj.

    Piszesz o klawiaturze 4x4, a jednocześnie piszesz, że: Każdy przycisk oddzielnie podciągnąć pod VCC .

    Nie bardzo rozumie, jak to widzisz. Przydałby się schemat.

    Innymi słowy inaczej trzeba rozwiązywać problem gdy klawiatura jest zorganizowana jako matryca 4x4, a inaczej gdy jest to drabinka rezystorów.

    Odnośnie problemów:

    Wprawdzie nie podajesz typu mikrokontrolera, który chciałbyś użyć, ale na pewno mikrokontroler będzie miał przetwornik ADC wystarczająco szybki, by dokonać pomiarów poszczególnych drgnięć przycisków. Dlatego niestety, bez kondensatora, będziesz musiał eliminować drgania styków programowo - ale to jest proste (przykłady są w artykule powyżej).

    Dodam jeszcze, że klawiaturę na jednym pinie można wykonać wykorzystując ADC, a można także zwykły cyfrowy pin wejściowy i liczyć czas ładowania kondensatora. Ciągle czekamy na rozwiązania czytelników bloga - może się doczekamy :-)

    Czekam na schemat. Wrzuć na http://imageshack.us/ i podaj link.

    OdpowiedzUsuń
  14. Witaj.
    Dziękuję za odpis.
    Skoro troszkę niejasno i nie w pełni się wysłowiłem to wyjaśniam ponownie.
    Pisząc 4x4 miałem na myśli 16 przycisków, źle się wysłowiłem, zatem reasumując 16 przycisków minimum, albo więcej, uC to AVR ATMega88, schematu nie mogę wysłać na wskazany link z racji zablokowania stronki przed admina :D :P, zatem podsyłam tylko ten fragment co interesuje w postaci pdf e-mailem. Dziękuję i jestem ciekaw odpowiedzi.
    Pozdrawiam
    Cristof

    OdpowiedzUsuń
  15. Załączam schemat, który przesłałeś: Schemat

    Niestety to nie zadziała tak jak się spodziewasz, ponieważ połączyłeś wszystko równolegle.

    Aby to zobaczyć, przeanalizuj osobno:
    - połączenie samych rezystorów,
    - połączenie samych kondensatorów,
    - połączenie samych przycisków.

    Musisz pokombinować inaczej - zobacz przykład pokazany przez kol. robalstona w pierwszym komentarzu.

    OdpowiedzUsuń
  16. Wznawiamy cykl EPP i to zadanie. Stawka wzrosła, zobaczymy kto się skusi :D

    OdpowiedzUsuń
  17. Można podpiąć (niemalże) dowolną liczbę przycisków pod dowolne wejście ADC. Takie rozwiązanie są już dawno stosowane przez takie firmy jak Technics czy Panasonic. Drabinka rezystorów i co rezystor przycisk. Pomiar ADC wskaże który przycisk naciśnięto.

    OdpowiedzUsuń
  18. Minusem rozwiązania jakie podpowiedziałem jest to że procesor błędnie odczyta naciśnięcie dwóch przycisków na raz. Ale chyba nie o to w tym chodzi.

    Jeżeli kolega Dondu "zapragnie" abym umieścił schemat i program (ale w bascomie) to chętnie to uczynię.

    OdpowiedzUsuń
  19. Niestety nie zapragnie rozwiązań w BASCOM, ze względu na charakter bloga. Ale dziękuję za chęci.

    Dzisiaj sprawdzę i rozpocznę redagowanie nadesłanych rozwiązań. Jestem trochę spóźniony z tymi artykułami - przepraszam.

    OdpowiedzUsuń
  20. Haha, faktycznie, trochę spóźniony :)

    OdpowiedzUsuń
  21. Karne pajacyki za te spóźnienie!

    OdpowiedzUsuń
    Odpowiedzi
    1. Melduję, że trzy pajacyki wykonane - z przyjemnością oderwałem się od fotela :-)

      Usuń
  22. A co powiecie na wykorzystanie po małej przeróbce biblioteki MIDI

    OdpowiedzUsuń
    Odpowiedzi
    1. Każdy sposób jest dobry jeśli spełnia wymogi autora projektu. Zachęcam do opisania go na naszej stronie. :)

      Usuń

Działy
Działy dodatkowe
Inne
O blogu




Dzisiaj
--> za darmo!!! <--
1. USBasp
2. microBOARD M8


Napisz artykuł
--> i wygraj nagrodę. <--


Co nowego na blogu?
Śledź naszego Facebook-a



Co nowego na blogu?
Śledź nas na Google+

/* 20140911 Wyłączona prawa kolumna */
  • 00

    dni

  • 00

    godzin

  • :
  • 00

    minut

  • :
  • 00

    sekund

Nie czekaj do ostatniego dnia!
Jakość opisu projektu także jest istotna (pkt 9.2 regulaminu).

Sponsorzy:

Zapamiętaj ten artykuł w moim prywatnym spisie treści.