Skocz do zawartości

Komunikacja dwóch płytek Arduino za pomocą UART


Pomocna odpowiedź

Napisano

Witam. Zastanawia mnie, czy możliwa jest komunikacja między sobą dwóch płytek Arduino przez UART. Interesuje mnie też, co stanie się, gdy Arduino otrzyma przez UART dane z kilku źródeł jednocześnie. Sprawdziłbym sam, ale obawiam się, że mogę w ten sposób coś uszkodzić.

Tak możliwa jest konunikacja, musisz ustawić te same parametry transmisji i będzie śmigać. Przykładem takich układów są sterowniki serwomechanizmów na AVR.

możesz spróbować podłączyć ale UART to nie magistrala i po prostu przestanie działać.

Kiedyś miałem podłączone do Arduino 2 urządzebia z UART i nic nie działało. Dodanie przełącznika 2 torowego na lini RX i TX rozwiązało problem. Jeżeli wiesz jak sprawić by linie były odseparowane na czas transmisji innego urządzenia to możesz spróbowac połączyć kilka urządzeń. Niemniej SPI umie to samo 😁

(edytowany)

@Itap88 myślę, że musiałbyś spróbować. Choć zastanawiam się, czy dopóki piny Arduino są w stanie wysokiej impedancji - są wejsciami, to nie musisz się przejmować. Czyli gdybyś wpiął kilka urządzeń we wspólną linię UART i wyciszał wybrane zwyczajnie wymuszając na nich stan wysokiej impedancji. Wtedy mógłbyś komunikować się z jednym wybranym, a reszta nie powinna przeszkadzać. Funkcja Serial.end() zamienia piny w zwykłe I/O.

Edytowano przez Gieneq

Zastanawiam się jeszcze tylko, czy połączenie przewodem pinu X ustawionego jako wyjście z pinem Y ustawionym jako wejście i ustawienie pinu X na stan wysoki nie wywoła przepływu prądu powyżej 20mA przez przewód.

(edytowany)

Dobre pytanie, ale po to są interfejsy żeby właśnie urządzenia się komunikowały. Tu masz np sterownik serw, który używa UART. Na płytce jest mikrokontroler PIC.

Ale daleko nie trzeba szukać, Arduino UNO jest przykładem - są tam 2 Atmegi, jedna ta w obudowie przewlekanej i druga służąca za interfejs USB-UART. Jak spojrzysz na schemat to wyprowadzania są połączone, są tam też rezystory 1k które najpewniej służą do ograniczania prądu.

To też ciekawy wniosek, podłączając coś do UNO masz tak naprawdę podłączone 3 urządzenia w magistralę, tylko że jedno (konwerter USB-UART) nie musi być aktywny.

image.thumb.png.4b30c3141cd769b439a80d2b625652d4.png

Dokładnie jak wygląda komunikacja to nie jestem w stanie powiedzieć, trzeba by prześledzić kod biblioteki, ale jest jedna dodatkowa linia, która może zapewnia arbitraż. Tego nie wiem.

Edytowano przez Gieneq

Problem w tym, że nie mogę mieć 2 płytek podrzędnych podłączonych do UART płytki głównej, a użycie Serial.end() w jednej z podrzędnych płytek sprawi, że nie będzie ona blokowała UART i zarazem nie będzie w stanie otrzymać przez ten interfejs informacji (np. o tym, że ma włączyć swój UART). Uznałem zatem, że mogłaby ona otrzymać tę informację przez pin cyfrowy ustawiony jako wejście. I tu pojawia się pytanie: Czy na tym połączeniu wystarczy sam przewód, czy muszę umieścić tu rezystor? Jeśli rezystor, to jaki powinien on mieć opór?

Dla większego porządku pytanie wydzieliłem z kursu, ponieważ nie dotyczy ono bezpośrednio omawianych tam ćwiczeń. Tutaj będzie łatwiej utrzymać porządek w dyskusji i nie będziemy mylić osób szukających informacji o programach z kursu. Źródło pytania: https://forbot.pl/forum/topic/8164-kurs-arduino-6-kontynuacja-uart-serwomechanizmy/page/10

  • Lubię! 1

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...