• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Połączenie dwóch Arduino i wymiana zmiennych.
#1
Witam. Szukam sposobu na wysyłanie i odbieranie wartości zmiennych między dwoma Arduino, np. zmienna "ilość" w Arduino nr.1 wynosi "2" i ta wartość jest wysłana do Arduino nr.2 i przypisana do zmiennej "ilość". Dobrze by było jakby komunikacja była w dwie strony. Można połączyć za pomocą pinów RX i TX, jednak nie znalazłem nigdzie odpowiedzi czy to mogło by działać tak jak chcę i jak to zrobić.
 
Odpowiedź
#2
Będzie to działać, najlepiej wykorzystać sprzętowy UART, zwróć uwagę, że np. w UNO jest tylko jeden i zajęty przez podłączenie USB, więc to może go zakłócać. Lepiej wykorzystać np. Leonardo/micro i ich serial1 lub Arduino MEGA, ma 4 sprzętowe UART do dyspozycji. Może też być soft serial na UNO/NANO, ale działa to różnie, wszystko zależy jak umiesz pisać programy. Co do przykładów znajdź w przykładowych szkicach serialEvent, a tu na forum rozwinięcie tego przykładu, wrzuciłem gdzieś przykład jak z ciągu znaków wydobyć liczby i przypisać je do zmiennych. Nie ma większej różnicy czy dane wysyłasz z terminala używając rąk czy z innego urządzenia. Tak samo wszystkie przykłady korzystające z UART i zewnętrznego urządzenia będą OK, gdy Arduino musi dane wysyłać i odbierać - modemy GSM, modemy WIFI, mostki BT, czujniki i ekrany z UART.
 
Odpowiedź
#3
Chcę połączyć 2 szt. Arduino nano. Czy możliwe będzie połączenie ich jednocześnie używający USB, aby monitorować to, co się w środku dzieje?

Czy serialEvent działa jak przerwanie i w tej funkcji można wykorzystać Serial.available, aby odczytać dane? Czy noInterrupts wyłączy na chwilę odczyt danych i będzie można je odczytać potem?
 
Odpowiedź
#4
Nano i UNO mają to samo, jedyny sprzętowy UART podłączony do USB, może ale nie musi działać. Jeśli wyłączysz przerwania to dane mogą być pominięte, utrata będzie proporcjonalna do czasu wyłączenia, nieważne czego używasz do odczytu czy Serial.available czy serialEvent.
 
Odpowiedź
#5
A czy UART nie ma własnego buforu, aby odczytać dane po włączeniu przerwań? Zależy mi, aby przerwania były wyłączone, gdy są wysyłane dane do wyświetlacza, aby nie przerwać transmisji
 
Odpowiedź
#6
Jakiś bufor ma, ale pewnie to jest ze 2 znaki, bajty. W PDF jest mowa o fifo, może odebrać ramkę większą niż 8bit więc możesz sobie wyliczyć jakie jest prawdopodobieństwo utraty danych. Jak znajdziesz więcej informacji to mnie oświeć. Dla porównania ESP8266 ma podane wprost, że ma sprzętowy bufor 128bajtów i do tego drugi poziom dorobiony programowo. Wyłączanie przerwań nie jest dobrym pomysłem. Nie wiem co to za LCD, ale operacja na 8 bitach w procesorze 8 bitowym to są pojedyncze cykle zegara, przy 16MHz wielokrotność 62.5 ns. Z programowym buforem to będzie trochę tych cykli, bo odczyt, skopiowanie, przesunięcie wskaźników w buforach. Ale bez przesady, że to zakłóci jakieś softwarowe wysyłanie, przecież i tak nie zrobisz 1MHz z wyświetlaczem programowo. Wyłączanie przerwań nie jest dobrym pomysłem. Poczytaj sobie też PDF do Atmegi328, tam jest dużo informacji. UART ma sprzętową kontrolę błędów, możesz sobie sprawdzać "The Data OverRun (DORn) Flag indicates data loss due to a receiver buffer full condition". Przynajmniej będziesz wiedział, że coś było i się zbyło.
 
Odpowiedź
#7
(25-03-2019, 22:01)kaczakat napisał(a): Jakiś bufor ma, ale pewnie to jest ze 2 znaki, bajty. W PDF jest mowa o fifo, może odebrać ramkę większą niż 8bit
AVR ma FIFO RX i TX dokładnie 2 bajty. Jak ma być więcej to trzeba dać zewnętrzny UART np SC16IS7xx ale patrząc na cenę lepiej wybrać uC z DMA.
Kod z Delay i/lub bez WDT to nie kod, to DEMO!
Kod wymaga komentarzy!
Nie pomagam leniwym analfabetom.

Zaawansowana Sonda Logiczna


 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości