Изменение скорости uart в программе
- Войдите на сайт для отправки комментариев
Пт, 05/02/2021 - 01:13
Здравствуйте.
В ходе выполнения программы мне нужно менять скорость работы uart (пользователь может ее поменять в любой момент).
Для проверки написал такой скетч:
#define UART_MAX_N 8 String UART_SPEED_CONST[UART_MAX_N] {"1200", "2400", "4800", "9600", "19200", "38400", "57600", "115200" }; void setup() { delay(5000); } void loop() { for (byte i = 0; i <= (UART_MAX_N-1); i++){ long temp_speed = UART_SPEED_CONST[i].toInt(); Serial.begin(temp_speed); Serial.println("\nSpeed is = " + UART_SPEED_CONST[i]); //Serial.flush(); Serial.end(); delay(3000); } }
В цикле я читаю перенастраиваю uart на разные скорости.
В мониторе COM порта Arduino IDE меняю настройку скорости порта, после каждого прохода цикла, чтобы они совпадали.
Т.е. сменилась скорость порта у Arduino -- поменял ее на такую же в IDE для просмотра println.
Однако получаю какой-то мусор между переключениями состояния uart:
Speed is 1200
⸮⸮ffxfx
Speed is 2400
и так далее
Откуда он берется не пойму. Подскажите, пожалуйста, где ошибаюсь.
Спасибо
В ходе выполнения программы мне нужно менять скорость работы uart
а что, так разве можно было??
А зачем скорости сначала String'ом, а потом toInt()? Почему не сразу числа?
По сути вопроса.Работа с портом глючна по определению, а Вы даже не закрываете его при смене скорости.
По сути вопроса.Работа с портом глючна по определению, а Вы даже не закрываете его при смене скорости.
как не закрывает, а 15 строка?
А разве последние 3 значения массива влезают в ардуиновский int ?
В ходе выполнения программы мне нужно менять скорость работы uart
а что, так разве можно было??
Вполне.
На esp8266 так делаю.
А то там обычно скорости загрузчика и скетча не совпадают, а информацию хочется видеть полностью
toInt - фамилия по мужу (наверное), урождённая она toLong
как не закрывает, а 15 строка?
Сорри, не заметил, ночью дело было. Зря Вы "ответили" - я теперь поправить не могу, чтоб мозг никому не выносить.
Да закрываю порт end ом.
А в принципе что тут такого -- менять скорость uart в программе? Там же в настройке uart в соответствующие регистры новые числа просто должны записаться.
Единственный вопрос у меня возникал -- вдруг там в программном буфере что-то болтается. Добавлял flush - функцию ожидания полной передачи. И задержку воткнул. Все равно мусор насыпает в порт.
Да, функция toInt на самом деле Long возвращает.
Я пробовал и числовой массив загонять -- все равно имеется мусор при смене скорости.
Я пробовал и числовой массив загонять -- все равно имеется мусор при смене скорости.
Мусор не имеет никакого отношения к числам или строкам. Просто странно "зачем"
Что касается "мусора", там глюки в реализации, я Вам уже говорил. Вот, например, тоже про это - http://arduino.ru/forum/obshchii/oshibka-v-ide-1813
Попробуйте отдельный COM-клиент. И отпишитесь, помогло ли.
skilful, "мусор" - это ни о чем. Посмотрите логическим анализатором, что там реально происходит на ножках.
Евгений, я же в первом сообщении написал: пользователь может поменять скорость, задавая параметры работы устройства.
Вот нашел другой топик:
https://forum.arduino.cc/index.php?topic=382040.0
Но пока все также - мусор при изменении скорости и все тут.
skilful, "мусор" - это ни о чем. Посмотрите логическим анализатором, что там реально происходит на ножках.
Да я тоже так подумал. Но просто в какой момент можно "доверять" arduino -- что она скорость сменила на uart
И нет анализатора к сожалению :)
отдай одну ногу контроллера, если не жалка, чтобы подать Reset на спицальную ногу CH340, сразу после Serial.end()
отдай одну ногу контроллера, если не жалка, чтобы подать Reset на спицальную ногу CH340, сразу после Serial.end()
у меня плата Mega 2560. По USB подключена. Думаете сам конвертер выплевывает еще что-то?
Такая мысль не посещала :) Посмотрел по даташиту у CH340 есть свой буфер
Посмотрел по даташиту у CH340 есть свой буфер
Ну вот по Reset он мошт и очистица.
шот я уже не хрена не вижу, на какую ногу надо подавать?
И нет анализатора к сожалению :)
Ну а как Вы собираетесь варить борщ, если у Вас нет ни кастрюли, ни, хотя бы, чайника?
Тут либо обзаводиться необходимой аппаратурой, либо даже не пытаться делать вещи, которые Вы не способны проконтролировать.
шот я уже не хрена не вижу, на какую ногу надо подавать?
Всё, х-ню сморозил, у CH340 внутренняя схема сброса при подаче питания, наружу не выходит. Миль пардонс, б-ть.
Upd. Это у CH341A есть нога RSTI, причем, активный уровень - HIGH. Китайцы, чо с них взять, дикий нарот.
Евгений, я же в первом сообщении написал: пользователь может поменять скорость, задавая параметры работы устройства.
И что? Это Вам мешает взять не монитор порта, а другую программу? Возьмите, попробуйте и отпишитесь.
Евгений, я же в первом сообщении написал: пользователь может поменять скорость, задавая параметры работы устройства.
И что? Это Вам мешает взять не монитор порта, а другую программу? Возьмите, попробуйте и отпишитесь.
ой, упустил ваше предложение.
Да. проверял. Через Com port toolkit тоже самое
у меня, по моему, есть уно на CH340 и на 16AU, надо проверить в этом ли дело.
и да, а если после инициализации вычитывать порт?
Нужно понимать 3 момента: 1 - Ардуино, 2 - мост, 3 - эмулятор терминала. И у каждого свой буфер. Ага?
А просто после смены скорости, слать в порт проверочный блок, до того момента пока не перестанет фигней страдать, не вариант ?
у меня, по моему, есть уно на CH340 и на 16AU, надо проверить в этом ли дело.
и да, а если после инициализации вычитывать порт?
Делал. С английцкого форума ссылку дал и там весь код попробовал.
Дело в том, что ардуина должна дружить с другим модулем с uart и между ними скорость связи может поменяться.
У кого есть возможность проверьте ,пожалуйста, скетч смены скорости порта. У всех мусор шлется?
Может я где-то ошибаюсь...
Nano и монитор Arduino IDE. При изменении скорости UART происходит сброс Nano (диод моргает). Как понимаю - терминал дергает DTR.
шот я уже не хрена не вижу, на какую ногу надо подавать?
Всё, х-ню сморозил, у CH340 внутренняя схема сброса при подаче питания, наружу не выходит. Миль пардонс, б-ть.
Upd. Это у CH341A есть нога RSTI, причем, активный уровень - HIGH. Китайцы, чо с них взять, дикий нарот.
а на cp2101, ft232 и pl2303 резет есть и выведен на ногу )))
шот я уже не хрена не вижу, на какую ногу надо подавать?
Всё, х-ню сморозил, у CH340 внутренняя схема сброса при подаче питания, наружу не выходит. Миль пардонс, б-ть.
Upd. Это у CH341A есть нога RSTI, причем, активный уровень - HIGH. Китайцы, чо с них взять, дикий нарот.
а на cp2101, ft232 и pl2303 резет есть и выведен на ногу )))
а на cp2104, еще и 4 GPIO есть, ардуина совсем не нужна:))
Друзья, обнаружил такую штуку:
если Com Port Toolkit установить DTR в низкий уровень, то в порт на компьютер все нормально пишется и нет никакого мусора.
На что влияет эта настройка в переходнике USB на плате с Ардуино не разбирался. Или как она связана с приемом.
В Arduino IDE такой настройки не увидел.
#define UART_MAX_N 8
если Com Port Toolkit установить DTR в низкий уровень, то в порт на компьютер все нормально пишется
Спасибо. Неожиданное явление.
Следующее явление, которое надо будет понять или победить - это crazy led на Arduino Pro Mini (глюк работы сторожевого таймера)
Use Optiboot, Luke.