Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Arduino UNO - komunikacja RS 232 z innymi płytkami - jak ?

JordanH 21 Mar 2015 18:14 3330 22
  • #1 21 Mar 2015 18:14
    JordanH
    Poziom 11  

    Witam, mam prosty projekt na Arduino, jakieś 2 czujniki które zbierają mi pomiary.
    Wiem, że jest takie coś jak port szeregowy w Arduino.
    Zadanie jakie przede mną postawiono to : stworzenie sieci, tzn. Mam płytkę nadrzędną z Raspberry PI ( master) , która za pomocą RS 485 konwertowanego na Rs 232 ma w wybranych chwilach odpytywać moją płytkę(slave) o pomiary.

    Jestem w tych sprawach zielony, co do Rs 232 znalazłem w sieci tylko tyle, że będę potrzebował Konwerter UART/RS232 dla logiki 5V i 3.3V oparty o MAX3232.
    Z jednej strony podpina się go do wejść portu szeregowego na Arduino ( TX0 , RX0), a z drugiej dostanę wejście i wyjście w standardzie RS232. I co teraz ? Z czym to łączyć dalej ?

    0 22
  • #2 03 Kwi 2015 23:19
    Sebus504
    Poziom 11  

    Witam, pogadamy jak "zielony z zielonym". W tej materii też jestem raczkujący ale to co wiem to mogę ci powiedzieć. Niepotrzebnie konwertujesz sygnały rs485 na rs232. Pewnie chcesz to połączyć w protokole modbus więc rs485 jest chyba odporniejszy (przemysłowy) od rs232 pomijając odległości. Do arduino potrzebujesz układu max485 (wpinasz go w rx,tx i dodatkowy pin do przełączania np 2 - przykładów wiele w sieci). Zacznij od prostego układu z diodą led wystaw sobie ją na razie w rs232 podepnij do komputera i badaj (program np qmodbus ) też od tego zaczynałem. Nikt mi nie podsunął na talerzu skryptu, ale dzięki temu wiem już coś więcej.

    0
  • #3 12 Kwi 2015 19:18
    JordanH
    Poziom 11  

    Mhm. Na dzień dzisiejszy wygląda to tak, że wszystko chcę zrobić na RS485. Mam 2 płytki arduino i Raspberry PI. Chcę przy użyciu konwertera MAX 485 zrealizować tą komunikację. Raspberry ma na przemian odpytywać raz jedno raz drugie arduino o pomiary z czujników. Wszelkie wskazówki, schematy, kody mile widziane.
    Z tego co przeszukałem w google, nie jest to taka prosta sprawa.

    0
  • #4 12 Kwi 2015 22:10
    namok
    Poziom 25  

    Nim zaczniesz bawić się sr485 przetestuj komunikację po rs232 punkt-punkt. W sieci znajdziesz przykłady modbusa dla malinki i arduino. Na początek spróbuj połączyć dwa arduino ze sobą - powinno być łatwiej. Tutaj masz biblioteki.

    0
  • #5 12 Kwi 2015 23:36
    tzok
    Moderator Samochody

    RS232 w podstawowej wersji to tylko połączenie punkt-punkt, jeśli masz wiele węzłów sieci to lepiej się nada SPI lub I2C. Obsługa jest prosta, wybierasz urządzenie, wysyłasz zapytanie i oczekujesz odpowiedzi (może być w tle, na przerwaniu). Urządzenia podrzędne oczekują żądań, kiedy nadejdzie żądanie to odpowiada i wraca do nasłuchiwania. Jedyny problem to Raspberry PI działa w logice 3.3V, a Arduino w tradycyjnej TTL 5V.

    0
  • #6 13 Kwi 2015 13:07
    Sebus504
    Poziom 11  

    A dlaczego nie modbus rtu? To co mi się udało to z komputera odpytać arduino o temp, wilgotność itp. podpięte pod fateka działa (właśnie modbus rtu) Co prawda na razie "dzieje się to" na stole, zobaczymy jak włącze to w instalację.

    0
  • #7 13 Kwi 2015 19:00
    namok
    Poziom 25  

    tzok napisał:
    ... jeśli masz wiele węzłów sieci to lepiej się nada SPI lub I2C. Obsługa jest prosta, wybierasz urządzenie, wysyłasz zapytanie i oczekujesz odpowiedzi (może być w tle, na przerwaniu).

    Tyle że to zadziała na małej odległości a kolega raczej preferuje duże odległości. O rs232 napisałem dlatego że nie wymaga konwertera a zbyt wiele nowych rzeczy na raz raczej szkodzi niż pomaga. Dodatkowo testy komunikacji modbus pomiędzy arduino nie wymagają konwertera poziomów logicznych.

    0
  • #8 13 Kwi 2015 19:45
    Sebus504
    Poziom 11  

    Dokładnie. Najpierw rs232 na stole, a jak będzie sukces to kolejny krok rs485. Podstawowy sketch mogę Ci kolego wkleić (zbierał dane typu barometr, ciśnienie temp dalej do fateka i dalej do weinteka) Działało przynajmniej na stole kilka dni.

    0
  • #9 16 Maj 2015 23:16
    JordanH
    Poziom 11  

    Potrzebuję rozwiązanie pod specyficzną sytuację.
    Master będzie wysyłał ramkę danych ( moje Arduino to slave) z adresem, w momencie gdy będzie to adres mojego modułu ( powiedzmy ID=2), mam mu wysłać jakąś ramkę danych.
    Jak to zrealizować w kodzie ?
    Znalazłem poniższy przykładowy kod pod Rs232, który odczytuje jakiś napis i konwertuje go na duże litery, po czym wysyła. Czy to mniej więcej tak ma działać ?

    Link

    1
  • #10 16 Maj 2015 23:37
    tzok
    Moderator Samochody
  • #11 16 Maj 2015 23:42
    strikexp
    Poziom 27  

    Konwersję na litery lub cyfry ASCII robisz za pomocą specjalnych funkcji. ale to działa tylko przy wysyłaniu do terminala w PC. Pomiędzy mikroprocesorami przesyła się zwyczajnie zmienne.
    Jak szukasz kodziku do RS-232 to ci dam taki uproszczony, używany dziś przeze mnie:


    Kod: c
    Zaloguj się, aby zobaczyć kod


    Kod wysyła znak A do konsoli w kompie.

    0
  • #12 17 Maj 2015 10:58
    JordanH
    Poziom 11  

    Przerobiłem ten przykładowy kod pod Arduino, od kolegi 2 posty wyżej pod mój program.
    Wstawię szkielet tego, czy dobrze to rozumiem ? Przypomnę jakie jest założenie. Na Arduino mam jakieś czujniki i zbieram pomiary. A przez RS inna płytka może wysłać zapytanie o wynik pomiarów, z tym, że muszę zweryfikować czy zapytanie jest skierowane do mnie ( mój moduł ma jakis tam z góry ustalony adres np 2 ).

    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    0
  • Pomocny post
    #14 17 Maj 2015 15:09
    namok
    Poziom 25  

    U mnie działa ;)

    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    inputString musisz kasować zawsze po odebraniu pełnej ramki a nie tylko wtedy gdy jest kierowana do Ciebie.

    1
  • #15 17 Maj 2015 21:57
    JordanH
    Poziom 11  

    Działa na linii komputer - Arduino. Tylko teraz jak mogę takie coś połączyć w zestaw 3 modułów ? (master + 2 slave) ? To ma być RS 485. Potrzebuję kostkę MAX 485 z tego co znalazłem w necie, mam wyjścia A i B ( 2 linie sygnałowe). I jak to mam połączyć skoro będę miał 3 takie kostki ? Ma ktoś jakieś doświadczenie ?

    0
  • #16 17 Maj 2015 23:18
    tzok
    Moderator Samochody
  • #17 18 Maj 2015 06:55
    namok
    Poziom 25  

    tzok napisał:
    Po co jakieś dodatkowe kostki skoro w AVR masz gotowe magistrale stworzone do takich celów: I2C/TWI i ew. SPI?

    A na jaka odległość zrobisz taką komunikację?

    @JordanH:
    1. Króciutki opis sieci rs485 https://arduino-info.wikispaces.com/RS485-Modules?responseToken=092db9080c4c6ab01d1deead67bfb2895
    2. Przykład wykorzystania gotowych modułów z max485(na znanym portalu aukcyjnym od 10zł) https://arduino-info.wikispaces.com/SoftwareSerialRS485Example Wykorzystano tu bibliotekę SoftwareSerial dzięki czemu możesz wykorzystać do komunikacji dowolne piny w arduino(piny uartu(0 i 1) są wykorzystywane do komunikacji pomiędzy arduino a komputerem i podczas choćby ładowania programu musiałbyś rozłączać magistralę).
    Możesz też kupić same kostki z złożyć płytkę. Schematy znajdziesz na tym forum.

    Edit:
    Przy gotowych modułach musisz uważać bo zazwyczaj są na 5V a malinka ma 3,3V na pinach.

    0
  • #18 18 Maj 2015 17:34
    tzok
    Moderator Samochody
  • #19 18 Maj 2015 17:48
    namok
    Poziom 25  

    tzok napisał:
    namok napisał:
    A na jaka odległość zrobisz taką komunikację?
    W praktyce do kilkudziesięciu metrów.

    Bez dodatkowych elementów?

    0
  • #20 30 Maj 2015 17:14
    gregor_1980
    Poziom 14  

    A nie lepiej będzie całą komunikację zbudować jako LAN? ENC28j60 jest dosyć tani, do tego duże możliwości rozbudowy i możliwość kontrolowania całości przez PC. Wszystko spinasz do routera i sprawa załatwiona. Zamiast kabla może też być bezprzewodowo np. ESP8266, a RPI może robić za router mając kartę usb wifi. Więc jaka ma być odległość między RPi a Arduino? Z moich doświadczeń wynika że ani Arduino ani RPi nie lubią długich kabli, na ten przykład mam u rodziców w domu podłączone arduino mega do rpi poprzez usb, kabel ma jakieś 10m, gdy w okolicy jest burza to rpi jak i arduino potrafi się zawiesić dlatego wszystkim odradzam długie kable przy rpi lub arduino bez optoizolacji.

    0
  • #21 31 Maj 2015 13:22
    dondu
    Moderator Mikrokontrolery Projektowanie

    gregor_1980 napisał:
    Z moich doświadczeń wynika że ani Arduino ani RPi nie lubią długich kabli, na ten przykład mam u rodziców w domu podłączone arduino mega do rpi poprzez usb, kabel ma jakieś 10m, gdy w okolicy jest burza to rpi jak i arduino potrafi się zawiesić dlatego wszystkim odradzam długie kable przy rpi lub arduino bez optoizolacji.

    Żaden z mikrokontrolerów nie zinterpretuje prawidłowo, nieprawidłowego sygnału w dodatku przekraczającego elektryczne parametry graniczne :)
    Należy więc zapewnić prawidłową filtrację sprzętową sprzętu i sygnałów.
    Mikrokontrolery się nie zawieszają - taki może być tylko pozorny efekt błędu.

    0
  • #22 31 Maj 2015 17:48
    gregor_1980
    Poziom 14  

    Zawieszanie się to tylko umowne stwierdzenie, tam jest niewidoczny cudzysłów :) Swoją drogą to jestem ciekawy rozwiązań przeciwprzepięciowych 10 metrowego kabla usb. Uziemienie ekranu kabla nie pomogło.

    0