Специальные цены   новые товары
+ Ответить в теме
Показано с 1 по 9 из 9

данные через frsky-d (имитация frsky-hub)

Тема раздела Самодельная электроника, компьютерные программы в категории Общие вопросы; Что-то не осилил я общение с гуглом и не смог подобрать правильный вопрос. Итак имеются: 1. Airwolf rx-F702 (внешне очень ...

  1. #1

    Регистрация
    29.12.2015
    Адрес
    Москва.
    Возраст
    29
    Сообщений
    30

    данные через frsky-d (имитация frsky-hub)

    Что-то не осилил я общение с гуглом и не смог подобрать правильный вопрос.
    Итак имеются:
    1. Airwolf rx-F702 (внешне очень похож на rx-F802/rx-F801, термоусадку пока не вскрывал, маркировку микропроцессора не видел)
    2. Turnigy 9x (er9x) + FrSKY DJT
    3. USB ttl / Arduino Pro Mini

    На приемнике (1) обнаружена телеметрия (через резисторный делитель уже вижу напряжение АКБ), и пин с маркировкой Rx.
    Нашел в интернетах, что на пин Rx можно повесить USART со скоростью 9600. Предполагаю, что подключив этот Rx к Tx`у USB-ttl и отправив определенную строку можно передать ее на экран пульта Турниги.
    Но вот что написать туда (в Usart), чтобы на пульте появилось значение? например, высоты Alt?

  2.  
  3. #2

    Регистрация
    29.12.2015
    Адрес
    Москва.
    Возраст
    29
    Сообщений
    30
    Нашел что-то похожее
    Надергал упрощенный скетч
    Код:
    #include <SoftwareSerial.h> // To communicate with the FrSky RX
    #define PIN_SerialTX 2       // the pin to transmit the serial data to the frsky telemetry enabled receiver
    #define FRSKY_USERDATA_BARO_ALT_B   0x10 //#define FRSKY_USERDATA_GPS_ALT_B    0x01
    
    int inByte = 0;         // incoming serial byte
    SoftwareSerial mySerial(3, PIN_SerialTX,true); // Software Serial is used including the Inverted Signal option ( the "true" in the line below )
    
    void setup() {
      // start serial port at 9600 bps:
      Serial.begin(9600);
      while (!Serial) {
        ; // wait for serial port to connect. Needed for native USB port only
      }
      establishContact();  // send a byte to establish contact until receiver responds
      mySerial.begin(9600);
    }
    
    
    void loop() {
      // if we get a valid byte, read analog ins:
      if (Serial.available() > 0) {
        // get incoming byte:
        inByte = Serial.parseInt();
        if (inByte!=0){
        Serial.println(inByte, DEC);   
        // read first analog input, divide by 4 to make the range 0-255:
        SendValue(FRSKY_USERDATA_BARO_ALT_B, inByte);
        }
       Serial.flush();
      }
    }
    
    
    void establishContact() {
      while (Serial.available() <= 0) {
        Serial.println("Ready");   // send a capital A
        delay(300);
      }
    }
    
    void SendValue(uint8_t ID, uint16_t Value) {
      Serial.println("Try to send value");   // send a capital A
      uint8_t tmp1 = Value & 0x00ff;
      Serial.println(tmp1, DEC); 
      uint8_t tmp2 = (Value & 0xff00)>>8;
      Serial.println(tmp2, DEC); 
      
      mySerial.write(0x5E);
      mySerial.write(ID);
      if(tmp1 == 0x5E) {
        mySerial.write(0x5D);
        mySerial.write(0x3E);
      }
      else if(tmp1 == 0x5D) {
        mySerial.write(0x5D);
        mySerial.write(0x3D);
      }
      else {
        mySerial.write(tmp1);
      }
      if(tmp2 == 0x5E) {
        mySerial.write(0x5D);
        mySerial.write(0x3E);
      }
      else if(tmp2 == 0x5D) {
        mySerial.write(0x5D);
        mySerial.write(0x3D);
      }
      else {
        mySerial.write(tmp2);
      }
      mySerial.write(0x5E);
    }
    Запитал ардуину от 3,3В соеденил землю с передатчиком и пин2 с пином RX.
    Отправляю на ардуину 1000, в ответ вижу:
    1000
    Try to send value
    232
    3

    Значит tmp1= 232, tmp2=3
    На приемнике значение Alt 0.0 (то есть ничего не меняется)

  4. #3

    Регистрация
    11.01.2011
    Адрес
    Ярославль
    Возраст
    31
    Сообщений
    1,637
    На Турнигу уже передавали телеметрию, перепрошив ее на Er9 и подпаяв проводки к АтМега.

    Я пробовал гнать данные через порт 9600, он не прозрачный. Приходится энкапсулировать данные и помечать начало посылки. Потом на мониторчик выводил.
    На этом форуме был код.

  5. #4

    Регистрация
    29.12.2015
    Адрес
    Москва.
    Возраст
    29
    Сообщений
    30
    Не, на самой турниге проблем пока не вижу, уровень сигнала и напряжение на делителе A1 выводится замечательно.
    Но есть другие параметры (Alt, Gspd, Vspd, проч.), вот я и пытаюсь на Rx приемника подать нужную строку и там вроде не всё так прозрачно...

  6.  
  7. #5

    Регистрация
    11.01.2011
    Адрес
    Ярославль
    Возраст
    31
    Сообщений
    1,637
    Цитата Сообщение от Tohyich Посмотреть сообщение
    Но есть другие параметры (Alt, Gspd, Vspd, проч.), вот я и пытаюсь на Rx приемника подать нужную строку и там вроде не всё так прозрачно...
    А, сымитировать hub, подключенный к D-приемнику. На Гитхабе находил имитацию на Ардуино.

    Кстати, не так давно испытывал Frsky S-port на новых приемниках. Он работает как однопроводной rxtx serial. На rcgroups есть код для Ардуино - имитирует всякие датчики.

  8. #6

    Регистрация
    29.12.2015
    Адрес
    Москва.
    Возраст
    29
    Сообщений
    30
    Так я инвертированный УАРТ и сымитировал (код во втором сообщении) но на Турниге ничего не отображается. То ли прошивка в приемнике обрезанная, то ли я где то косячу...

  9. #7

    Регистрация
    11.01.2011
    Адрес
    Ярославль
    Возраст
    31
    Сообщений
    1,637
    В Турниге не нужно искать и включать отображение датчиков?
    На Таранисе нужно через меню приемника Search telemetry data - оно думает-думает, а потом показывает, какие датчики есть в потоке телеметрии. Выбираю и размещаю.

  10.  
  11. #8

    Регистрация
    29.12.2015
    Адрес
    Москва.
    Возраст
    29
    Сообщений
    30
    В меню настроек телеметрии я могу выбрать несколько параметров, которые будут выведены на экран. Но все выводится с нулями.

    Нашел еще один вариант, но тоже ноль реакции. Напряжение на пине ардуины меняется, значит передача идёт, но до турниговского экрана не доходит...
    Последний раз редактировалось Tohyich; 10.02.2018 в 18:13.

  12. #9

    Регистрация
    29.12.2015
    Адрес
    Москва.
    Возраст
    29
    Сообщений
    30
    C самодельным приемником работает такой код:
    Код:
    #include <SoftwareSerial.h> // To communicate with the FrSky RX
    #define PIN_SerialTX 2       // the pin to transmit the serial data to the frsky telemetry enabled receiver
    #define FRSKY_USERDATA_BARO_ALT_B   0x10 //#define FRSKY_USERDATA_GPS_ALT_B    0x01
    #define FRSKY_USERDATA_GPS_SPEED_B  0x11
    #define FRSKY_USERDATA_GPS_SPEED_A  0x19
    int inByte = 0;         // incoming serial byte
    int analogPin = 3; 
    
    SoftwareSerial mySerial(0, PIN_SerialTX,true); // Software Serial is used including the Inverted Signal option ( the "true" in the line below )
    
    void setup() {
      Serial.begin(115200);
      while (!Serial) {
        ; // wait for serial port to connect. Needed for native USB port only
      }
    
      mySerial.begin(9600);
      pinMode(A3, INPUT_PULLUP);
    }
    
    
    void loop() {
    
    inByte=analogRead(analogPin);     // read the input pin
      Serial.println(inByte); 
        SendValue(FRSKY_USERDATA_BARO_ALT_B, inByte);
        SendValue(FRSKY_USERDATA_GPS_SPEED_B, inByte);
        SendValue(FRSKY_USERDATA_GPS_SPEED_A, inByte);
        delay(100);
    }
    
    
    void establishContact() {
      while (Serial.available() <= 0) {
        Serial.println("Ready");   // send a capital A
        delay(1000);
      }
    }
    
    void SendValue(uint8_t ID, uint16_t Value) {
      uint8_t tmp1 = Value & 0x00ff;
      uint8_t tmp2 = (Value & 0xff00)>>8;
      mySerial.write(0x5E);
      mySerial.write(ID);
      if(tmp1 == 0x5E) {
        mySerial.write(0x5D);
        mySerial.write(0x3E);
      }
      else if(tmp1 == 0x5D) {
        mySerial.write(0x5D);
        mySerial.write(0x3D);
      }
      else {
        mySerial.write(tmp1);
      }
      if(tmp2 == 0x5E) {
        mySerial.write(0x5D);
        mySerial.write(0x3E);
      }
      else if(tmp2 == 0x5D) {
        mySerial.write(0x5D);
        mySerial.write(0x3D);
      }
      else {
        mySerial.write(tmp2);
      }
      mySerial.write(0x5E);
    }
    со второго пина ардуины идет провод на RX приемника.
    пин A3 через 10К реостат идет на землю.
    Вращая реостат меняем значение высоты и скорости, наблюдаем изменения на передатчике.
    Видимо в покупном прошивка не та. Надо перешивать.

+ Ответить в теме

Похожие темы

  1. Продам Кузов Чероки красный с имитацией днища Pro Line
    от Sergey 152 region в разделе Барахолка. Автомодели - комплектующие
    Ответов: 7
    Последнее сообщение: 08.05.2018, 13:43
  2. DLE-55 у кого есть данный двигатель поделитесь опытом
    от Modelist-Andrei в разделе Бензиновые двигатели
    Ответов: 292
    Последнее сообщение: 08.10.2017, 20:36
  3. Конверсия из (27-72мгц) аппаратур в 2.4 через тренерский порт.
    от black-ucsus в разделе Аппаратура радиоуправления
    Ответов: 8
    Последнее сообщение: 05.08.2017, 01:59
  4. Ответов: 8
    Последнее сообщение: 27.03.2017, 23:22
  5. Имитация металлической обшивки
    от vovan1972 в разделе Копии, полукопии
    Ответов: 19
    Последнее сообщение: 25.02.2017, 14:16

Метки этой темы

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения