Отладка двух UART на Arduino UNO

Vitalmsk
Offline
Зарегистрирован: 04.05.2018

Что имеем плата Arduino UNO. Внешнее устройство подключенное к UNO по программному UART (пины 10,11). С внешнего устройства идут данные со скоростью 9600 бод. UNO их ловит и обрабатывает.

Что надо: Все данные с внешнего устройства отображать на мониторе порта (аппаратном uart) пины 0,1 т.е на экране компьютера. Это нужно для поиска помехи в данных и отладки протокола обмена.

Раньше с двумя UART на одной железке не встречался, тем более с аппаратной + программной.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Vitalmsk пишет:

Что имеем плата Arduino UNO. Внешнее устройство подключенное к UNO по программному UART (пины 10,11). С внешнего устройства идут данные со скоростью 9600 бод. UNO их ловит и обрабатывает.

Что надо: Все данные с внешнего устройства отображать на мониторе порта (аппаратном uart) пины 0,1 т.е на экране компьютера. Это нужно для поиска помехи в данных и отладки протокола обмена.

Раньше с двумя UART на одной железке не встречался, тем более с аппаратной + программной.

а какая разница? принял байт и отправил в хардовый сериал, пяток строк

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

ua6em пишет:

Vitalmsk пишет:

Что имеем плата Arduino UNO. Внешнее устройство подключенное к UNO по программному UART (пины 10,11). С внешнего устройства идут данные со скоростью 9600 бод. UNO их ловит и обрабатывает.

Что надо: Все данные с внешнего устройства отображать на мониторе порта (аппаратном uart) пины 0,1 т.е на экране компьютера. Это нужно для поиска помехи в данных и отладки протокола обмена.

Раньше с двумя UART на одной железке не встречался, тем более с аппаратной + программной.

а какая разница? принял байт и отправил в хардовый сериал, пяток строк


Не виду кода, не вижу «потуги» сделать так как говорит ТС. «Ищу исполнителя»?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Есть в примерах для Меги, только чуток поправить

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

void loop() {
  // считываем из порта 0, и отсылаем с порта 1
  if (Serial.available()) {
    int inByte = Serial.read();
    Serial1.print(inByte, BYTE); 
  }
  // считываем с порта 1, отсылаем через последовательный порт 0
  if (Serial1.available()) {
    int inByte = Serial1.read();
    Serial.print(inByte, BYTE); 
  }
}

 

Vitalmsk
Offline
Зарегистрирован: 04.05.2018

Понял. Боялся, что не успеет принять с одного порта и послять в другой. Попробую.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Vitalmsk, что мешает отладить проект на Меге (с четырьмя аппаратными портами), после чего перенести его на UNO?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

andriano пишет:

Vitalmsk, что мешает отладить проект на Меге (с четырьмя аппаратными портами), после чего перенести его на UNO?

сейчас часто стали попадать нано на 328pb там тоже два порта

Green
Offline
Зарегистрирован: 01.10.2015

Зависит от ситуации. Давеча гонял по Serial 10-битные данные между двумя Ардуинами. Там же вёл и отладку, разделяя старшим битом.

Vitalmsk
Offline
Зарегистрирован: 04.05.2018

BOOM пишет:

ua6em пишет:

Vitalmsk пишет:

Что имеем плата Arduino UNO. Внешнее устройство подключенное к UNO по программному UART (пины 10,11). С внешнего устройства идут данные со скоростью 9600 бод. UNO их ловит и обрабатывает.

Что надо: Все данные с внешнего устройства отображать на мониторе порта (аппаратном uart) пины 0,1 т.е на экране компьютера. Это нужно для поиска помехи в данных и отладки протокола обмена.

Раньше с двумя UART на одной железке не встречался, тем более с аппаратной + программной.

а какая разница? принял байт и отправил в хардовый сериал, пяток строк


Не виду кода, не вижу «потуги» сделать так как говорит ТС. «Ищу исполнителя»?

Кстати о потугах - есть и не малые. Ищу исполнителя - я с 2018г сдесь задал вопрос 2 раз...... Прошу пращения за беспокойство.

Vitalmsk
Offline
Зарегистрирован: 04.05.2018

В наличии  только UNO, другой нет. Переживал за потерю данных. Просматривал данные с внешнего устройства на запоминающем осцилографе, ничего не нашел, а чую бяка есть. Может не хватает памяти у осцила. Хотел весь "поток" записать на комп, а уж потом пройтись по нему математикой. Повторюсь боялся потари.

Vitalmsk
Offline
Зарегистрирован: 04.05.2018

P.S. Ардуинка еще и обрабатывает то, что приходит. Вот поэтому и мандраж. Скорость обмена максимальная (с небольшим запасом) для такого расстояния. Снижать скорость - потеря реакции, хоть задача и не в идеальном понимании реального времени.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Vitalmsk пишет:

В наличии  только UNO, другой нет. Переживал за потерю данных. Просматривал данные с внешнего устройства на запоминающем осцилографе, ничего не нашел, а чую бяка есть. Может не хватает памяти у осцила. Хотел весь "поток" записать на комп, а уж потом пройтись по нему математикой. Повторюсь боялся потари.

В Москве Меги закончились? На хардах то будет надёжнее

nik182
Offline
Зарегистрирован: 04.05.2015

ua6em пишет:

 В Москве Меги закончились? На хардах то будет надёжнее

Ну ты загнул. Блю пил в 10 раз дешевле, а портов хардовых 3 штуки наличиствует.  

Дим-мычъ
Offline
Зарегистрирован: 20.03.2021

Vitalmsk пишет:

 С внешнего устройства идут данные со скоростью 9600 бод. UNO их ловит и обрабатывает.

Что надо: Все данные с внешнего устройства отображать на мониторе порта (аппаратном uart) пины 0,1 т.е на экране компьютера.

Возможно, здесь и одного порта хватит. RX - читаем устройство   TX - выводим в монитор

void setup() {
  Serial.begin(2400);
  delay(300);
}

void loop() {
  byte temp;
  if (Serial.available()) {
    temp = Serial.read();
    Serial.println(temp);
  }
}

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Дим-мычъ пишет:

Vitalmsk пишет:

 С внешнего устройства идут данные со скоростью 9600 бод. UNO их ловит и обрабатывает.

Что надо: Все данные с внешнего устройства отображать на мониторе порта (аппаратном uart) пины 0,1 т.е на экране компьютера.

Возможно, здесь и одного порта хватит. RX - читаем устройство   TX - выводим в монитор

void setup() {
  Serial.begin(2400);
  delay(300);
}

void loop() {
  byte temp;
  if (Serial.available()) {
    temp = Serial.read();
    Serial.println(temp);
  }
}

а просто перемычку поставить ))) (шутка)

Дим-мычъ
Offline
Зарегистрирован: 20.03.2021

ua6em пишет:

а просто перемычку поставить ))) (шутка)

 Да, согласен, выводить данные в монитор онлайн, не всегда возможно, да и не всегда нужно. Это просто как пример.

  Но ведь можно сохранить в переменную/массив, потом прочитать.