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!
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ą!
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:
- masz do wyboru 4 dowolne piny mikrokontrolera ATmega8, ale wśród tych czterech tylko jeden pin wejściowy przetwornika ADC,
- możesz wykorzystać dodatkowe elementów elektroniczne, ale ich łączna cena nie może przekroczyć 1zł netto (ceny przycisków nie bierzemy pod uwagę),
- możesz wykorzystać dowolny "bebech" znajdujący się w mikrokontrolerze,
- 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ń),
- 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,
- 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ń
Witam. Widzę, że na razie nie ma żadnych rozwiązan tego zadania, więc podsyłam małą pomoc (rozwiązanie sprzętowe).
OdpowiedzUsuń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
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.
OdpowiedzUsuń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 ;-)
Kiedy nowe zadanie? Czy będzie to programowe PWM?
OdpowiedzUsuń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ńbardzo mi przykro, że mój mail z propozycją rozwiązania został olany. miałem 3 rozwiązania tego problemu.
OdpowiedzUsuń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ł
Adrianie,
OdpowiedzUsuń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 :(
Nowy termin nadsyłania rozwiązań: 22 lipca 2012r.
OdpowiedzUsuńkolejny raz brak rozwiązań????
OdpowiedzUsuńNiestety chyba temat "nie leży" :)
OdpowiedzUsuńOpracuję artykuły we własnym zakresie.
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ńCzekamy z niecierpliwością - sponsor także :-)
OdpowiedzUsuń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:
OdpowiedzUsuń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
Witaj.
OdpowiedzUsuń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.
Witaj.
OdpowiedzUsuń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
Załączam schemat, który przesłałeś: Schemat
OdpowiedzUsuń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.
Wznawiamy cykl EPP i to zadanie. Stawka wzrosła, zobaczymy kto się skusi :D
OdpowiedzUsuń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ń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.
OdpowiedzUsuńJeżeli kolega Dondu "zapragnie" abym umieścił schemat i program (ale w bascomie) to chętnie to uczynię.
Niestety nie zapragnie rozwiązań w BASCOM, ze względu na charakter bloga. Ale dziękuję za chęci.
OdpowiedzUsuńDzisiaj sprawdzę i rozpocznę redagowanie nadesłanych rozwiązań. Jestem trochę spóźniony z tymi artykułami - przepraszam.
Haha, faktycznie, trochę spóźniony :)
OdpowiedzUsuńKarne pajacyki za te spóźnienie!
OdpowiedzUsuńMelduję, że trzy pajacyki wykonane - z przyjemnością oderwałem się od fotela :-)
UsuńA co powiecie na wykorzystanie po małej przeróbce biblioteki MIDI
OdpowiedzUsuńKażdy sposób jest dobry jeśli spełnia wymogi autora projektu. Zachęcam do opisania go na naszej stronie. :)
Usuń