Миграция Leonardo -> Nano и вопросы по UART 187500
- Войдите на сайт для отправки комментариев
Друзья, столкнулся с проблемой.
Разрабатывал скетч на плате Leonardo, которая у меня общалась с VFD дисплеем
по протоколу RS485. Скорость соединения используется 187500. У этой платы два
UART порта и дисплей у меня висел на втором, соответственно использовался класс
Serial1. Всё отлично работало, пока я случайно не пожог плату.
Сейчас пытаюсь завести скетч на Arduino Nano V3, программа бегает, перефирия работает,
кроме дисплея :(
Скетч конечно пришлось немного переписать и заменить ввод вывод с Serial1 на просто Serial,
так как UART порт у Nano один и он совмещён с коннектом с компом по USB.
Какой-то обмен данными с дисплеем идёт, но что-то не так, то ли скорость 187500 не устанавливается
при инициализации, то ли ещё что-то. Вывода информации на дисплей нормального нет.
В чём может быть проблема?
В чём может быть отличие физических UART портов ATmega32U4 и ATmega328P ? При том же размере памяти в контроллерах и той же тактовой частоте 16 Мгц, один и тот же скетч правильно работает в первом случае, а во втором отказывается?
В чём может быть отличие физических UART портов ATmega32U4 и ATmega328P ? При том же размере памяти в контроллерах и той же тактовой частоте 16 Мгц, один и тот же скетч правильно работает в первом случае, а во втором отказывается?
Вы просто не рубите (не понимаете), в том, что делаете.
Вы просто не рубите .
так, так... а конкретнее?
если у вас был готовый скетч на Леонардо - чего ради вы стали его переписывать для Нано? Из-за экономии нескольких сотен рублей? - а свле время совсем ничего не стоит?
Замечание по сути - на Нано максимальная скорость УАРТ, насколько мне известно - 125200
если у вас был готовый скетч на Леонардо - чего ради вы стали его переписывать для Нано? Из-за экономии нескольких сотен рублей? - а свле время совсем ничего не стоит?
В проекте, где я собирался его использовать, нужна плата маленького размера. Когда начинал разрабатывать была под рукой только плата леонардо. Каких-то ограничений по времени в данном случае нет, экономия тоже хорошо :)
Замечание по сути - на Нано максимальная скорость УАРТ, насколько мне известно - 125200
Да, много где в ардуино заявляется такая максимальная скорость, но на деле контроллер позволяет скорость до 1000000 и больше. Я конечно изучил это первым делом и у народа нет проблем с ограничением скорости. Вчера смотрел осциллографом, скорость обмена похожа на искомую. Больше без логического анализатора понять ничего не смог. Вот не знаю, может ли быть погрешность кварца у китайского Nano V2 больше чем 2%, что могло бы быть критично для последовательного протокола?
Да, много где в ардуино заявляется такая максимальная скорость, но на деле контроллер позволяет скорость до 1000000 и больше.
это в первую очередь зависит от вашего кода. Если вы напишете свой обработчик прерываний для Сериал. да плюс другой код не будет ему мешать -можно получить высокую скорость. А в среде Ардуино все несколько печальнее, приемный буфер всего 32 байта и если ваша программа не успевает его вычерпывать - ни о каком обмене говорить не приходится.
Вполне возможно, что на Леонардо вы успевали обрабатывать приходящие данные, а на Нано вам не хватает скорости. Напишите для теста максимально простой код, оставив в нем только обмен по Сериал - и посмотрите, какую скорость он выдаст.
В проекте, где я собирался его использовать, нужна плата маленького размера.
Сейчас нет проблем разработать и заказать китайцам плату под голый камень - и будет она минимально возможного размера. А все платы Arduino - скорее отладочные ;)
это в первую очередь зависит от вашего кода. Если вы напишете свой обработчик прерываний для Сериал. да плюс другой код не будет ему мешать -можно получить высокую скорость. А в среде Ардуино все несколько печальнее, приемный буфер всего 32 байта и если ваша программа не успевает его вычерпывать - ни о каком обмене говорить не приходится.
вот, уже теплее. Я использую модифицированную под 9 бит Hardwareserial библиотеку. Где скачал уже навскидку не помню, но для Leonardo она работала без проблем. Буффер там используется 64 байта.
А программа не то чтобы была загруженная, наоборот, ей приходится ждать прихода пачек от дисплея на последовательный порт и обмен довольно редкий. Как только в буффере что-то есть, он сразу считывается программой.
Вполне возможно, что на Леонардо вы успевали обрабатывать приходящие данные, а на Нано вам не хватает скорости. Напишите для теста максимально простой код, оставив в нем только обмен по Сериал - и посмотрите, какую скорость он выдаст.
Тактовая у Nano и Leonardo одинаковая, 16 Мгц, прочие характеристики кроме портов тоже. Очень сомневаюсь что дело в этом. Программа по большей части в простое.
Дисплей пониже по скорости не приспускается?
У Нано RX/TX через килоомные резисторы заведены на МК. Может быть это вам чем-то поможет. Ну, там фронты мошт заваливаются или типа того...
Я использую модифицированную под 9 бит Hardwareserial библиотеку. Где скачал уже навскидку не помню, но для Leonardo она работала без проблем.
А не в ней собака порылась? Точно ли она должна на Нане работать?
Дисплей пониже по скорости не приспускается?
У Нано RX/TX через килоомные резисторы заведены на МК. Может быть это вам чем-то поможет. Ну, там фронты мошт заваливаются или типа того...
С дисплеем ничего не сделать, это вещь в себе Futaba M202MD08A
на него и документации нет особо
Насчет резисторов посмотрю, спасибо, фронты на осциллографе действительно чуть подзаваленные, но не критично, у меня на дисплей и с дисплея сигнал идет через КМОП буфер, так что 1 кОм не должно никак влиять по идее.
А не в ней собака порылась? Точно ли она должна на Нане работать?
Ничего не исключаю. Но пытаюсь найти на вопрос почему не должна? Если знать в чем проблема, тогда её можно уже пытаться исправлять. Всё указывает на то, что разницы быть не должно.
Ничего не исключаю. Но пытаюсь найти на вопрос почему не должна?
Может потому что на Leonardo и Nano разные микроконтроллеры? ATmega32u4 и ATmega328P соответственно.
Всё указывает на то, что разницы быть не должно.
Разница есть, если в библиотеке реализовано низкоуровневое обращение к микроконтроллеру через регистры. А регистры у разных микроконтроллеров зачастую отличаются. Конкретная библиотека должна поддерживать нужный микроконтроллер.
Может потому что на Leonardo и Nano разные микроконтроллеры? ATmega32u4 и ATmega328P соответственно. Разница есть, если в библиотеке реализовано низкоуровневое обращение к микроконтроллеру через регистры. А регистры у разных микроконтроллеров зачастую отличаются. Конкретная библиотека должна поддерживать нужный микроконтроллер.
Штатная библиотека Hardwareserial поддерживает все платы и контроллеры. Ей регистры не мешают. Я там не вижу какой-то разницы в регистрах кроме случая Atmega8, для всех остальных AVR и версий Arduino плат используются одни и те же регистры. Та библиотека, которая используется у меня, лишь немного подправленная штатная и делалась она под все платы. Леонардо не самая распространённая, как раз Uno, Nano, Mega - если бы на них не работало, народ бы сразу отписался.
В целом, конечно, версия имеет место быть, у меня пока недостаточно скиллзов, чтобы точно проверить работу библиотеки.
Подыму тему. Получилось? А то ко мне мужичек пристаёт с подобным дисплеем.