RS-485 and Arduino Pro mini

Тема в разделе "Arduino & Shields", создана пользователем Rabil', 27 фев 2016.

  1. Onkel

    Onkel Гуру

    ну так кто-то должен что-то послать, чтобы мигало.
     
  2. Alex19

    Alex19 Гуру

    Позволю предположить, что Вы начинающий, поэтому постараюсь ответить просто.

    Когда-то, давно начинал с данной статьи - http://adatum.ru/podklyuchenie-konvertera-rs-485-v-ttl-k-arduino.html. Тоже использовал данный модуль для реализации RS-485.

    1. Подключаем модули к Arduino.
    Схема взята из статьи выше, ссылка на схему подключения в большом разрешении - http://adatum.ru/wp-content/uploads/2014/08/test789.jpg.
    [​IMG]
    Не большое отступление, у меня были случаи когда эти модули RS-485, были не качественно спаяны. В частности R0 и RE были соединены, проверьте мультиметром.

    Подключаем R0 модуля на RX ардуины (0 пин), DI на TX ардуины, DE и RE соединяем и отправляем его к примеру на 5 пин (разницы нет, можно на любой свободный) в коде ниже будет использоватся 5.

    Судя по фото, у Вас данная плата - https://www.sparkfun.com/products/12640 или ее клон. Если так, то VCC модуля соединяем с VCC ардуины, GND с GND ардуины. Да кстати, данная плата может быть 2 испополнениях как 3.3V/8MHz, так и 5V/168MHz и это Pro Micro.
    Надеюсь у Вас 5V c сзади есть отметка.
    [​IMG]
    Модуля должно быть минимум 2 и к каждому подключена ардуина, как на рисунке выше, где описана схема подключения. Исхожу из того, что ардуины одинаковые.
    2. Теперь по поводу кода.
    Ваш код не будет работать во первых он под другую плату и требует UART-USB адаптера, вот код, увы проверить нет возможности, нет модуля под рукой.

    Мастер
    Код (C++):
    #define DIR 5 // переключатель прием\передача

    void setup(){
      Serial.begin(9600);
      while (!Serial) {
        ; // wait for serial port to connect. Needed for native USB
      }
      Serial1.begin(9600);  

      pinMode(DIR, OUTPUT);
      digitalWrite(DIR, HIGH); // включаем передачу
    }

    void loop()
    {
       byte id = 1;
       Serial1.write(id); // отправляем первый байт, в нем ID
       Serial.print(id);
       
       delay(500);
    }
    Слейв
    Код (C++):

    #define DIR 5 // переключатель прием\передача
    #define ID 1  // номер ардуины

    void setup()
    {
      Serial.begin(9600);
      while (!Serial) {
        ; // wait for serial port to connect. Needed for native USB
      }
      Serial1.begin(9600);
      pinMode(DIR, OUTPUT);
      digitalWrite(DIR, LOW); // включаем прием
    }

    void loop()
    {
      if (Serial1.available() > 0)
      {
        byte id = Serial1.read(); // читаем байт, в нем для кого этот пакет  
        if (id == ID)
        {
            Serial.println("Ok");
         }
        else
        {
          Serial.println("Not ok");
        }
      }
    }
     
    Теперь о мелочах, которые раздражают у Вас Pro Micro если верить фото. Плата немного капризная для начинающего, Serial порт прыгает и т.д. На своей оригинальной Micro приходится открывать монитор Serial порта, чтобы пройти Setup c while (!Serial). Хотя у данной платы больше возможностей, чем у Nano, Mini или UNO.

    Как заливать, открываем 2 Arduino IDE к примеру 1.6.5 и 1.6.7 заливаем сначала мастер в 1.6.5 и открываем монитор порта, затем заливаем слейв в 1.6.7 и открываем монитор порта.
     
    Последнее редактирование: 28 фев 2016
  3. Rabil'

    Rabil' Нерд

    УРАААААААААААААААААААААААА
    победааааааааааааааааааааааааа!!!!!!!!!!!!

    Только вот в чем вопрос

    я решил проверить реально ли все работает и отсоеденил провод А а он продолжает передавать данные на приемник и приемник принимает

    а вот отключаю В

    перестает работать

    ведь у нас подвум проводам передает

    ядумаю ты понял что я имею в виду

    и что странно к примеру от одного модуля rs 485 отсоединяю землю и питание он все равно продолжает работать

    что одна ардуинка может питать два модуля???

    и еще пробовал на дуине rx отсоеденить и он прдолжает работать

    а вот отсоеденяю tx

    перестает работать

    хм получается питание одной ардуинки лишнее, rx соединение лишнее, соединение "А" на RS 485 лишнее???

    че то странновато

    а так вроде работает передает
     
  4. Onkel

    Onkel Гуру

    да нет. Если посмотрите даташиты на 485 чип, то поймете, что не странновато. Впрочем, на данном этапе я бы посоветовал не особо экспериментировать.
     
  5. Megakoteyka

    Megakoteyka Оракул Модератор

    Сигнал передается сразу по двум проводам. На коротких расстояниях и низких скоростях может и одного провода хватить, но никакой гарантии работы при этом нет и на сигнал будут воздействовать наводки.
    А вообще, прежде чем ставить эксперименты, попробуйте почитать про RS-485 хотя бы википедию, тогда и поймете, почему нужно 2 провода.