Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 28 mar 2024, o 15:14


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 10 ] 
Autor Wiadomość
PostNapisane: 5 mar 2018, o 19:59 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 lut 2016
Posty: 248
Lokalizacja: Norwegia
Pomógł: 16

Pewnie wielu z Was zaawansowanych użytkowników mikrokontrolerów, uśmiechnie się z politowaniem czytając ten post. Myślę jednak że początkującym jak ja, może się przydać.
Jestem już stary i pamiętam takie rzeczy jak mechaniczne kodery DEC na BCD montwane w urządzeniach pomiarowych, które służyły do nastaw dzielników częstotliwości czy innych takich...
Niedawno zaskoczyła mnie konieczność wykonania sterownika z dużą ilością peryferiów i dużą ilością klawiszy. Mimo iż zastosowałem Atmega128, to nie wiele mi zostało zasobów żeby obsłużyć 7 klawiszy.
Do głowy mi przyszło najbardziej dla mnie oczywiste rozwiązanie, czyli klawiatura BCD (przez analogię do starych mechanicznych koderów działających właśnie w kodzie BCD). Jednak pomyślałem że przewalę internet może istnieje coś prostszego i bardziej nowoczesnego niż ta metoda starsza od torfu...?
Znalazłem w necie rozwiązania oparte na:
1 klawiaturze analogowej
2 klawiatura matrycowa
3 klawisze pojedyncze podłączane bezpośrednio do pinów kontrolera
Przykładów powyższych rozwiązań jest cała masa w necie, natomiast pomysłu który mi przyszedł do głowy, praktycznie nie znalazłem. Natknąłem się dosłownie na dwa takie rozwiązania zakamuflowane głęboko jak by to było jakieś niezwykle dziwne i nietypowe. Podczas gdy wydawać by się mogło że to najbardziej oczywiste rozwiązanie. Może ja nie umiem w internety i źle szukałem.
Tak czy inaczej postanowiłem wrzucić na nasze forum moją metodę na dużo klawiszy na małej ilości pinów :) Może się przyda komuś kto jest w potrzebie.
Panowie i Panie fachowcy, ten post jest dla początkujących :)

tak wygląda fragment schematu budowanego przezemnie sterownika, a dokładnie fragment z klawiaturą

Obrazek

jak widać, użyłem trzech pinów procka i 12 zwyczajnych diod krzemowych podłączonych do tych pinów w porządku kodu BCD.
Z trzech pinów uzyskałem w ten sposób 7 klawiszy. z Czterech pinów będziemy mogli mieć 16 klawiszy czyli już lepiej niż klawiatura matrycowa która potrzebuje całego portu.
Diody które podpięte są do pinów portów, są uporządkowane zgodnie z kodem binarnym:
8421 w negacji czyli
111 = 0 żaden przycisk nie wciśnięty stany wysokie na wszystkich pinach
110 = 1 wciśnięty przycisk 1
101 = 2 wciśnięty przycisk 2
100 = 3
011 = 4
010 = 5
001 = 6
000 = 7
Można dodać czwarty pin itd....

Żeby to obsłużyć programowo, przyszły mi do głowy dwa sposoby. Pierwszy najbardziej oczywisty i chyba najprostszy dla takiego początkującego jak ja to po prostu sprawdzanie stanu wszystkich trzech pinów jak w tym przykładzie:

Przygotowałem sobie makra dla trzech pinów ja akurat miałem do dyspozycji 3 kolejne piny tego samego portu, ale to generalnie bez znaczenia. Można użyć dowolnych pinów które pozostały do użycia.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


w pętli głównej ustawiam kierunki i pociągam do VCC (na schemacie mam też rezystory podciągające na tych pinach)
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


i teraz pozostało stworzyć funkcję która będzie sprawdzać stany pinów

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

inna metoda obsługi takiej klawiatury to metoda tablicowa, której nie opracowałem :)

może ktoś zechce dopisać jakiś inny fajny kod do obsługi tej przedpotopowej metody klawiaturowania :)
Dla mnie warto było zapakować te diody żeby odzyskać kilka pinów procka.
Tak wygląda na mojej płytce:
Obrazek

Zdecydowałem się to tutaj opublikować nie żeby się chwalić, bo jestem naprawdę początkujący, ale tylko dla tego że nie ma wiele takich przykładów w internecie. Może dla tego że tak oczywiste jak podłączanie kwarca do procka? :)

Wada tej metody jest taka że nie da się użyć kombinacji klawiszowej, podobnie w metodzie z ADC czy matrycowej bez niezbędnych modyfikacji...
Mam nadzieję że komuś się przyda, a może ktoś zamieści bardziej prawidłową funkcję obsługi klawiatury BCD.

_________________
SP2LUB - LA1BUA



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 mar 2018, o 21:07 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1960
Lokalizacja: Lipsko
Pomógł: 125

Bardzo fajna metoda. Też ją pamiętam ze starych projektów na ttl :)
Najprościej to wyłuskać te trzy bity operatorem AND i mamy gotową liczbę, a następnie używać bezpośrednio lub, np.przez switch/case :)

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 mar 2018, o 21:42 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 lut 2016
Posty: 248
Lokalizacja: Norwegia
Pomógł: 16

No właśnie ja tej metody używałem do ustawiania dzielników TTL 74192 w moich syntezerach PLL.. oj fajnie się bawiło z tymi kostkami, cieszyłem się jak dzieciak.. a teraz znowu cieszę się jak dzieciak przy zabawie z mikroprockami i ta stara wiedza ma szanse dostać nowe życie :)

_________________
SP2LUB - LA1BUA



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 mar 2018, o 22:06 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

SP2LUB napisał(a):
a teraz znowu cieszę się jak dzieciak przy zabawie z mikroprockami i ta stara wiedza ma szanse dostać nowe życie :)

I to jest właśnie najfajniejsze :)

_________________
Jestem początkujący i moje porady mogą być błędne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 mar 2018, o 07:11 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 cze 2014
Posty: 855
Lokalizacja: pod Warszawą
Pomógł: 58

"dziadek Sławek" wymiata :D :D :D

_________________
Pomóżcie mi stanąć na nogi



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 mar 2018, o 07:38 
Offline
Użytkownik

Dołączył(a): 05 lip 2015
Posty: 28
Pomógł: 1

Fajne rozwiązanie, ale tylko dla trzech, czy pięciu klawiszy.

SP2LUB napisał(a):
z Czterech pinów będziemy mogli mieć 16 klawiszy czyli już lepiej niż klawiatura matrycowa która potrzebuje całego portu.
Widzę jedną, ale za to ogromną, wadę tego rozwiązania. Ilość diod.
Przy dołożeniu czwartego bitu trzeba dodać 20 diod? Łącznie 32? Ile to miejsca na płytce zajmie?

Odrobinę można usprawnić, bo dlaczego nie zrezygnować z diod D1, D4 i D5? Nic nie robią w tym układzie. A z 12 zrobi się 9...

W ramach oszczędności miejsca można zastosować coś z tego:
https://www.tme.eu/pl/katalog/diody_112 ... A394692%3B

Ale gdybym miał zrobić klawiaturę z 16 klawiszami, a miał problem z portami, to pewnie dałbym jakiegoś małego tiny jako kontroler klawiatury. Zaoszczędziłbym na miejscu (a może i na kosztach).... A gdyby klawiszy miałoby być jeszcze więcej, powiedzmy 20, to rozwiązanie z drabinką diod zamienia się w koszmar.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 mar 2018, o 07:46 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1960
Lokalizacja: Lipsko
Pomógł: 125

Idąc w nietypowe rozwiązania można też użyć rejestrów przesuwnych i na trzech linach zrobić w zasadzie dowolną ilość przycisków :)

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 mar 2018, o 08:55 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 lut 2016
Posty: 248
Lokalizacja: Norwegia
Pomógł: 16

ezgman napisał(a):
Odrobinę można usprawnić, bo dlaczego nie zrezygnować z diod D1, D4 i D5? Nic nie robią w tym układzie. A z 12 zrobi się 9...

Czy rzeczywiscie D1, D4, D5 nic nie robia? :) Pewny jestes? :)

Oczywiscie jest masa rozwiazan z zastosowaniem dodatkowego ukladu scalonego (dedyowanego do taich rzastosowan albo i nie)... ale tez ja nie mowie ze klawisze w kodzie BCD to jedyna sluszna droga.

_________________
SP2LUB - LA1BUA



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 mar 2018, o 14:59 
Offline
Użytkownik

Dołączył(a): 05 lip 2015
Posty: 28
Pomógł: 1

SP2LUB napisał(a):
Czy rzeczywiscie D1, D4, D5 nic nie robia? :) Pewny jestes? :)
Nie jestem, dlatego chętnie poznam wyjaśnienie ich roli.
Schemat jest niekompletny, a etykiety sygnałów nieczytelne, ale widać że:
D5 jest podłączone do linii PB4, D1 do PB5 a D4 do PB6
Katody idą zapewne to mikroswitchy.
To są jedyne switche które zwierają tylko jedną linię do masy. Reszta powoduje stan niski na więcej niż jednej linii.
Wciśnięty switch daje stan niski na podłączonej linii, prąd płynie przez diodę. Mamy, powiedzmy, 0,7V na linii. Zwolniony switch powoduje, że katoda diody wisi w powietrzu, a na linii jest Vcc.
Bez diody powinno działać tak samo, tyle, że przy wciśniętym przycisku będzie 0V zamiast 0,7V. A przy zwolnionym i tak końcówka wisi w powietrzu, więc nie ma różnicy.
W mojej opinii, diody potrzebne są tylko tam, gdzie jest ich dwie lub trzy podłączone do jednego switcha.

Gdzie popełniam błąd?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 mar 2018, o 17:25 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 lut 2016
Posty: 248
Lokalizacja: Norwegia
Pomógł: 16

Sama obecność tych diod już sprawia że mają one coś do "zrobienia" :) Masz rację że schemat jest niekompletny a etykiety nie są czytelne.
Jednak wystarczy ten schemat aby przedstawić ideę i pomóc zrozumieć jak funkcjonuje, komuś ktoś nie zna takiego rozwiązania, a internet mu go nie podsuwa. Etykiety w tym momencie nie mają kompletnie żadnego znaczenia, chodzi wyłącznie o ideę klawiaturowania :)
Masz rację że nie widać jak wygląda klawiatura, a rzeczywiście ma to znaczenie gdy chcesz oszczędzać na diodach, ponieważ Twoja sugestia z wywaleniem tych diod jest słuszna, klawiatura będzie działać tak samo.
W moim układzie ta klawiatura steruje nie tylko Atmegą128, jest do niej podłączony jeszcze jeden układ będący częścią interfejsu użytkownika. Ten sterownik powstał z potrzeby chwili żeby ratować stare urządzenie które poległo w konfrontacji z zębem czasu :)
Czyli diody mają za zadanie w pewnym sensie izolowanie sterownika od reszty układu.

Kolejna kwestia jaką poruszyłeś to priorytety. To prawda że diody zajmują miejsce szczególnie jeżeli są przewlekane, ale nie zawsze priorytetem jest rozmiar jakkolwiek to zabrzmi :D Czasami po prostu wala się w szufladzie stado diod, a czasami jakieś multipleksery czy inne cosie.. Ja mam tysiące takich diod i z przyjemnością je tam umieściłem. Nie musiałem nic zamawiać i tworzyć dodatkowych kosztów, tym bardziej że PCB zrobiłem sobie tak jak potrzebowałem w rozmiarze który był już uwarunkowany miejscem w istniejącym urządzeniu.
Reasumując, diody robią co powinny robić w tym przypadku a sama idea została przedstawiona i mam nadzieję że komuś się przyda.

Przydało by się opracowanie jakiejś bardziej eleganckiej metody programowego dekodowania stanów na pinach klawiatury. Przyszła mi do głowy metoda tablicowa, ale ponieważ chciałem mieć możliwość korzystania z dowolnych pinów które czasem zostają na różnych portach, i nie bardzo widzę jak to zgrabnie poskładać żeby na koniec mieć fajną biblioteczkę do takiego twora. Przyglądam się temu rozwiązaniu z Mirkowej biblioteki enkodera.. może jak przyjdą Święta i będzie nieco więcej czasu to postaram się to ogarnąć. Zrobić taką "matrycę" BCD w tablicy i potem przez callbacki obsługiwać to dalej.

_________________
SP2LUB - LA1BUA



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 10 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO