Проблемы работы по TX0/RX0 Mega2560 (тоже на Due)
- Войдите на сайт для отправки комментариев
Коллеги, то ли я туплю, то ли я чего-то не понимаю, то ли это косяк.
Дано Mega2560, на ногах TX0/RX0 (Serial) висит один Bluetooh HC-05 (назовем его Устройство 0), на ногах TX1/RX1 (Serial1) висит другой HC-05 (назовем его Устройство 1). Одна логическая ветвь скетча через Устройство 0 выполняет одни функции, другая через Устройство 1 - другие функции.
Так вот ПРОБЛЕМА, если Устройство 1 (Serial1) работает нормально в двух направлениях, то Устройство 0 (Serial) работает только на передачу (входящие данные на Serial не поступают). Если их поменять местами (Устройство 1 - Serial, Устройство 2 - Serial1) и соответствующим образом перенастроить в скетче работу функций, то Устройство 1 может только передавать, а Устройство 0 теперь работает нормально. Т.е. я хочу сказать, что TX0/RX0 (Serial) какие-то неполноценные.
Та же фигня на Due.
Может кто в курсе этих особенностей? И найдет возможность объяснить. Могу предположить, что проблема в бутлоадере, но...
Скетч в студию.
Я так и знал :)
Cкетч большой, в нескольких файлах с использованием FreeRTOS. И сразу так не выделишь важное из этого. Если это принципиально для понимания, то нужно время для написания работающей альтернативы.
Обязательно сделаю!
Я наивно думал, может так сразу скажут (может сталкивались)... Здесь принципиально, что если меняешь местами, то и результат меняется на противоположный... Т.е. при том, что функции, абсолютно независимые друг от друга, на Serial1 они выполняются правильно, а на Serial - неправильно.
Железо нужно хоть чуточку изучать. Сигнал с выхода порта можно подать на несколько входов других устройств, насколько позволит нагрузочная способность этого порта. А несколько сигналов с разных устройств на один вход, это как вдвоём или втроём на один стул сесть. Можно конечно подключить по схеме "монтажное ИЛИ" или через внешний коммутатор.
проверте на другой меге (другого продаваца/производителя) или другой модуль, возможно решение как описал здесь http://arduino.ru/forum/apparatnye-voprosy/arduino-uno-ne-rabotaet-rx-tx-ch340g-podklyuchenie-m590-reshenie . Мультиметр в руки и вперед. возможно CH340 не отпускает порт, или с Bluetooh HC-05 слабый сигнал , проверте схему согласования уровней между ними иль резисторы между ними.
slider, спасибо! Мысль интересная. Буду посмотреть :) если что, подниму тему.
Ну, как говорится начнем с начала... Господа подсказывайте, пожалуйста.
Код примитивный (если на порт подается '0', то светодиод выключается, если другое - включается)
Подключено все вот так:
Как видите Uno и Bluetooth HC-06 (с заводской установкой, 9600)
Результат при попытке залить код: долго ждёт, периодически (но редко) подмигивает светодиодом RX, потом:
А вот если выдернуть Bluetooth из пинов RX0 и TX0, то льется в Uno как по учебнику.
Теперь Mega2560. Та же конфигурация, при загрузке выдает:
Если выдернуть Bluetooth, то загрузка проходит как по учебнику.
Если перевесить Bluetooth на RX1/TX1 и поменять строчку на:
То все работает, и загрузка и скетч.
Что мог на форуме посмотрел, но своей ситуации не нашел. Мне казалось, что раньше такого небыло... Готов думать головой, только не знаю в каком направлении...
Да, забыл сказать, что это фигня происходит не только с Bluetooth, но и, например, с совершенно другим устройством (Nextion HMI - тачскрин такой)
Подскажите, пожалуйста.
Вот, нашел похожий случай
http://www.cyberforum.ru/arduino/thread1449196.html
Но как-то не верится. Там все сводят к тому, что этот порт уже занят для загрузки... По мне так, слабое объяснение....
Блин .. 0 и 1 пины не стоит использовать в ардуинках, поскольку они схемно завязаны на тот или иной загрузчик .. вот сколько раз писалось миру .. :)
Тем более, что у Мега2560 есть аж 4 UART .. ну поставьте свой "синий зуб" на свободный, что мешает-то?
Да, там по схеме ch340g сидит напрямую на ногах 0 и 1 через резисторы 1ком или сколько-то .. она и "коротит" ваши попытки связаться с нулевым портом.
Точно также, у меня не работает прерывание PCINT на 13 ноге моей Мега2560 .. и если выводить на неё ШИМ, то можно смотреть как моргает светодиод на плате и если гонять эту ногу как вход, то тоже ничего вразумительного не получается .. нельзя к примеру через xor инвертировать состояние 13 выхода .. не понимаю, зачем юзать то, что идет на обеспечение работы самой платы .. вам ножек мало у 2560?
Arhat109-2, спасибо! Ну не нашел я! Искал!
По поводу ножек, это эксперимент, а продуктив у меня на Due и там ножек, действительно мало, поскольку нет SoftwareSerial. И ноги 0 и 1 я попытался использовать последними. Вот и получил в середине проекта "сюрприз".
Просто на Due у меня даже с отключенным USB-кабелем 0 и 1 пины работают только на передачу, а на прием никак не хотят.
DUE ТРЕХВОЛЬТОВАЯ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Вам правильно написали - "изучите матчасть".
Эта матчасть мной изучена, и если я говорю, что остальные уже заняты, то это может вполне означать, что заняты Serial'ами. Работают они через конверторы уровней, где это необходимо. К тому же, модули Bluetooth могут быть запитаны и 3.3В, что и сделано при подключении к Due и это работает.
Большая просьба, это наверное необычно для этого форума, но не воспринимайте меня как абсолютного новичка. Я не претендую на абсолютного профи, но такие элементарные вещи мне абсолютно под силу. Просто с чем-то сталкиваюсь впервые.
По вашим постам четко видно, что у вас проблемма со схемотехникой. У меня работает все. И вы явно не понимаете, что когда к входной ноге уже подключен один источник сигнала, второй будет ему мешать.
В продакшн, уважающий себя разработчик ставит не "дуино-платы", а разводит камень непосредственно под плату .. ставить в продакшн "конструктор на поиграться" это все равно что в пассажирский лайнер поставить движок из Лего .. может оно и взлетит конечно, но вот пенять что оно "рассыпается" .. можно только себе. Разведите так, как Вам надо .. я бы поставил перетычки для использования 0 и 1 пинов для заливок: надо залить воткнул перемычку - залил, нет - переткнул, пущай пашет в железке. ИМХО конечно, вам виднее что отдавать Заказчикам.
В продакшн, уважающий себя разработчик ставит не "дуино-платы", а разводит камень непосредственно под плату .. ставить в продакшн "конструктор на поиграться" это все равно что в пассажирский лайнер поставить движок из Лего .. может оно и взлетит конечно, но вот пенять что оно "рассыпается" .. можно только себе. Разведите так, как Вам надо .. я бы поставил перетычки для использования 0 и 1 пинов для заливок: надо залить воткнул перемычку - залил, нет - переткнул, пущай пашет в железке. ИМХО конечно, вам виднее что отдавать Заказчикам.
Вы не правы. Дважды. Не вижу причин по которым нельзя в готовых изделиях юзать дуины. Может назовете хоть одну, возможно я пересмотрю свое мнение. И вторая в атмелы прошивка льется по ISP ну или параллельно, использоварие uart для заливки прошивки - возможно после прошивки загрузчика. только зачем ?
В продакшн, уважающий себя разработчик ставит не "дуино-платы", а разводит камень непосредственно под плату .. ставить в продакшн "конструктор на поиграться" это все равно что в пассажирский лайнер поставить движок из Лего .. может оно и взлетит конечно, но вот пенять что оно "рассыпается" .. можно только себе. Разведите так, как Вам надо .. я бы поставил перетычки для использования 0 и 1 пинов для заливок: надо залить воткнул перемычку - залил, нет - переткнул, пущай пашет в железке. ИМХО конечно, вам виднее что отдавать Заказчикам.
Продакшн - это для себя. Это у меня увлечение такое, так что я не сильно парюсь, по поводу ардуины, пока что. Но с Вашим выводом скорее соглашусь. По перммычкам читал, но за напоминание спасибо.
brokly, эта тема и есть "причина" в целом. Плата дунек имеет много чего "лишнего", что в конечном изделии ведет к росту его цены, и хорошо если Вы сумели это заюзать с пользой ..
Celestron, для себя можно "как угодно" и как раз тут дуньки имхо полезны: надо потестил, перезалил, ресет жмакнул .. (если дотянулся). :)
...
Подключено все вот так:
.....
Если выдернуть Bluetooth, то загрузка проходит как по учебнику.
....
То все работает, и загрузка и скетч.
Что мог на форуме посмотрел, но своей ситуации не нашел. Мне казалось, что раньше такого небыло... Готов думать головой, только не знаю в каком направлении...
....
Подскажите, пожалуйста.
присмотритесь внимательно, китайцы спецом подписали чтоб все видели - LEVEL 3.3v , нельзя её напрямую в UNO тыкать ! ,
только через преобразователь уровней . и параллельно вешать в момент загрузки её нежелательно, среди кода заливки скетча она может разглядеть понятный ей код и ответить, и естественно скетч не загрузится. Тогда уж подбирать резисторы и делать отключение модуля.
Ну, вот не совсем соглашусь. Да, сам модуль работает на 3.3В, поэтому приведенный "обвес" конвертирует в 3.3 поданые 5В. Но при этом уровень выхода действительно 3.3В.
Теперь если посмотреть в даташит по 328 атмеге, в Общих DC характеристиках приводятся допустимые уровни High и Low, которые по моим подсчетам лежат где-то в следующих пределах (при питании 5В):
LOW - от 0.5 до 1.5В
HIGH - вход: от 3 до 5.5В (хотя где-то видел min 1.8В) выход: 4.1-4.2В
Соответственно, делаю вывод, что HC-06 со своими 3.3В еще "пролезает" (на входе в мк) в эти характеристики. На входе в HC-06, действительно 4.1-4.2В вместо 3.3, но в данном случае я положился на допуск в самой HC-06 (все-таки не 5В). Единственное, что нужно гарантировать, так это питание в 5В для атмеги, но на эту тему я не парился, доверившись Arduino.
К тому же (ламерский подход), так работает нормально и за два года я проблем с этим не испытывал :)
У меня на такой хрени даже беспроводная загрузка скетчей работает.
Ваше дело. Значит повезло вам. видимо спасает что модуль всегда включен и потребляет. значит поэтому он остался в живых. Уже не раз сталкивался, когда сильная лог.1 (5в) с UNO идёт в 3в устройство, там она сбрасывается защитными диодами в кристалле на его питание, и если кристалл не много хавает, то эти 5в оказываются на его питании и он успешно сгорает. Стабилизатор что на плате 3.3в - он стабилизирует лиш в одну сторону, если на противоположной стороне окажется 5в, он не будет сопротивлятся, у него нет чем то либо их нагружать чтоб уменьшить до 3,3в.
Да и ардуине самой тяжко, она жрать больше начинает , из за того, что кто-то ее лог1 5в садит до 3,6-4в. Поэтому на крайняк подключаю через резисторы 100ом-10ком (смотря где) . иль резистивные делители.
Есть некий тип устройств 3,3в, которые инфантильны к 5в лог1 уровням, это написано в их даташитах, но это не эти блютузы и GSM M590...
Slider, спасибо за информацию, буду аккуратнее ;)