UART, некорректный обмен данными, вопрос

AVR версия программы

UART, некорректный обмен данными, вопрос

Сообщение barabash (Александр) » 01 дек 2017, 10:29

Приветствую всех.

Возникла ситуация когда необходимо организовать связь с МК по UART, открыл для себя Flowcode и начал пробовать, но столкнулся с трудностями. С МК и кодингом знаком весьма поверхностно, и пока не могу понять в каком направлении двигаться, что бы разрешить проблему.

Для опробирования обмена собрал простой проект во Flowcode, где в основном теле программы установлено прерывание по приему на линии UART, следом организовано мигание светодиодом и последующая передача по UART двух переменных a_int (задано начальное значение 5 и оно более нигде не меняется) и a_str (задано начальное значение "abc"). В обработке прерывания происходит прием данных в переменную a_str, задержка в 1 сек и последующая передача этих данных из переменной a_str в UART. Файлы проекта Flowcode упакованы в архив во вложении.

Вопрос в следующем. Как правильно организовать обмен данными (в моем примере), что бы данные переданные с ПК (например, используем терминал) возвращались МК в том же виде?

Например, пока у меня получается так: хочу передать число 100, отправляю терминалом 100, а МК возвращает какие-то странные данные (прикладываю во вложение скриншот окна терминала). Значения для переменных которые изначально были заданы в теле программы МК (5 и "abc", как в моем примере) также принимаются терминалом ПК в каком-то странном виде.

Другими словами, чего хочется: передаю терминалом 100 и хочу чтобы терминал принял 100, или передаю строку "abc" и хочу чтобы была принята таже строка.

Опробирование происходит на реальном железе (МК - AVR Atmega8). Кстати, при отладке в среде Proteus с тойже прошивкой и использовании виртуальных com-портов и терминала, числа передаются и принимаются в явном виде (т.е. передал 100, принял 100), все ok.

Испробовал разные скорости обмена, настоящий com-порт (без usb-to-com), изменял типы переменных во Flowcode, пробовал обмен по одному символу с запасом байт в переменной, смотрел всякие видео по Flowecode на Тюбике, но к желаемому результату пока не пришел. При прошивке МК указываю использовать внутренний rc-генератор на 8 МГц, остальные биты по умолчанию.

Ребята, в какую сторону двигаться?
У вас нет доступа для просмотра вложений в этом сообщении.
Ник: barabash
Имя: Александр
(Владивосток)
Новичок
Новичок
Информация о пользователе

Re: UART, некорректный обмен данными, вопрос

Сообщение Vovan_G5 (Владимир) » 01 дек 2017, 15:30

Прерывания нельзя загружать длинными процедурами, а тем более паузами. В прерывании взводишь флаг, а потом в основном цикле делаешь все остальное.
Посмотри поиском по моему нику, мне там МИМ все очень круто разжевал с примерами
Ник: Vovan_G5
Имя: Владимир
(Харьков)
Консультант
Консультант
Информация о пользователе

Re: UART, некорректный обмен данными, вопрос

Сообщение barabash (Александр) » 02 дек 2017, 01:05

Владимир, благодарю за совет.

Но, если вернуться к моему примеру, то даже не обрабатывая прерывание МК шлет данные из основного цикла (заданны в начальных значениях переменных) в том же некорректном виде как и при обработке прерывания. Кстати, я пробовал делать "короткие" прерывания, т.е. приняли данные в переменную и следом их тут же передали из переменной без задержек, результат такой же как описано выше.
Ник: barabash
Имя: Александр
(Владивосток)
Новичок
Новичок
Информация о пользователе
Вернуться наверх


Вернуться в Flowcode AVR

Кто сейчас на форуме

Пользователь просматривает форум: Taska, Vovan_G5, Прохожий