Ардуино нано и VAGCom (Вася диагност и т.д.) трансляция на RX TX и далее на USB

Тема в разделе "Arduino & Shields", создана пользователем Lemurs, 8 авг 2018.

  1. Lemurs

    Lemurs Нуб

    Приветствую !
    собрана схема на основе L9637D, на выходе RX и TX, вот пример, только без части с ft232bl
    [​IMG]

    c L9637D с ног получаем RX и TX

    есть ардуино нано и usb ttl, для соединения с пк
    вопрос такой, как правильней сделать, что бы подать на пины ардуины rx, tx данные с L9637D и транслировать через usb-uart в пк?

    в итоге нужно будет подсоединит вагком через ардуину, далее получение/отправка данных в к-линию.

    тем самым хочется убить двух зайцев, как снифер слушаем отправляемые/принимаемые данные и с ними можно что-то сделать и просто использование вагком.

    пробовал даже просто, подключить к пинам арудинки, 2,3 tx, rx от L9637D и при помощи например SerialToSerial читать писать - ничего не вышло.
    делал и с AltSoftSerial.h и SoftwareSerial.h

    Код (C++):
    #include <AltSoftSerial.h>

    AltSoftSerial altSerial;

    void setup() {
      Serial.begin(115200);
      altSerial.begin(115200);
    }

    void loop() {
      char c;

      if (Serial.available()) {
        c = Serial.read();
        altSerial.print(c);
      }
      if (altSerial.available()) {
        c = altSerial.read();
        Serial.print(c);
      }
    }

     

    помогите пожалуйста разобраться.

    к-лайн и вагком работает на скорости 10400, usb-ttl прошивал под эту скорость
    отдельно, если к l9637d к rx tx подключить usb-ttl - все работает, а с ардуинкой как прокладкой - не работает :(
     
  2. b707

    b707 Гуру

    ну раз вы сами пишете, что вагком работает на 10400 - то почему ж в скетче 115200 используете? Хотя бы что поближе - 9600 выбрали.
    Кроме того, СофтвареСериал в принцпе не работает выше 19200
     
    arkadyf нравится это.
  3. Lemurs

    Lemurs Нуб

    это как пример. что пробовал без каких либо лишних вещей в коде, только чтение/запись
    скоростя ставил начиная от 4800 до 38400
     
  4. b707

    b707 Гуру

    не нужно ничего выкладывать "для примера", выложи тот скетч, которым пробовал - буква в букву.
     
    arkadyf нравится это.
  5. Lemurs

    Lemurs Нуб

    например такой пробовал
    Код (C++):
    #include <AltSoftSerial.h>

    AltSoftSerial altSerial;

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

    void loop() {
      char c;

      if (Serial.available()) {
        c = Serial.read();
        altSerial.print(c);
      }
      if (altSerial.available()) {
        c = altSerial.read();
        Serial.print(c);
      }
    }

     
    и такой
    Код (C++):

    #include <SoftwareSerial.h>
    SoftwareSerial ss(3, 2);

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

    void loop() {
      char c;

      if (Serial.available()) {
        c = Serial.read();
        ss.print(c);
      }
      if (ss.available()) {
        c = altSerial.read();
        Serial.print(c);
      }
    }

     
    скоростя Serial пробовал с 4800 до 38400 (4800, 7200, 9600 ... и т.д.)
     
  6. b707

    b707 Гуру

    В первом скетче как задаются пины?
    Во втором - к какому пину подключал RX и какому TX кан-модуля?
     
  7. Lemurs

    Lemurs Нуб

    в первом случае подключались на ноги 8 и 9 в разном порядке rx, tx и tx, rx соответственно все

    во втором случае подключались на ноги 2 и 3 в разном порядке rx, tx и tx, rx соответственно все

    грешу на какие то паразитные данные чудным образом получающиеся, вот и решил спросить, может кто что знает
     
  8. parovoZZ

    parovoZZ Гуру

    выкинь ее. Возьми плату на основе 32u4. У нее два настоящих USART. Причем один из них смотрит прямо в USB. Выставляешь нужную скорость работы и пишешь примерно следующее:
    Код (C++):
    void setup() {
      Serial.begin(9600);
      while (!Serial) {
      }
      Serial1.begin(9600);
      Serial.println("ABDURINO MUST DIE");
    }

    void loop() {
      if (Serial1.available()) {
        Serial.write(Serial1.read())
        Serial.println(Serial.read());
      }
      if (Serial.available()) {
        Serial1.write(Serial.read());
      }
    }
     
    Писалось на скорую руку, поэтому в стиле быдлодурино =)
     
  9. Lemurs

    Lemurs Нуб

    то есть на нано нельзя?
     
  10. b707

    b707 Гуру

    еще и с синтаксическими ошибками...
    Не понял только. зачем в один и тот же Сериал сначала write. а потом println
     
  11. b707

    b707 Гуру

    для тестов вполне и Нана сойдет.
    Для готовой схемы лучше плату с несколькими UART взять, я бы посоветовал дешевую STM32Дуину
     
    Последнее редактирование: 9 авг 2018
  12. parovoZZ

    parovoZZ Гуру

    Всё работает. На 115200. Больше мне не требовалось. А вот мост SPI - USART так уже не сделаешь. На мегагерце пропадали символы. Кольцевой буфер не помогал. Поэтому взял нану. SPI 4 МГц -> 200 000 бод по USART - полет нормуль.
    Мешает - убери. Это временно для тестов. Но, как известно, нет ничего более постоянного...
     
  13. Lemurs

    Lemurs Нуб

    нет у меня платы 32u4
    а есть нано про, получается нельзя... казалось бы в чем проблема, какой сигнал получил, тот и ретранслируй... а она значит не может(((
     
  14. b707

    b707 Гуру

    Да нет, нана должна работать.
    думаю, дело не в этом, а в подключении или коде.
     
  15. Lemurs

    Lemurs Нуб

    код привел, подключение тоже
    в чем косяк?