Официальный сайт компании Arduino по адресу arduino.cc
Связь nano и pro mini по RX-TX - проблема
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Не смог найти ответа на свою проблему в недрах Интернета.
Проблема в следующем - для проекта нужна связь между двумя клонами Ардуино - nano 328, 16 Mhz и pro mini 328, 16 Mhz.
Скетч уже более 2000 строк, но суть передать с nano на pro mini до 5 байт информации с разной переодичностью.
В начала проекта, особо не обращал внимания на правильность и аккуратность и в итоге, после небольшой серии экспериментов зараьботало так:
- на передающей ардуине стоит скорость 9600, байты передаются из программы каждый с помощью Serial.write (byte), то 1, то 2-3, то все 5 с периодичностью от 100 мс до нескольких секунд.
- На принимающей стоит скорость 19200 (!!!) и байты принимаются 5 раз Serial.read(), как только становятся доступными if (Serial.available() > 0), байты неполученные получались как 255
Все работало и я как то не озадачивался почему это работает в таком виде.
Настал момент причесывания и все пошло наперекосяк. На скорости на обоих ардуинах 9600 или 19200 - не работает в принципе - вместо посланных байтов доходят не те. Вернул разные скорости, написал функцию, где послыка идет строго 5 байт и прием идет строго по количеству байт в буфере - работает нестабильно, постоянно проскакивают неконятные байты. Добавил Serial.flush () после пяти посылов байт Serial.write() - так же нестабильно. Или вообще мусор или ноль проскакивает или 255.
Никто не сталкивался? Или кинте ссылкой где почитать о похожей проблеме.
есть одно НО - на nano выгорел диод B2 от неправильного включения и она питается только от VCC. Не думаю, что это как то влияет, но все же.
Буду очень признателен за помощь. Ниже - куски кода
Передающая:
.......
sendToLED (boardNum, 0, 0, 0, 0);
......................
sendToLED (0, 0, 0, 'T', '*');
.........
во первых скорость должна быть одинаковая, во вторых возьми готовую библиотеку какую...
какую...
какую?
да хоть вот эту :)
и нужен небольшой патч IDE
"hardware\arduino\avr\cores\arduino\HardwareSerial.h"
"hardware\arduino\avr\cores\arduino\HardwareSerial.cpp"
и
кстати вот тут думаю, чего лучше патч IDE или сделать свой класс наследник?
класс плох тем, что там нужно использоать прямой доступ к полям и при изменении исходником может перестать работать, как оно было при переходе с 152 на последнюю.
но и другой вариант то-же плох
во первых скорость должна быть одинаковая, во вторых возьми готовую библиотеку какую...
Проблема в том, что РАБОТАЕТ на разных скоростях и НЕ РАБОТАЕТ на одинаковых
Проблема в том, что РАБОТАЕТ на разных скоростях и НЕ РАБОТАЕТ на одинаковых
Ну тогда либо кварцы разные и одна не на 16 мегагерц, а на 8, либо - что-то не так в консерватории. Чудес не бывает, надо смотреть весь код, как минимум. Это если принимать описанное вами поведение на веру.
Это первое, что пришло в голову. Посмотрел - по маркировке обе 16 Мгц. Я это написал в первом посте. Код большой, куски, которые отправляют и принимают я написал. Больше ничего не отправляется, кроме таких и подобных кусков.
Нано вот такая - https://arduinobazar.ru/home/152-dccduino-nano-arduino-nano-r3-sovmestimaya-kupit-arduino-moskva-peterburg-dyoshevo.html
Про мини - вот такая - https://arduinobazar.ru/platy-arduino/2-arduino-pro-mini-16mhz-5v-atmega328-kupit-arduino-moskva-peterburg-dyoshevo.html
Есть пример скетча, как мегагерцы просто померять?
терминал на компе пробовал подключать и туда и туда на одной скорости?
терминал на компе пробовал подключать и туда и туда на одной скорости?
да. Но само-собой подключал только к передающей - скорость совпадает.
Неужели, подсунули 8 Мгц вместо 16-ти? Просто у продавца есть 8 Мгц версия, но она 3,3В, а эта 5В
терминал на компе пробовал подключать и туда и туда на одной скорости?
да. Но само-собой подключал только к передающей - скорость совпадает.
Неужели, подсунули 8 Мгц вместо 16-ти? Просто у продавца есть 8 Мгц версия, но она 3,3В, а эта 5В
подключи одновременно 2 терминала на одной скорости и к мастеру и слейву, будет видно чего отправляешь и чего доходит
это как? Типа в одну ЮСБ от одной и в другую - от другой?
Неужели, подсунули 8 Мгц вместо 16-ти? Просто у продавца есть 8 Мгц версия, но она 3,3В, а эта 5В
На кварце что написано?
Залей в обе ардуины какой-нибудь одинаковый простенький скетч на передачу данных по UART. Сначала подключи одну ардуину к компу, проверь скорость. Потом подключи другую и тоже поверь скорость.
это как? Типа в одну ЮСБ от одной и в другую - от другой?
берешь ДВА USB кабеля и каждую подключаешь к компу, у тебя будет 2 разных COM порта, терминалы подключаешь к этим ком портам и слушаешь чего они между собой шпарят
все заработало, помогавшим - спасибо!
теперь другая проблема. передаю 5 байт на скорости 38400, принимаю 5 байт на той же скорости. иногда (не часто), что-то теряется.
вопрос 1 - почему?, вопрос 2 - как добиться "железной 100%" передачи?
Код передачи
Код приема