Załóżmy, że jedna łączy dwie płyty Arduino Uno za pomocą pinów Rx i Tx. Następnie, jeśli jedna lub obie płyty Arduino zostały podłączone do komputera i prawdopodobnie otworzyły monitory szeregowe, czy styki Tx i Rx nadal będą działać? tj. czy Arduino będzie nadal komunikować się za pośrednictwem pinów Rx i Tx podczas komunikacji z komputerem? Jeśli nie, to jak sprawić, by działały podczas połączenia z komputerem?
Komentarze
- Układ USB FTDI jest podłączony do pinów TX / RX. Dlatego port szeregowy może nie działać zgodnie z oczekiwaniami.
Odpowiedź
Załóżmy, że jedna łączy dwie płyty Arduino Uno za pomocą pinów Rx i Tx.
Zakładam, że połączysz TX jednego Arduino z RX drugiego i odwrotnie, co jest właściwym sposobem ich połączenia.Jak wyjaśnił Seealion w swojej odpowiedzi, nie powinieneś łączyć ze sobą dwóch pinów TX.
jeśli jedna lub obie płyty Arduino były podłączone do komputera i prawdopodobnie otwierały się monitory szeregowe.
Jeśli to zrobisz, Arduino nawet tego nie zauważy.
Cóż, żeby być dokładniejszym … na Uno jest mały chip, nea r złącze USB, oznaczone „MEGA16U2”. Ten układ jest używany jako konwerter USB / szeregowy i zauważy po podłączeniu łącza USB i otwarciu portu. Jednak główny układ (duży PDIP28), który jest mikrokontrolerem obsługującym twój szkic, nie będzie o tym wiedział ani tym nie przejmował się.
styki Tx i Rx nadal działa?
Oczywiście.
czy Arduino będzie nadal komunikować się przez Rx i pin Tx podczas komunikacji z komputerem?
RX nie będzie komunikować się z komputerem. Co się stanie, to:
- Cokolwiek Arduino zapisze na swoim porcie szeregowym, zostanie odebrane zarówno przez drugie Arduino, jak i przez monitor szeregowy.
- Cokolwiek wyślesz przez monitor szeregowy, zostanie utracone.
- Kiedy
Serial.read()
, otrzymasz wszystko, co zostało ustawione przez drugie Arduino.
Przyczyną tego zachowania jest 1 rezystor kΩ, który znajduje się między TX Mega16U2 i RX głównego mikrokontrolera. Po podłączeniu tego RX do TX drugiego Arduino, który ma niską impedancję (≈ 2 5 Ω), że TX „wygra”: wyjście o niskiej impedancji przewyższa wyjście o wysokiej impedancji.
Odpowiedź
jak sprawić, by [dwa Arduino komunikowały się ze sobą] działały podczas połączenia z komputerem?
Istnieją różne sposoby bezpośredniej komunikacji między dwoma Arduinami, podczas gdy jedno lub oba komunikują się z monitorem szeregowym laptopa przez USB.
-
Użyj UART dla Arduino do komunikacji, która jest niezależna od połączenia USB. (Patrz https://www.arduino.cc/reference/en/language/functions/communication/serial/ )
- Kilka płyt zgodnych z Arduino, na przykład Arduino Mega 2560, Arduino Due, Arduino Uno Wifi Rev.2 itd. Mają 4 sprzętowe UART; piny Serial1 (zwróć uwagę na „1”) mogą służyć do komunikacji z innym Arduino bez zakłócania komunikacji szeregowej (bez „1”) UART przez USB do laptopa. (Niestety, Arduino Uno ma tylko 1 sprzętowy UART).
- Arduino Micro oparte na ATmega32u4 i Arduino Leonardo i pochodne Arduino oparte na ATmega32u4, takie jak FLORA i wiele pochodnych Arduino opartych na architekturze ARM, takich jak seria Teensy , ma interfejs USB, który nie używa żadnego pinów UART; więc piny Serial1 (uwaga na „1”) mogą być używane do komunikacji z innym Arduino bez zakłócania komunikacji szeregowej (bez „1”) nie-UART przez USB do laptopa. (Niestety , Arduino Uno ma interfejs USB, który używa swoich jedynych sprzętowych pinów UART).
- Nawet Arduino Uno, które ma tylko 1 sprzętowy UART, którego styki są podłączone na stałe do chip interfejsu USB, może bit-bang powolnej symulacji UART na innych pinach. Zobacz Jaka ' jest różnica między wszystkimi biblioteki oprogramowania szeregowego? Która z nich jest zgodna z Arduino Nano? .
-
Zamiast próbować symulować UART w oprogramowaniu (synchronizacja jest trochę trudna), może być łatwiej / szybciej użyć innych mniej wrażliwych na czas sposoby komunikacji między Arduino Unos lub innymi Arduino, takie jak
- SPI między 2 Arduino (a) ; (b)
- I2C między 2 Arduino (a) (b)
- PJON między 2 Arduinami
- kilka protokołów komunikacji asynchronicznej nie ma żadnych zależności czasowych
- itp.
Odpowiedź
Mam dokładnie ten sam problem! Używałem płyty Arduino Uno z Jtag ICE mkii do debugowania, co działało dobrze. Kiedy zacząłem używać UART, był to wielki bałagan. Transmisja z Arduino do zewnętrznego adaptera TTL-USB działała, ale nie w drugą stronę. Grałem na wiele godzin, zanim zobaczyłem ten wątek, i to dało mi pomysł, aby przyjrzeć się shematic – > Bang! Widziałem dwa rezystory. Wyciągnięta lekcja: nie używaj sprzętu Arduino bez pozostałych narzędzi! Pomyślałem, że to dobry pomysł, aby użyć sprzętu do szybkiego rozwoju. Teraz to kosztuje mnie więcej czasu niż myślałem …
Odpowiedź
Nie należy łączyć ze sobą dwóch pinów TX. Arduino ma pewne rezystory zabezpieczające, ale nawet nie jest zalecane podłączanie dwóch pinów wyjściowych.
Jedynym bezpiecznym sposobem bezpośredniego użycia pinów RX / TX jest usunięcie rezystorów ochronnych (RN4A i RN4B w projekcie referencyjnym) ) lub przynajmniej RN4A i używaj tylko jednego połączenia na raz. Nie pomaga, jeśli nie używasz połączenia z komputerem lub nie otwiera monitora szeregowego, ponieważ styki są nadal wyjściem.
(Wiele pinów RX nie stanowi problemu, ponieważ są wejściami)
(I oczywiście wiem, że może działać z wieloma pinami TX przez większość czasu, ale poleciłbym to)