Użyj wszystkich pinów jako cyfrowych wejść / wyjść

11

Zwiększ liczbę pinów cyfrowych

Istnieje wiele postów, które wyjaśniają, jak używać więcej niż standardowych pinów na różnych arduinos, ale żaden z nich nie wyjaśnia poprawnie ograniczeń i problemów.

wprowadź opis zdjęcia tutaj

Arduino Uno:

1.Możesz użyć pinów analogowych

Pin 14 = Analog in 0
Pin 15 = Analog in 1
Pin 16 = Analog in 2
Pin 17 = Analog in 3
Pin 18 = Analog in 4
Pin 19 = Analog in 5

digitalWrite(14,HIGH);
or
digitalWrite(A0,HIGH);

2.Nie można używać zarówno SDA, SCL, jak i A4, A5, ponieważ są one zasadniczo takie same (18,19).

3. Możesz także użyć TX / RX.

„Nie rób tego, zrywasz komunikację szeregową ...”

„Nigdy nie używaj pinów 0 i 1”

„nie można użyć pinów TX / Rx”

Możesz ... ale musisz podjąć środki ostrożności. Które?

Powinien mieć oprogramowanie szeregowe przez USB, prawda?

Czy mogę zepsuć port szeregowy USB?

Czy występują problemy z wewnętrznym układem, jeśli używam TX / RX?

Kiedy korzystam z tych pinów TX / RX w kodzie, których prawdopodobnie nie powinienem używać Serial.print()?

Co się stanie, jeśli zapomnę usunąć Serial.print()po przesłaniu kodu używającego pinów 0,1?

Jak zresetować sprzęt arduino / bootloader, jeśli coś pójdzie nie tak?

Ponieważ istnieją różne inne Arduino, które używają różnych żetonów, czy powyższe dotyczy wszystkich żetonów Atmel?

Więc jaki shuold wiem przed użyciem tych TX / RX, a może także innych pinów analogowych?

Istnieją tanie rejestry zmiany biegów, sterowniki PWM, sterowniki LED, SPI, i2C i więcej IC, aby rozszerzyć swoje I / O


Ale jeśli nie ma dużych problemów, oznacza to, że arduino ma 20 pinów I / O ...

Możesz teoretycznie kontrolować:

17x3 = 51 = 17 RGB leds (multiplexing, pwm sourcing&sinking);
14x6 = 84 leds (multiplexing, pwm on 6 rows/colums );
10x10 = 100 leds (multiplexing, high low);
20x(20-1) = 380 leds (charlieplexing, high low);
// yes it would flicker

Popraw mnie, jeśli się mylę. Oznacza to, że możesz kontrolować 380 „Czegokolwiek” za pomocą diod i jednego arduino.

cocco
źródło

Odpowiedzi:

8

Główny problem dotyczy pinów 0 i 1.

Wiele pinów ma przypisane wiele funkcji, np. A4 i A5 to także piny I2C, piny 10/11/12/13 to również piny SPI itp. Ale piny 0 i 1 są jedynymi pinami wielofunkcyjnymi, które tak naprawdę mieć coś do nich przymocowanego na tablicy.

Wszystkie pozostałe piny, choć są wielofunkcyjne, mają swoją funkcję zdefiniowaną w zasadzie przez to, co do nich podłączasz. Ponieważ piny 0 i 1 są już podłączone na płycie do układu interfejsu USB, ich możliwości użycia są nieco bardziej ograniczone.

  • Gdy tylko włączysz Serial w swoim szkicu ( Serial.begin()), te dwa piny nie mogą już być niezawodnie używane do cyfrowego IO.

Oznacza to, że można też korzystać z portu szeregowego sprzętu lub można użyć szpilki do cyfrowego IO, ale nie jednocześnie.

  • Urządzenia podłączone do pinów 0 i 1 mogą zakłócać połączenie szeregowe

Obejmuje to przesyłanie szkiców. Masz szeregowe dane przychodzące z komputera, podczas gdy na te same piny wpływają inne podłączone do nich rzeczy. Najczęstsze z nich to moduły GPS, które łączą się z tymi pinami i stale wysyłają dane szeregowe. Te dane szeregowe będą w konflikcie z danymi szeregowymi komputera i żadne z nich nie dotrze prawidłowo.

  • Jak przesyłasz szkice, jeśli szkic przeszkadza w serii? Jak „zresetować” tablicę?

Ty nie. To nie twój szkic koliduje z serialem, to to, co jest fizycznie połączone z tymi dwoma pinami IO, które przeszkadzają. Po prostu odłącz te dwa piny od wszystkiego, co jest podłączone, a będziesz mógł ponownie przesłać szkice. Wiele tarcz zaczyna teraz dodawać do nich mały przełącznik, aby odłączyć te piny, dzięki czemu można przesyłać szkice bez odłączania osłony. Możesz także użyć tej samej sztuczki z innymi urządzeniami podłączonymi do tych styków - dodaj podwójny biegun pojedynczy rzut lub podwójny biegun podwójny rzut (i nie używaj jednej pozycji), aby łatwo odizolować oba styki od reszty twój sprzęt, kiedy potrzebujesz.

  • Czy to wpływa na wszystkie tablice Arduino?

Nie, tylko te, które używają mostka szeregowego z USB na szeregowy - takie rzeczy jak Uno, Due, Mega itp. Płyty z bezpośrednim połączeniem USB nie używają pinów TX i RX do przesyłania szkiców - używają dedykowanego USB Piny D + i D-. To plansze takie jak Leonardo, niektóre z mniejszych (mini? Mikro? Zapomniałem które) plansze itp.

Majenko
źródło
„Wiele tarcz zaczyna teraz dodawać mały przełącznik” fajne. Micro ma „mostek szeregowy USB-szeregowy”? Czy to oznacza, że ​​mogę używać pinów 0,1 na Uno, ale nie na micro?
cocco
Możesz ich używać na każdym, który nie ma mostka USB na port szeregowy. Uno ma jeden, Mega ma jeden, Mini nie ma, jednak musisz go podłączyć zewnętrznie do pinów TX / RX, aby go zaprogramować. Wszystkie są wyłączone. Mikro i Leonardo nie mają takiego, więc możesz z nich korzystać.
Majenko
O tym mówi @Nick Gammon? Uno i inni, których zanotowałeś, mają rezystory pullup, które nie pozwalają ci na prawidłowe użycie pinów 0 i 1, ale Micro nie ma rezystora pullup, więc piny 0 i 1 działają poprawnie, a także usb do przesyłania nowych szkiców?
cocco
Tym razem Nick się myli w tej kwestii. Nie ma żadnych rezystorów podciągających. Co to jest para małych rezystorów liniowych, aby zapobiec problemom, jeśli główny MCU i układ USB próbują jednocześnie doprowadzić tę samą linię do przeciwnych poziomów. Możesz je zobaczyć na schemacie Uno jako RN4A i RN4B.
Majenko
Jeśli układ USB zdarzy się spróbować wbić pin RX (masz podłączony port USB i otworzysz połączenie szeregowe (a może po prostu jest podłączony, nie jestem pewien)), może to wpłynąć na napięcie na pinie RX niezależnie od wszystkiego robisz w swoim szkicu, więc może nie być bezpiecznie używać tej szpilki do takich rzeczy jak charlieplexing.
Majenko
1

Nie mogę komentować z powodu niewystarczającej reputacji, ale chcę zauważyć, że pinout OP ma co najmniej jeden pin niewłaściwy!

PB6 powinien być PB5

Spędziłem sporo czasu próbując dowiedzieć się, dlaczego nie widziałem SCK na lunecie (magistrali SPI). Pracowałem na niskim poziomie, nie z IDE.

Ponieważ jest to pierwsze zdjęcie, które pojawia się w Google, chciałem uniknąć tych samych problemów dla innych ...

Petrus
źródło
0

20x (20-1) = 380 diod LED (charlieplexing, high low); Popraw mnie, jeśli się mylę. Oznacza to, że możesz kontrolować 380 „Czegokolwiek” za pomocą diod i jednego Arduino.

Po pierwsze, liczba 380 jest poprawna dla 20 pinów (20 2 - 20), jednak piny 0 i 1 są podłączone do rezystorów pull-up w Atmega16U2, więc nigdy tak naprawdę nie mają 0V. Jeśli załadujesz pusty szkic, zmierzysz 5 V na pinach 0 i 1.

Po drugie, nie możesz prowadzić 380 „ wielorybników ”, możesz prowadzić 380 diod LED za pomocą Charlieplexing. Właściwość diody LED, polegającej na tym, że prąd przepływa przez nią tylko w jedną stronę, jest ważna dla sposobu jej działania.

Powiązane pytanie Czy istnieje sposób, aby mieć więcej niż 14 pinów wyjściowych na arduino?

Nick Gammon
źródło
Po pierwsze: co się stanie, jeśli ustawię 2 diody odwrócone (z rezystorami) na styki 0 i 1, ustawię pin 0 wysokie styk 1 niskie opóźnienie 1 sekundę i ustawię pin 0 niskie i styk 1 wysokie opóźnienie 1 s?
cocco
Po drugie: przez „Whatevers” rozumiem przełączniki ... przełączniki kliknięcia, kontaktrony, czujniki lub każdy typ kombinacji wyjść wejściowych, które obsługują wysoki niski. electronicdesign.com/site-files/electronicdesign.com/files/... zrobione z diodami.
cocco
Cóż, nie za bardzo. Charlieplexing jest formą multipleksowania, więc jeśli nie chcesz, żeby twoje przełączniki klikały jak szalone, to tak naprawdę nie zadziała. I to jest sytuacja wyjściowa, więc nie będziesz robił wkładów, jak się wydaje. Sugeruję przeczytanie innych linków. Rejestry Shift lub ekspandery portów są tutaj bardziej praktyczne niż Charlieplex.
Nick Gammon