Serial port - odbieranie danych TX -> RX
-
- Młodszy majsterkowicz
- Posty: 36
- Rejestracja: 30 gru 2013, 14:28
Serial port - odbieranie danych TX -> RX
Witam,
załóżmy, że chcę zrobić komunikację pomiędzy dwoma Arduino UNO R3. Zasada działania ma być taka, że jeżeli arduino_1 odbierze jakikolwiek (bądź konkretny) sygnał od arduino_2 wtedy wykona określoną czynność.
Zapoznałem się z tutorialem: http://majsterkowo.pl/serial-port/ jednak zastanawia mnie gdzie i jak podpiąć przewody RX oraz TX (wiem że RX -> TX; TX -> RX).?
W powyższym tutku nie ma biblioteki: <SoftwareSerial.h> oraz niema konkretnie zdefiniowanych pinów które mają wysyłać i odbierać dane np: SoftwareSerial mySerial(3, 2); // piny RX, TX , czy nie podając numerów pinów standardowo Arduino będzie się komunikować pinami oznaczonymi na "płytce" jako RX i TX?
Jestem początkujący w zabawie z Arduino więc proszę o jakieś konkrety.
PS. nie wiem czy nie mylę zagadnień, ale czym jest (wg tego na co wskazuje biblioteka SoftwareSerial) serial programowy a czym sprzętowy i jak się komunikują?
załóżmy, że chcę zrobić komunikację pomiędzy dwoma Arduino UNO R3. Zasada działania ma być taka, że jeżeli arduino_1 odbierze jakikolwiek (bądź konkretny) sygnał od arduino_2 wtedy wykona określoną czynność.
Zapoznałem się z tutorialem: http://majsterkowo.pl/serial-port/ jednak zastanawia mnie gdzie i jak podpiąć przewody RX oraz TX (wiem że RX -> TX; TX -> RX).?
W powyższym tutku nie ma biblioteki: <SoftwareSerial.h> oraz niema konkretnie zdefiniowanych pinów które mają wysyłać i odbierać dane np: SoftwareSerial mySerial(3, 2); // piny RX, TX , czy nie podając numerów pinów standardowo Arduino będzie się komunikować pinami oznaczonymi na "płytce" jako RX i TX?
Jestem początkujący w zabawie z Arduino więc proszę o jakieś konkrety.
PS. nie wiem czy nie mylę zagadnień, ale czym jest (wg tego na co wskazuje biblioteka SoftwareSerial) serial programowy a czym sprzętowy i jak się komunikują?
Re: Serial port - odbieranie danych TX -> RX
Serial sprzętowy powinien być wykorzystany w projekcie, o ile nie ma ku temu przeciwwskazań. Dlaczego? Ponieważ jest on obsługiwany przez specjalne układy zawarte w mikrokontrolerze, a co za tym idzie nie obciąża samego mikrokontrolera swoim działaniem (a na pewno robi to w mniejszym stopniu niż Serial programowy). Serial sprzętowy a mikrokontrolerach atmega 8,328 i pokrewnych znajduje się na pinach 2 i 3 (RX oraz TX).
Serial programowy (np. ten z biblioteki SoftwareSerial) zapewnia taką samą funkcjonalność jak sprzętowy, jednak w tym celu wykorzystuje moc obliczeniową mikroprocesora, czyli potencjalnie może spowolnić wykonywanie reszty programu. Serial programowy może być włączony na praktycznie dowolnych pinach mikrokontrolera.
Czyli jeżeli nie wykorzystujesz pinów RX/TX w innym celu, oraz nie wykorzystujesz Seriala sprzętowego do komunikacji z komputerem to użyj sprzętowego, w przeciwnym razie użyj programowego.
EDIT: Oczywiście nie ma żadnych przeciwwskazań, żeby na jednym Arduino wykorzystać Serial sprzętowy, który będzie połączony z Serialem programowym na drugim Arduino, trzeba tylko oczywiście pilnować poprawnie ustawionego bauda.
Serial programowy (np. ten z biblioteki SoftwareSerial) zapewnia taką samą funkcjonalność jak sprzętowy, jednak w tym celu wykorzystuje moc obliczeniową mikroprocesora, czyli potencjalnie może spowolnić wykonywanie reszty programu. Serial programowy może być włączony na praktycznie dowolnych pinach mikrokontrolera.
Czyli jeżeli nie wykorzystujesz pinów RX/TX w innym celu, oraz nie wykorzystujesz Seriala sprzętowego do komunikacji z komputerem to użyj sprzętowego, w przeciwnym razie użyj programowego.
EDIT: Oczywiście nie ma żadnych przeciwwskazań, żeby na jednym Arduino wykorzystać Serial sprzętowy, który będzie połączony z Serialem programowym na drugim Arduino, trzeba tylko oczywiście pilnować poprawnie ustawionego bauda.
-
- Młodszy majsterkowicz
- Posty: 36
- Rejestracja: 30 gru 2013, 14:28
Re: Serial port - odbieranie danych TX -> RX
siwy2411, to podsumowując deklaracja i użycie sprzętowego wygląda w dużym skrócie następująco:
Tylko jak się nie mylę w przypadku użycia sprzętowego, podczas wysyłki i odbioru danych migają diody RX oraz TX na Arduino natomiast używając programowego migania nie zaobserwujemy, zgadza się?
natomiast programowy należy zapisać następująco:Serial.print("Ładny napis");
....
znak = Serial.read();
Serial.print(znak);
...
zgadza się?<SoftwareSerial.h>
SoftwareSerial mySerial(3, 2);
...
mySerial.print("Ładny napis");
...
znak = mySerial.read();
Serial.print(znak);
...
Tylko jak się nie mylę w przypadku użycia sprzętowego, podczas wysyłki i odbioru danych migają diody RX oraz TX na Arduino natomiast używając programowego migania nie zaobserwujemy, zgadza się?
Re: Serial port - odbieranie danych TX -> RX
oba Seriale przed użyciem należy uruchomić, konfigurując ich prędkość oraz ramkę transmisji danych, w przypadku Seriala sprzętowego np. poleceniem Serial.begin(9600); (po liczbie określającej prędkość transmisji można także użyć parametrów, jeżeli domyślna ramka (8 bitów danych, 1 bit stopu, brak bitu parzystości) nam nie odpowiada - więcej o tym można przeczytać tutaj - http://arduino.cc/en/Serial/Begin ), w przypadku SoftwareSerial na pewno bardzo podobnie, jeżeli nie identycznie - nie powiem dokładnie, bo nigdy nie używałem Seriala programowego. Poza tym, podane przez Ciebie kody są poprawne.
co do diod - masz rację, wynika to z prostego faktu, że diody zawarte na płytce są po prostu podłączone do linii sprzętowego Seriala RX/TX i dlatego migają podczas transmisji. Jeżeli podłączysz Serial programowy pod linie, na których też podłączysz diody to również zaobserwujesz takie miganie pokazujące transmisję danych.
co do diod - masz rację, wynika to z prostego faktu, że diody zawarte na płytce są po prostu podłączone do linii sprzętowego Seriala RX/TX i dlatego migają podczas transmisji. Jeżeli podłączysz Serial programowy pod linie, na których też podłączysz diody to również zaobserwujesz takie miganie pokazujące transmisję danych.
-
- Młodszy majsterkowicz
- Posty: 36
- Rejestracja: 30 gru 2013, 14:28
Re: Serial port - odbieranie danych TX -> RX
Tak wiem, że najpierw należy je uruchomić.
siwy2411, a jak wytłumaczyć następujący przypadek... Podłączyłem się moim Arduino przewodami RX i TX do 2 i 3 pinu COMa mojego netbooka (przejściówka z usb na rs232), odpaliłem konsole dla Arduino oraz netbooka i gdy w Arduino wysyłam jakiś ciąg znaków np:
Dodam, iż w Arduino oraz netbooku prędkość jest identyczna: 9600.
Czy to możliwe, że dzieje się ponieważ do komunikacji muszę użyć jakiegoś układu np MAX232N, czy powinno hulać również bez tego?
siwy2411, a jak wytłumaczyć następujący przypadek... Podłączyłem się moim Arduino przewodami RX i TX do 2 i 3 pinu COMa mojego netbooka (przejściówka z usb na rs232), odpaliłem konsole dla Arduino oraz netbooka i gdy w Arduino wysyłam jakiś ciąg znaków np:
to netbook odczytuje to jako ciąg dziwnych, porozrzucanych znaków np: "uy=.*gky yu". Tak samo, gdy próbuję wysłać cokolwiek z netbooka w drugą stronę (pojedyncze litery).Serial.print("Ciąg znaków");
Dodam, iż w Arduino oraz netbooku prędkość jest identyczna: 9600.
Czy to możliwe, że dzieje się ponieważ do komunikacji muszę użyć jakiegoś układu np MAX232N, czy powinno hulać również bez tego?
Re: Serial port - odbieranie danych TX -> RX
hmmm... używasz przejściówki usb<->uart czy przejściówki usb<->rs232 i potem kabelkami z rs232 do układu?
-
- Młodszy majsterkowicz
- Posty: 36
- Rejestracja: 30 gru 2013, 14:28
Re: Serial port - odbieranie danych TX -> RX
Jak pisalem wczesniej, uklad bezposredmio podpiety pod przejsciowke usb-rs232.
Re: Serial port - odbieranie danych TX -> RX
na 99% musisz przepuścić te sygnały przez jakiś konwerter np. max232
za wikipedią:
"Specyfikacja napięcia [szyny RS-232] definiuje "1" logiczną jako napięcie -3V do -15V, zaś "0" to napięcie +3V do +15V."
a atmega działa na logice 0/5V. jeżeli miałeś pecha to mogłeś czasami usmażyć atmegę.
za wikipedią:
"Specyfikacja napięcia [szyny RS-232] definiuje "1" logiczną jako napięcie -3V do -15V, zaś "0" to napięcie +3V do +15V."
a atmega działa na logice 0/5V. jeżeli miałeś pecha to mogłeś czasami usmażyć atmegę.
Re: Serial port - odbieranie danych TX -> RX
Na pewno masz dobrze ustawione bity stopu i wielkość ramki danych?
Re: Serial port - odbieranie danych TX -> RX
Dlaczego nie możesz podłączyć po prostu przez USB?
Re: Serial port - odbieranie danych TX -> RX
witam chciałem połączyć atmegę 328p z przejściówką usb-rs232 rozumiem już że wykorzystanie pinów rx i tx jest niemożliwe (różnica napięć) widziałem jednak w jakimś przykładzie że koś używał softserial do obsługi komend AT z elefonem motorola. Czy w związku z tym zwykły rs (nie konwerter z usb) używwa innych napięć. Do tej pory połączenie atmegi z konwererem rs232-usb powodowało wyświetlanie samych krzaczków (używając sofserial jak i pinów x rx). Ze względu na to że stawiam pierwsze kroki w mikrokonrolerach chciałbym wiedzieć czy konieczne jest użycie konwersji uart rs232 czy może wystarczą jakieś oporniki? A może lepiej zastosować konwerer usb - uart? Kolejny dzień walczę z tematem i nadal krzaczki w erminalu.
Re: Serial port - odbieranie danych TX -> RX
Wiem że mając układ max323 mogę zrobić konwersje, chodziło mi jednak o to, że w tym jednym artykule (niestety nire mogę wrzucić linku) udało się porozumieć z urządzeniem (telefonem) bez takiego układu. Chciałbym wiedzieć czy telefon posługuje się uart'em, czy rs232?
Re: Serial port - odbieranie danych TX -> RX
Dziękuję za pomoc. Udało mi się znaleźć stronę na której zostało dobrze wyjaśnione dlaczego nie można połączyć kontrolera bezpośrednio z rs232. Po krotce można to powiedzieć tak dla mikrokontrolerów (w tym Arduino) napięcie dla stanu niskiego (logiczne 0) jest około 0V, a dla stanu wysokiego (logiczne 1) jest to napięcie bliskie napięciu zasilania. Natomiast dla rs232 zakres stanu niskiego jest od -3V do -25V a dla wysokiego jest to +3V do +25V. Jest to dużo więcej niż może przeżyć nasz mikrokontroler. Mimo iż sygnał może mieć to samo kodowanie to różnice w napięciach powodują że jest on nie zrozumiały między urządzeniami. Dodatkowo Atmegi (nie wszystkie, większość stosowanych z Arduino IDE) mogą wytrzymać max -0,5v
Proszę kolegów o wyrozumiałość, że to co przytaczam nie jest zbyt ścisłe, ale są to informacje podstawowe, jakie mogą oszczędzić początkującym wiele poszukiwań.
Proszę kolegów o wyrozumiałość, że to co przytaczam nie jest zbyt ścisłe, ale są to informacje podstawowe, jakie mogą oszczędzić początkującym wiele poszukiwań.