Миграция Leonardo -> Nano и вопросы по UART 187500

noisefault
Offline
Зарегистрирован: 24.09.2018

Друзья, столкнулся с проблемой.

Разрабатывал скетч на плате Leonardo, которая у меня общалась с VFD дисплеем

по протоколу RS485. Скорость соединения используется 187500. У этой платы два

UART порта и дисплей у меня висел на втором, соответственно использовался класс

Serial1. Всё отлично работало, пока я случайно не пожог плату.

Сейчас пытаюсь завести скетч на Arduino Nano V3, программа бегает, перефирия работает,

кроме дисплея :( 

Скетч конечно пришлось немного переписать и заменить ввод вывод с Serial1 на просто Serial,

так как UART порт у Nano один и он совмещён с коннектом с компом по USB. 

Какой-то обмен данными с дисплеем идёт, но что-то не так, то ли скорость 187500 не устанавливается

при инициализации, то ли ещё что-то. Вывода информации на дисплей нормального нет.

В чём может быть проблема?

 

noisefault
Offline
Зарегистрирован: 24.09.2018

В чём может быть отличие физических UART портов ATmega32U4 и ATmega328P ? При том же размере памяти в контроллерах и той же тактовой частоте 16 Мгц, один и тот же скетч правильно работает в первом случае, а во втором отказывается? 

Bront
Offline
Зарегистрирован: 05.04.2016

noisefault пишет:

В чём может быть отличие физических UART портов ATmega32U4 и ATmega328P ? При том же размере памяти в контроллерах и той же тактовой частоте 16 Мгц, один и тот же скетч правильно работает в первом случае, а во втором отказывается? 

Вы просто не рубите (не понимаете), в том, что делаете.

noisefault
Offline
Зарегистрирован: 24.09.2018

Bront пишет:

Вы просто не рубите .

 

так, так... а конкретнее?

b707
Offline
Зарегистрирован: 26.05.2017

если у вас был готовый скетч на Леонардо - чего ради вы стали его переписывать для Нано? Из-за экономии нескольких сотен рублей? - а свле время совсем ничего не стоит?

Замечание по сути - на Нано максимальная скорость УАРТ, насколько мне известно - 125200

noisefault
Offline
Зарегистрирован: 24.09.2018

b707 пишет:

если у вас был готовый скетч на Леонардо - чего ради вы стали его переписывать для Нано? Из-за экономии нескольких сотен рублей? - а свле время совсем ничего не стоит?

В проекте, где я собирался его использовать, нужна плата маленького размера. Когда начинал разрабатывать была под рукой только плата леонардо. Каких-то ограничений по времени в данном случае нет, экономия тоже хорошо :)

b707 пишет:

Замечание по сути - на Нано максимальная скорость УАРТ, насколько мне известно - 125200

Да, много где в ардуино заявляется такая максимальная скорость, но на деле контроллер позволяет скорость до 1000000 и больше. Я конечно изучил это первым делом и у народа нет проблем с ограничением скорости. Вчера смотрел осциллографом, скорость обмена похожа на искомую. Больше без логического анализатора понять ничего не смог. Вот не знаю, может ли быть погрешность кварца у китайского Nano V2 больше чем 2%, что могло бы быть критично для последовательного протокола?

 

 

b707
Offline
Зарегистрирован: 26.05.2017

noisefault пишет:

Да, много где в ардуино заявляется такая максимальная скорость, но на деле контроллер позволяет скорость до 1000000 и больше.

это в первую очередь зависит от вашего кода. Если вы напишете свой обработчик прерываний для Сериал. да плюс другой код не будет ему мешать -можно получить высокую скорость. А в среде Ардуино все несколько печальнее, приемный буфер всего 32 байта и если ваша программа не успевает его вычерпывать - ни о каком обмене говорить не приходится.

Вполне возможно, что на Леонардо вы успевали обрабатывать приходящие данные, а на Нано вам не хватает скорости. Напишите для теста максимально простой код, оставив в нем только обмен по Сериал - и посмотрите, какую скорость он выдаст.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

noisefault пишет:

В проекте, где я собирался его использовать, нужна плата маленького размера.

Сейчас нет проблем разработать и заказать китайцам плату под голый камень - и будет она минимально возможного размера. А все платы Arduino - скорее отладочные ;)

noisefault
Offline
Зарегистрирован: 24.09.2018

b707 пишет:

это в первую очередь зависит от вашего кода. Если вы напишете свой обработчик прерываний для Сериал. да плюс другой код не будет ему мешать -можно получить высокую скорость. А в среде Ардуино все несколько печальнее, приемный буфер всего 32 байта и если ваша программа не успевает его вычерпывать - ни о каком обмене говорить не приходится.

вот, уже теплее. Я использую модифицированную под 9 бит Hardwareserial библиотеку. Где скачал уже навскидку не помню, но для Leonardo она работала без проблем. Буффер там используется 64 байта.

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

 

b707 пишет:

Вполне возможно, что на Леонардо вы успевали обрабатывать приходящие данные, а на Нано вам не хватает скорости. Напишите для теста максимально простой код, оставив в нем только обмен по Сериал - и посмотрите, какую скорость он выдаст.

Тактовая у Nano и Leonardo одинаковая, 16 Мгц, прочие характеристики кроме портов тоже. Очень сомневаюсь что дело в этом. Программа по большей части в простое.

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Дисплей пониже по скорости не приспускается?

У Нано RX/TX через килоомные резисторы заведены на МК. Может быть это вам чем-то поможет. Ну, там фронты мошт заваливаются или типа того...

kalapanga
Offline
Зарегистрирован: 23.10.2016

noisefault пишет:

Я использую модифицированную под 9 бит Hardwareserial библиотеку. Где скачал уже навскидку не помню, но для Leonardo она работала без проблем.

А не в ней собака порылась? Точно ли она должна на Нане работать?

noisefault
Offline
Зарегистрирован: 24.09.2018

sadman41 пишет:

Дисплей пониже по скорости не приспускается?

У Нано RX/TX через килоомные резисторы заведены на МК. Может быть это вам чем-то поможет. Ну, там фронты мошт заваливаются или типа того...

С дисплеем ничего не сделать, это вещь в себе Futaba M202MD08A

на него и документации нет особо

Насчет резисторов посмотрю, спасибо, фронты на осциллографе действительно чуть подзаваленные, но не критично, у меня на дисплей и с дисплея сигнал идет через КМОП буфер, так что 1 кОм не должно никак влиять по идее.

 

kalapanga пишет:

А не в ней собака порылась? Точно ли она должна на Нане работать?

Ничего не исключаю. Но пытаюсь найти на вопрос почему не должна? Если знать в чем проблема, тогда её можно уже пытаться исправлять. Всё указывает на то, что разницы быть не должно.

 

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

noisefault пишет:

Ничего не исключаю. Но пытаюсь найти на вопрос почему не должна?

Может потому что на Leonardo и Nano разные микроконтроллеры? ATmega32u4 и ATmega328P соответственно.

noisefault пишет:

Всё указывает на то, что разницы быть не должно.

Разница есть, если в библиотеке реализовано низкоуровневое обращение к микроконтроллеру через регистры. А регистры у разных микроконтроллеров зачастую отличаются. Конкретная библиотека должна поддерживать нужный микроконтроллер.

noisefault
Offline
Зарегистрирован: 24.09.2018

Jeka_M пишет:

Может потому что на Leonardo и Nano разные микроконтроллеры? ATmega32u4 и ATmega328P соответственно. Разница есть, если в библиотеке реализовано низкоуровневое обращение к микроконтроллеру через регистры. А регистры у разных микроконтроллеров зачастую отличаются. Конкретная библиотека должна поддерживать нужный микроконтроллер.

Штатная библиотека Hardwareserial поддерживает все платы и контроллеры. Ей регистры не мешают. Я там не вижу какой-то разницы в регистрах кроме случая Atmega8, для всех остальных AVR и версий Arduino плат используются одни и те же регистры. Та библиотека, которая используется у меня, лишь немного подправленная штатная и делалась она под все платы. Леонардо не самая распространённая, как раз Uno, Nano, Mega - если бы на них не работало, народ бы сразу отписался.

В целом, конечно, версия имеет место быть, у меня пока недостаточно скиллзов, чтобы точно проверить работу библиотеки.

 

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

Подыму тему. Получилось? А то ко мне мужичек пристаёт с подобным дисплеем.