Skocz do zawartości

Arduino Nano vs. Arduino Micro


kleofas

Pomocna odpowiedź

Witam

Zacznę od tego, iż dopiero zaczynam przygodę z Arduino. Robię projekt - około 20 przycisków podpiętych pod Arduino, które jest wpięte pod wyświetlacz/ekran monitora. Wciśnięcie danego przycisku pokazuje na ekranie, który przycisk jest wciśnięty. Od razu dodam, że moduł klawiatury odpada, gdyż przyciski będą umieszczone na takiej ściance, w różnych miejscach, w związku z czym do każdego będę musiał doprowadzić kabelek. I tu mam pytanie - Arduino Micro posiada tych 20 wejść, w związku z czym teoretycznie mógłbym się zmieścić. Ale czy mógłbym zakupić model Nano, który jest tańszy, i posiada 14 wejść cyfrowych i bodajże 8 analogowych i wpiąć kilka przycisków pod wejścia analogowe? Czy nie ma możliwości wpięcia przycisku pod wejście analogowe? Czy może lepszym wyjściem jest zastosowanie multipleksera pod Nano na np. 8 czy 16 dodatkowych wejść cyfrowych?

Link do komentarza
Share on other sites

Oczywiście możesz podłączać przyciski pod wejścia analogowe - w tę stronę nie są one w żaden sposób "upośledzone" w stosunku do cyfrowych, możesz tam załączać oporniki podciągające (bardzo wygodne) i czytać stany cyfrowe. Niemniej jednak kupowanie płytki z dużym procesorem tylko dlatego, że chcesz podłączyć mnóstwo przycisków to trochę wyrzucanie pieniędzy. Moduł multipleksera to pomysł niezły:

https://botland.com.pl/multipleksery/7192-modul-z-multiplekserem-analogowo-cyfrowym-74hc4051-sparkfun.html

ale jeszcze lepszym jest sprytniejsze połączenie przycisków w tzw. matrycę. W ten sposób za pomocą M+N pinów możesz wczytywać stan MxN zestyków. Zysk jest tym większy im liczby są większe: dla 2 i 2 nie ma żadnego, ale już dla 4 i 4 - dwukrotny. Twoje 20 przycisków można skanować za pomocą np. 5 linii wyjściowych i 4 wejściowych (5x4=20) bez żadnego multipleksera a gdyby go użyć łącznie z połączeniem w matrycę, opędzisz to 3 liniami wyjściowymi i 3 wejściowymi.

Pamiętaj, że potrzebujesz jeszcze kilka drutów do wyświetlacza.

Link do komentarza
Share on other sites

Czy do multipleksera potrzeba jeszcze jakiegoś dodatkowego modułu czy bezpośrednio podłączam go pod arduino? Multiplekser potrafi wykryć zmiany stanu kilku przycisków? Mam na myśli jednoczesne przyciśnięcie kilku switchów.

Link do komentarza
Share on other sites

Multiplekser niczego nie wykrywa. On nie rozumie sygnałów które przez siebie przepuszcza więc nie może ich w żaden sposób interpretować. To cyfrowy odpowiednik zwykłego przełącznika wielopozycyjnego. Na wejścia adresowe podajesz binarny numer kanału a na wyjściu dostajesz stan tego kanału. Program procesora, zamiast wczytywać "jednym strzałem" np. stan kilku bitów/przycisków bezpośrednio podłączonych do portu procesora wystawia najpierw numer kanału do multipleksera a potem "wciąga" stan wskazanego wejścia. Gromadzi to sobie (bit po bicie) aż wczyta wszystkie przełączniki ze wszystkich wejść (tego i ew. innych multiplekserów) i dopiero potem przechodzi do analizy: co jest wciśnięte aktualnie, co zostało rozwarte względem poprzedniego stanu a co właśnie przyciśnięto. Musisz zatem przechowywać przynajmniej jeden stan poprzedni wszystkich przycisków a po analizie i detekcji zmian nowy stan staje się poprzednim.

Może w opisie wygląda to trochę pokrętnie, ale nie jest trudne. Obsługa takiej "klawiatury" to jedna z podstawowych umiejętności programisty mikrokontrolerów. Po zastanowieniu bez problemu to zrobisz samodzielnie albo.. z niewielką naszą pomocą 🙂

Multipleksery możesz połączyć ze sobą równolegle, obok siebie - to najprostszy sposób, albo w struktury drzewiaste, które tutaj, przy stosunkowo małej liczbie wejść chyba nie mają sensu. W pierwszej metodzie wszystkie multipleksery korzystają z tych samych linii adresujących, ale każdy z nich doprowadza swoje wyjście danych do osobnego pinu procesora. Przykładowo: gdy zakupisz 3 takie moduły jak ten botlandowy masz 3 "przełączniki" 8-wejściowe czyli możesz obsłużyć 24 linie. Każdy z multiplekserów ma 3 wejścia adresowe i jedno wyjście danych. Adresy każdego przełącznika łączysz razem dostając 3 linie podłączone do 3 wyjść cyfrowych procesora a wyjście danych każdego multipleksera podłączasz do osobnej linii wejściowej proca. Wtedy program wystawiając jakiś adres - w przypadku multipleksera 8-wejściowego będzie liczba 0..7 - dostaje na 3 osobnych wejściach 1-bitowe stany ze wskazanych wejść 3 multiplekserów. W ten sposób za pomocą 3 linii wyjściowych i 3 wejściowych wczytujesz stan 24 wejść "porcjami" po 3 wejścia "przemiatając" adresy od 0 do 7. Oczywiście jeśli masz mniej styków, możesz zatrzymać się na adresie niższym, np. 20 wejść potrzebuje tylko 7 różnych adresów, bo 3x7=21.

Korzystając z techniki multipleksowania możesz zrobić to samo (maks. 24 wejścia zestykowe, 6 linii procesora) przy pomocy tylko jednego multipleksera 🙂 Zainteresowany?

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Czyli jeśli dobrze zrozumiałem to: multiplekser odczytuje dane wejście (np pierwsze wejście), potem ciąg bitów jest wysyłany do arduino, a to odczytuje stan wejścia. Tylko czy ja mogę zrobić tak, że wcisnę jeden przycisk, potem drugi, trzeci itd. i będę mógł odczytywać te stany (poprzednie przyciski nadal byłyby wciśnięte)? Bo liczę, że to nie zadziała tak, jak przełącznik wielopozycyjny - czyli tylko jeden stan wysoki z danej pozycji bym odczytał.

[ Dodano: 06-06-2018, 10:44 ]

Zgodnie z tym co mówi wikipedia na temat multipleksera, i to co w internecie wygrzebałem to: "służący do wyboru jednego z kilku dostępnych sygnałów wejściowych i przekazania go na wyjście." Jak w takim razie mogę sprawdzać, który przycisk jest obecnie wciskany, które już są wciśnięte, a które wolne? Chodzi o to, czy będzie taki moduł działał dokładnie tak samo jak wejścia na arduino - czyli odczyt wszystkich wejść, a nie tylko jednego.

Link do komentarza
Share on other sites

Powoli łapiesz, ale jeszcze nie czujesz skali czasowej. Procesor i multiplekser to elektronika, która - w stosunku do mechanicznych przełączników a tym bardziej porównując je z Twoim palcem wciskającym przyciski - jest niesamowicie szybka.

Działa to mniej więcej tak:

1. Procesor wysyła adres wejścia do multipleksera i wczytuje z niego (tylko raz) stan wybranego przycisku. Jeśli ma kilka multiplekserów, z nich także od razu wczytuje stany. W Twoim konkretnym przypadku, mając 3 multipleksery wczytuje za jednym zamachem stany 3 przycisków. Zajmuje mu to jakieś 10us czyli 1/100000s. Wczytane 3 bity zapamiętuje w jakiejś tablicy danych.

2. Procesor zmienia adres na kolejny i jeśli nie doszedł do końca całego skanu, powtarza punkt pierwszy. W tym przypadku mamy do przejrzenia 7 adresów (z 8 dostępnych w multiplekserze) po 3 przyciski w każdym.

3. Po zakończonym skanie w tablicy mamy 3x7 bitów odzwierciedlających stan potencjalnie 21 zestyków. U Ciebie 1 "węzeł" będzie pusty i nigdy nie zwarty, ale to nie ma znaczenia. 7 odczytów 3-bitowych zajęło procesorowi 70us. Z Twojego punktu widzenia to czas zerowy - procesor w jednej chwili wczytał stan wszystkich przycisków.

4. Teraz trzeba porównać właśnie wczytany, aktualny stan całej "klawiatury" ze stanem poprzednim, przechowywanym w osobnej tablicy. Procesor sprawdza więc różnice, bit po bicie, przykładowo:

- jeżeli gdzieś w "starej" tablicy było 0 a teraz na tym samym miejscu w "nowej" tablicy jest 1, to przycisk został wciśnięty - zapamiętujemy to gdzieś w tablicy "przyciski właśnie zwarte"

- jeżeli gdzieś było 1 a jest 0, wykryliśmy puszczenie i zapamiętujemy ten fakt (i numer węzła czyli adres multipleksera 0..6 i numer wejścia 0..2) w tablicy "przyciski właśnie rozwarte"

5. Po skończonej analizie różnic przepisujesz "nową" tablicę do "starej", bo następnym razem to ten nowy skan będzie poprzednim a kolejny znowu wczytasz z wejść. Na koniec zajmujesz się zawartością tablic "przyciski właśnie zwarte" i "przyciski właśnie rozwarte". Jeżeli są puste, nic się na polu stykowym nie zmieniło od ostatniego skanu a gdy w którejś coś jest (zwykle ważniejsza jest ta z wykrytymi zwarciami, ale to zależy od potrzeb reszty programu) generujesz odpowiedni kod przycisku (oparty na współrzędnych wykrytego zwarcia) z którego korzysta program oczekujący na wciśnięcia.

Wszystko powyższe powtarzasz np. 50 razy na sekundę. Nie masz szans by zrobić coś przyciskiem/palcem krócej więc każda zmiana zostanie zauważona i odnotowana, gdziekolwiek zajdzie w matrycy i w którąkolwiek stronę. Proces skanowania musi odbywać się cały czas i dlatego zwykle jest odpalany jako funkcja wywoływana z przerwania okresowego od któregoś z timerów, ale nie jest to wymóg konieczny. Wiele zależy od reszty programu, co ma robić i jak często.

Żeby nie zaciemniać pominąłem tu problemy odbić zestyków, bo przecież mechaniczny przycisk jest sprężysty i po przyciśnięciu może odbić się kilka razy zanim na pewno zewrze. To samo przy wyłączaniu: powoli (z punktu widzenia elektroniki) malejąca siła dociskająca styki powoduje, że rezystancja przycisku nie zmienia się skokowo z zera do nieskończoności tylko przechodzi przez jakieś pośrednie wartości, być może z nawrotami. Tak więc zarówno przy wciskaniu jak i puszczaniu przycisku procedura skanująca może wykryć wielokrotne zamknięcia i otwarcia. Jeśli program ma zliczać zdarzenia (np. liczbę wciśnięć), to może głupieć. Na szczęście ludzie sobie z tym także poradzili i bez problemu napiszesz odpowiedni kawałek kodu. Oczywiście do Arduino są też odpowiednie biblioteki obsługujące takie matryce klawiszków.

Jak widzisz skrajnie prosty hardware jest tylko po to by szybko i często wczytywać stan przycisków. Wszelkie analizy i interpretacje stanów i zmian wykonuje krótki program wykonywany w kółko.

  • Pomogłeś! 1
Link do komentarza
Share on other sites

Czyli chyba już załapałem. Multiplekser zadziała jak zwykły przełącznik kołyskowy (wielopozycyjny), gdzie z 16 stanów możemy odczytać jeden, który jest akurat wybrany. Jednak różni się tym od mechanicznego przełącznika, że manipulując kodem/zwłoką czasową/tablicą możemy mieć wrażenie, że dany przełącznik kołyskowy może mieć jednocześnie wyświetlonych kilka stanów - czyli przekładając to na projekt, mogą być wciśnięte jednocześnie kilka przycisków (a nie jak np. na kalkulatorze, że wciśnięcie dwóch przycisków blokuje jakby stan - de facto poprzedni stan "klawiatury" jest w sumie zapisywany na wyświetlaczu w postaci danej cyfry). Okej, czyli skłonię się do kupienia multipleksera. Mam jeszcze jedno pytanie - gdybym miał takich przycisków z 18, to mógłbym obejść się bez multipleksera. Jakie arduino wtedy wybrać? Uno/Leonardo/Micro/Nano? Leonardo i Micro posiadają po 20 wejść cyfrowych, Uno i Nano po 14 - ale mógłbym w nich wtedy podpiąć przyciski normalnie do analogowego? Czyli czy nie najlepszym wyborem byłoby Nano? 14 wejść cyfrowych i 8 analogowych (suma 22).

[ Dodano: 06-06-2018, 11:49 ]

Co do zasilania - arduino będzie zasilane zewnętrznie, najlepiej z gniazdka 230V (żadne akumulatory/baterie nie wchodzą w grę, gdyż ma to być zasilanie stałe). W internecie widzę takie zasilacze ale z okrągłym stykiem DC. Czy istnieją podobne, ale żeby zasilić arduino mirco/nano?

Link do komentarza
Share on other sites

ethanak: Fakt, zapomniałem o tym, dzięki. Rzeczywiście A6 i A7 w mega328P są biedniejsze: prowadzą sygnały tylko do ADC a są wyprowadzone na złącze. Naprawili to dopiero w dużo bogatszej wersji 328PB, ale tych nie montuje się w Arduino. Zawsze można te czysto analogowe piny wykorzystać do pomiaru np. napięcia baterii 🙂

kleofas: Nie przejmuj się tak tą liczbą pinów. Już Ci pisałem: stosując technikę multipleksowania (poczytaj o tym koniecznie a jeśli masz kłopoty, pytaj) podłączasz 20 przycisków poprzez 9 pinów procesora (np. 5 wyjściowych i 4 wejściowe, 5x4=20 - pamiętasz?) bez żadnych multiplekserów. A jeśli nie rozbudujesz systemu jakoś bardzo, to tyle linii na matrcyę wygospodarujesz nawet w malutkim Nano/Pro i na wyświetlacz (jaki?) jeszcze zostanie 🙂

Czy możesz napisać co to będzie za urządzenie? Jakaś gra czy coś?

EDIT: To, czy klawiatura blokuje się po wykryciu jednego przycisku czy jest skanowana ciągle w poszukiwaniu dalszych zmian zależy jedynie od programu. Pierwszy algorytm nazywa się 2-key-lockout i często jest stosowany w prymitywnych rozwiązaniach sprzętowych, gdzie do obsługi matrycy zaprzęgasz liczniki, rejestry itp. np. w FPGA lub właśnie w starych kalkulatorach. Tam nie potrzeba np. SHIFTów czy ALTów wciskanych jednocześnie z innymi klawiszami. Natomiast mając procesor możesz napisać dowolnie skomplikowany program który nie blokuje się na pierwszym napotkanym zwartym klawiszu i który generuje całą listę "zdarzeń" w matrycy. Takie coś nazywa się N-key-rollover, gdzie N to pojemność tablic zdarzeń. Często klawiatury komputerowe (szczególnie te gamingowe) mają podawaną tę liczbę (np. 10-key-rollover) i oznacza ona jak dużo klawiszy możesz wcisnąć na raz by żaden nie został pominięty. Ty dla matrycy 20 zestyków możesz spokojnie w Arduino zrobić pełne N=20 i nic Ci nie umknie.

Link do komentarza
Share on other sites

Powiem szczerze, że nie wiem co to za urządzenie. W pracy, w której obecnie przebywam, padł pomysł aby w każdym pomieszczeniu umieść dane przyciski, których stan następnie będzie zebrany i przesłany dalej. Nie mam kompletnie pojęcie na temat większych szczegółów. Dlatego narazie rozmyślam jak to można by połączyć. Tylko łącząc przyciski w matrycę będę musiał zająć więcej wejść w arduino (dla 4x4 to 8 wejść), a taki moduł 16 wejść zajmie mi 4 cyfrowe i 1 analog. A no tak, i jeszcze zasilenie tego.

Link do komentarza
Share on other sites

No ale to są kolejne informacje. Szkoda, że nie piszesz tego od razu.

Nie możesz gołych linii procesora ani multipleksera ciągnąć przez pomieszczenia. Takie podłączanie działa tylko w obrębie stołu, gdy klawiatura jest blisko elektroniki. Poza tym gdy przełączniki są rozstrzelone po budynku to połączenie w matrycę jest upierdliwe, bo musisz prowadzić wiele kabli i pamiętać co z czym już połączyłeś. A przede wszystkim trudno zrobić zabezpieczenia. W przypadku wielometrowych przewodów obowiązkowo musisz dać na wejściach układy/filtry/diody przeciwprzepięciowe, bo pierwsze zaiskrzenie w pobliskim gniazdku lub włączenie odkrzacza załatwi któryś pin procesora. To już nie jest hobbystyczna zabawa na biurku, ale niestety budowa instalacji "antenowej". Procesory i inne scalaki cyfrowe to bardzo delikatne układy, musisz się z nimi cackać.

Mając nawet kilka multiplekserów, wszystkie one korzystają z tych samych adresów. Tak więc w przypadku 3 modułów 8-wejściowych masz 3 linie adresowe puszczone do wszystkich oraz po 1 wyjściu danych z każdego. Obsługujesz 24 przyciski (podłączone bezpośrednio do wejść multiplekserów poprzez układy zabezpieczeń) za pomocą 6 pinów: 3 wyjściowych i 3 wejściowych.

Link do komentarza
Share on other sites

tzn. pomieszczenia są zaraz obok siebie - drzwi w drzwi wręcz, a w danym pomieszczeniu będzie kilka przycisków. Więc kolosalnych odległości nie będzie. Ale jeszcze wracając do zasilania tego no Nano/Micro - czy istnieje taki zasilacz jak dla Uno, dzięki któremu mógłbym podpiąć go do gniazdka? Bo tam jest micro albo nano usb, a nie taki okrągły wtyk.

Link do komentarza
Share on other sites

Nie mówię o "kolosalnych odległościach" tylko o kilku metrach przewodu z czułymi sygnałami cyfrowymi prowadzonych wzdłuż i w poprzek wszechobecnej instalacji 230VAC.

Każda "ładowarka" do telefonu czyli coś co daje 5V z odpowiednim gniazdkiem USB:

https://botland.com.pl/414-zasilacze-sieciowe-5-v

Złącza USB są typu normalnego, mini i micro. O ile wiem nie ma "nano".

  • Pomogłeś! 1
Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.