• 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
Problem z komunikacją radiostacji z Arduino Uno RS232
#1
Witam wszystkich serdecznie w moim pierwszym i mam nadzieję nie ostatnim poście. Swoją przygodę z Arduino zacząłem o zbudowania prostego kontrolera LEDó opartego na płycie Nano. Wszystko zrobiłem zgodnie z opisem i działa. Niestety teraz mam poważniejszy problem. Próbuję zrobić automatykę na płytce UNO do mojej radiostacji opartej o radio Kenwood TS-590s. Założenie jest takie, że poprzez kabel RS232 , port COM w radiostacji wysyłane są informacje o częstotliwości na jakiej pracuje, a więc jakie pasmo radiowe jest aktywne. Arduino na podstawie tych info załącza odpowiedni przekaźnik na listwie przekaźników a one sterują całą automatyką a więc przełączają odpowiednie filtry pasmowe, np na 20M i do tego załączają wybraną antenę. Cała automatyka działa , ale muszę ręcznie przełączać w sterowniku odpowiednie pasmo. Dodatkowo jest wyświetlacza 16,2 który pokazuje częstotliwość oraz załączoną antenę. Teraz tak, ma moduł na MAX232 , przejściówka RS232 TTL. Po wgraniu programu, coś jest ewidentnie nie tak, ponieważ przy starcie wyświetlacz staruje, jest powitanie, a następnie tylko Napis Antena i kHz. To się nie zmienia mimo przełączania pasm. Według mnie nie ma komunikacji poprzez kable. Dodam tylko że kabel OK ponieważ jeżeli podłączam ten sam kabel i łączę moje radio z przełącznikiem antenowym to działa więc ten przełącznik (stara konstrukcja z przed 15 lat) odczytuje dane z radia poprzez RS232 a Arduino nie. Zbudowałem też układ samodzielnie oparty na MAX232 aby wyeliminować uszkodzony moduł. Bez zmian. Na płycie Arduino dioda TX cały czas szybko mruga i nic się nie dzieje. Oczywiście ustawianie prędkości portu nic nie daje. Wydaje mi się, że diody RX/TX powinny mrugać w zależności co się dziej, a TX tymczasem tylko szybko mruga i nic. Tutaj podaję stronę gdzie jest oryginalny kod oraz wideo jak to działa u tego gościa.LINK

Ten fragment musiałem zmienić ponieważ raportowało błąd, jednak to od wyświetlacza, chyba nie ma wpływu na resztę 
Kod:
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // Set the LCD I2C
Na taki:

Kod:
LiquidCrystal_I2C lcd(0x27, 16, 2);  // Set the LCD I2C

Będę wdzięczny za przejrzenie tego kodu i jakieś sugestie. Napisałem do autora, jednak cisza.

Dziękuję i pozdrawiam
 
Odpowiedź
#2
Na płytce NANO piny TX/RX są podłączone do konwertera USB, to zazwyczaj nie przeszkadza gdy nie korzystasz z USB, ale dla zasady nie powinno tak się robić by na jeden pin RX podłączać dwa TX.
Połączenia dwóch urządzeń (1 i 2) po UART robi się łącząc TX1 z RX2, TX2 z Rx1.
Według schematu tego gościa jednak te piny Rx są są połączone do Rx MAX232. No ja bym na pewno tak nie podłączył, ale nie robiłem żadnego układu z MAX232 i może ten opis to nie oznacza TX, tylko wejście TX, które trzeba podłączyć do TX układu TTL.
Więc najlepiej zajrzyj do PDF MAX232 i sobie to sprawdź.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#3
(23-09-2022, 01:35)kaczakat napisał(a): Próbowałem właśnie podłączenia TX z RS232 do RX arduino i analogicznie RX z RS232 do TX arduino oraz bezpośrednio TX do TX oraz RX do RX . Niestety nic to totalnie nie zmienia.
 
Odpowiedź
#4
(23-09-2022, 01:56)PiterSki napisał(a):
(23-09-2022, 01:35)kaczakat napisał(a): Próbowałem właśnie podłączenia TX z RS232 do RX arduino i analogicznie RX z RS232 do TX arduino oraz bezpośrednio TX do TX oraz RX do RX . Niestety nic to totalnie nie zmienia.

TX mruga, bo w każdej pętli układ wysyła zapytanie do radia "IF;", które ma za zadanie wyciągnąć z niego częstotliwość.
Wychodzi na to, że transmisja jest jednostronna - Arduino coś wysyła i nie otrzymuje odpowiedzi.

Sprawdzić to możesz umieszczając w kodzie, po linijce:

Kod:
inByte = (char) Serial.read();

dodać coś takiego:

Kod:
lcd.clear();
lcd.print(inByte);


będziesz wiedział co i czy w ogóle wraca z Kenwooda.

Ze swojej strony w pierwszej kolejności spróbowałbym innych prędkości Seriala - w kodach z linka, które podesłałeś w jednym miejscu jest prędkość 9600, w innym 57600.

Druga sprawa, na którą należałoby zwrócić uwagę to masy - czy na pewno wszystko ma dobre połączenie z masą (bez tego niestety transmisja nie będzie działać).

Zamiast komendy "IF;" wysyłanej w każdej pętli możesz spróbować "FA;".
 
Odpowiedź
#5
(23-09-2022, 11:12)MadMrQ napisał(a):
(23-09-2022, 01:56)PiterSki napisał(a):
(23-09-2022, 01:35)kaczakat napisał(a): Próbowałem właśnie podłączenia TX z RS232 do RX arduino i analogicznie RX z RS232 do TX arduino oraz bezpośrednio TX do TX oraz RX do RX . Niestety nic to totalnie nie zmienia.

TX mruga, bo w każdej pętli układ wysyła zapytanie do radia "IF;", które ma za zadanie wyciągnąć z niego częstotliwość.
Wychodzi na to, że transmisja jest jednostronna - Arduino coś wysyła i nie otrzymuje odpowiedzi.

Sprawdzić to możesz umieszczając w kodzie, po linijce:

Kod:
inByte = (char) Serial.read();

dodać coś takiego:

Kod:
lcd.clear();
lcd.print(inByte);


będziesz wiedział co i czy w ogóle wraca z Kenwooda.

Ze swojej strony w pierwszej kolejności spróbowałbym innych prędkości Seriala - w kodach z linka, które podesłałeś w jednym miejscu jest prędkość 9600, w innym 57600.

Druga sprawa, na którą należałoby zwrócić uwagę to masy - czy na pewno wszystko ma dobre połączenie z masą (bez tego niestety transmisja nie będzie działać).

Zamiast komendy "IF;" wysyłanej w każdej pętli możesz spróbować "FA;".
Czy dobrze rozumiem, że dodanie dwóch powyższych linijek powinno na wyświetlaczu wyświetlić jakieś bajty które przychodzą z radia ? Jeśli tak to nic się nie dzieje, dalej tylko napis kHz oraz Antena. Domyślam się, że przy jakiejkolwiek komunikacji z radiem, kiedy wysyła ono cokolwiek, powinna mrugać choć na chwilę dioda RX ? Nic się niestety takiego nie dzieje. Mam stary komputer z portem RS232, zastanawiam się, czy mogę z tego komputera wysłać jakieś dane i sprawić czy obecny program wgrany na płytce jakoś je odbiera ? aby wykluczyć uszkodzone radio lub jakieś problemy z komunikacją.
 
Odpowiedź
#6
Przydałoby się takie Arduino, które ma UART niezależny od USB, wtedy możesz sobie na jeden coś wysłać za maxem zewrzeć piny TX z RX i zobaczyć, czy wysyłane dane wracają na monitor portu COM.
Zresztą i tak możesz to zrobić, albo niezależny konwerter USB-UART, albo użyj do tego Arduino. Zwierasz RST do GND kabelkiem na stałe, to wyłącza UART atmegi i w ogóle cały uC, połączasz TX UART z maxa do TX Arduino, TX Arduino to RX modułu UART na płytce Arduino, dlatego tu akurat TX do TX, to samo z RX, odpalasz monitor i sprawdzasz czy MAX od strony RS232 działa OK. Jak coś o niego dolatuje to zmieniając prędkość na monitorze portu COM ustalisz też jaka jest prawidłowa prędkość UART.
Też nie mam pewności, skoro nie programujesz, że w ogóle prawidłowo napisałeś tą część z wyświetleniem bajtu. Jak wstawisz to w złym miejscu, to jest natychmiast nadpisywane tymi tekstami "Antena i kHz".
Dla testu możesz dodać delay(500); po print.
Poza tym warto mieć na LCD wyświetlany jakiś licznik upływających sekund, wtedy widać, że program wysyła aktualne dane, a nie że utknął w jakieś bocznej pętli, a ty sobie analizujesz artefakt z momentu uruchomienia programu parę minut temu. Można też w tym celu dodać jakiś migający led.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#7
Wydaje mi się że znalazłem problem, choć nie jestem pewien na 100%. Podłączyłem cały układ do starego laptopa z portem RS232 . Pobrałem jakiś darmowy program do testu portu RS232. Przy jego użyciu mogłem wysłać tekst, pakiety i inne formy do urządzenia docelowego. Wysyłając sam tekst na wyświetlaczu w Arduino w lewym górnym rogu (pozycja kursora 1,1) po kolei wyświetlały się wszystkie wysłane znaki. Nie wiem czy samo coś zmienia, bo radio nie wysyła czystego tekstu tylko jakieś inne dane. Ale tak czy inaczej taka sytuacja. Spróbuję zrobić jak napisał @kaczakat.
 
Odpowiedź
#8
Nie ma znaczenia czy jest wysyłany tekst czy inne dane, tylko w jakiej formie, bo jeżeli wysyłane są cyfry, litery i znaki w formie tekstu to mogą być tak odbierane, to są po prostu wybrane wartości między 0 a 255, nie wszystkie wartości bajta mają graficzną interpretację w ASCII. Natomiast jeśli przesył jest jako dane, w Arduino zamiast "print"użylibyśmy "write", to na ekranie monitora portu lub ekranie LCD zobaczymy krzaki/nic/normalne znaki, z takim samy rozkładem prawdopodobieństwa jak rozkładają się przesyłane wartości danych.
Można więc przesłać liczbę przez serial jako "123" i wtedy wysyłane jest 3x8bitów każdej cyfry, albo przesłać 8 bitów liczby 123 (+ dla każdego przypadku bity typowe dla wybranej formy transmisji UART doklejane do każdego bajta).
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#9
Czyli generalnie moduł RS232 odbiera dane i przesyła je do arduino i on je widzi, ponieważ wyświetla wysłany tekst, więc jeśli dobrze rozumiem to sam program i sama płytka działają OK ? problem prawdopodobnie w radiostacji ?
 
Odpowiedź
#10
Co było zepsute lub "zepsute" dowiesz się jak to naprawisz.

Ktoś już Ci pisał na 4bocie, że prędkości mogą być różne i już nie pogadasz.
Kolejna sprawa, że dalej możesz mieć problem z Arduino, możesz mieć np. nieco inną prędkość pracy uC, prędkość UART jest zsynchronizowana z głównym zegarem uC, można go ustawić źle, albo może być rozkalibrowany, najgorzej jak niewiele i 2 z 3 urządzeń będą gadały ze sobą, 1-2, 2-3, a 1-3 nie. Ale to akurat się zdarza jak się przełączy na wewnętrzny oscylator 8MHz, zewnętrzne kwarce trzymają parametry bardzo dobrze.
Wybrane prędkości UART generują mniej błędów na wybranych prędkościach zegara, np. 115200 działa słabo z zegarem 16MHz, ale włącza się tryb U2x i działa jako tako, a mniej błędów generuje prędkość 125k, 250k, 500k, 1M.
Dlatego są takie dziwne kwarce jak 11.0592MHz, bo one generują zerowe błędy przy typowych dla UART prędkościach jak 9600, 19200, 57200, 115200 - by podać tylko te popularniejsze.
Są jeszcze inne parametry w ustawieniach UART poza baudrate, jak już nic lepszego nie będzie do sprawdzenia to zawsze jeszcze będą one, choć to mało prawdopodobne.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości