• 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
Nieprawidłowe bajty wysyłane/odbierane RS-em
#1
Witam wszystkich potrzebuję pomocy.

Posiadam Arduino Uno oraz kabel RS232-USB

Po sprzęgnięciu w/w ze sobą, tj. arduino podłączony i zasilany po USB do komputera nr.1 oraz kabel RS
podłączony do komputera nr.2 dostaję nieprawidłowe komunikaty.

Wysłanie dokładnie tego samego ciągu znaków, tj. "ABCDEF" (HEX: 41 42 43 44 45 46) objawia się następująco:

PC->ARDUINO (podpięte tylko GND i PC[Tx]=AR[Rx]):
Monitor portu szeregowego arduino odbiera (HEX): 5F AF DD D5 CD 1

ARDUINO->PC (podpięte tylko GND i AR[Tx]=PC[Rx]):
Program Terminal v1.93b odbiera (HEX): 5F E5 DD D5 CD 01

Ani w jednym ani w drugim przypadku bajty nie zgadzają się z oryginałem, natomiast ZAWSZE zgadzają się pod względem długości komunikatu (testowane inne dłuższe i krótsze komunikaty).

Jeżeli coś bym miał obstawiać to to że Arduino coś przekłamuje, bo np. zwierając
Tx i Rx w kablu RS-USB sam sobie wysyła poprawne komunikaty.

Podobnie w arduino wysłanie "do siebie" (ale nie po złączu Tx) komunikatu "ABCDEF" w monitorze portu szer. widoczne jest prawidłowo. O co tu chodzi ?

Ustawienia są raczej prawidłowe, tj. w Arduino jedynie Serial.begin(9600) a w Terminalu v1.93b prędkość tak samo, data bit 8, parity none, stop bits 1 (tj. format 8N1), w samym kodzie Arduino nie ma niczego co mogło by modyfikować odbierane/wysyłane bajty.
 
Odpowiedź
#2
Pokaż kod i schemat. Do Arduino nie podłącza się RS232 (operuje na sygnałach elektrycznych +/-15V) tylko konwertera USB-UART (operuje na sygnałach elektrycznych 0-5V, czasami musi być mniej niż 5V). RS232 pewnie coś by tu upaliło, raczej tylko Ci się nazwy pomyliły.
Konwertery obsługują wybrane prędkości komunikacji, ważne jaki masz tam chip, sprawdź jakie dla wybranej prędkości przy używanym kwarcu generuje to błędy. Czasami szybciej oznacza również mniej błędów, przynajmniej w granicach kabli <1m. Dwa połączone ze sobą i takie same uC, z takim samym kwarcem mają takie same błędy, co w rezultacie je niweluje (chodzi o czasy długości generowanych impulsów, oba mają nieco szybsze lub wolniejsze tak samo).
Dla 9600 znowu każdy mi znany udźwignąłby bez problemu, może najzwyczajniej jest wadliwy, do zabawy z Arduino polecam FTDI (czerwona płytka na Allegro).
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#3
Mowa dokładnie o takim kablu zasilanym oczywiście 5V po USB więc nie ma mowy o napięciu 15V:



Link





Schemat połączenia (Link2) już opisałem ale dla jasności sprawy:



- pin 2 kabla (Rx) -> arduino pin 1 (Tx)



- pin 3 kabla (Tx) -> arduino pin 0 (Rx)



- pin 5 kabla (GND) -> arduino GND






Przykład kodu obierania komunikatów przez arduino:


Kod:
int incomingByte = 0;

void setup() {
  Serial.begin(9600);
}

void loop() {

  if (Serial.available() > 0) {

    incomingByte = Serial.read();
    Serial.println(incomingByte, HEX);
  }
}




I nadawania z arduino do PC:


Kod:
void setup() {
  Serial.begin(9600);
}

void loop() {

    delay(1000);
    Serial.print("ABCDEF");
  }
}


Jeżeli chodzi o CHIP, wg opisu siedzi w nim CH340
 
Odpowiedź
#4
Piny 0 i 1 w UNO/NANO są już podłączone do konwertera wbudowanego w płytkę, nie można ich używać jednocześnie do wysyłania na USB (przez ten wbudowany) i jednocześnie do jakiegoś zewnętrznego. Te płytki mają tylko 1 UART, więc do zewnętrznego użyj programowego - SOFTSERIAL.
Kup sobie konwerter USB- UART, tanie konwertery USB-RS232 nie generują co prawda napięć w pełnym zakresie, ale dalej to jest RS3232, a nie UART TTL 5V. I w sumie nie nadają się za bardzo do niczego.
Np.: https://allegro.pl/oferta/rs232-uart-ft2...7221336036, koszt powinien być w granicach 15zł, jak przy okazji brakuje Ci w warsztacie multimetru, analizatora logicznego (np. klon SALEAE) czy programatora (najtańszy USBASP) to może znajdziesz to wszystko u jakiegoś sprzedawcy z darmową dostawą do paczkomatu.
PS.
Może ten kabel jest 5V TTL tylko również sprzedawca nie wie co sprzedaje, ale do Arduino tak czy inaczej są wygodniejsze i jednoznacznie opisane.
ps2.
UART ma odwróconą logikę, tam gdzie bit 0 w RS232 w UART będzie 1 i to chyba wyjaśnia Twój problem, konwerter USB-232 jest może w zakresie 5V, ale działa odwrotnie.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości