Приветствую ! собрана схема на основе L9637D, на выходе RX и TX, вот пример, только без части с ft232bl 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 - все работает, а с ардуинкой как прокладкой - не работает
ну раз вы сами пишете, что вагком работает на 10400 - то почему ж в скетче 115200 используете? Хотя бы что поближе - 9600 выбрали. Кроме того, СофтвареСериал в принцпе не работает выше 19200
это как пример. что пробовал без каких либо лишних вещей в коде, только чтение/запись скоростя ставил начиная от 4800 до 38400
например такой пробовал Код (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 ... и т.д.)
в первом случае подключались на ноги 8 и 9 в разном порядке rx, tx и tx, rx соответственно все во втором случае подключались на ноги 2 и 3 в разном порядке rx, tx и tx, rx соответственно все грешу на какие то паразитные данные чудным образом получающиеся, вот и решил спросить, может кто что знает
выкинь ее. Возьми плату на основе 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()); } } Писалось на скорую руку, поэтому в стиле быдлодурино =)
еще и с синтаксическими ошибками... Не понял только. зачем в один и тот же Сериал сначала write. а потом println
для тестов вполне и Нана сойдет. Для готовой схемы лучше плату с несколькими UART взять, я бы посоветовал дешевую STM32Дуину
Всё работает. На 115200. Больше мне не требовалось. А вот мост SPI - USART так уже не сделаешь. На мегагерце пропадали символы. Кольцевой буфер не помогал. Поэтому взял нану. SPI 4 МГц -> 200 000 бод по USART - полет нормуль. Мешает - убери. Это временно для тестов. Но, как известно, нет ничего более постоянного...
нет у меня платы 32u4 а есть нано про, получается нельзя... казалось бы в чем проблема, какой сигнал получил, тот и ретранслируй... а она значит не может(((