Проблемы работы по TX0/RX0 Mega2560 (тоже на Due)

Celestron
Offline
Зарегистрирован: 13.04.2016

Коллеги, то ли я туплю, то ли я чего-то не понимаю, то ли это косяк.

Дано 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.

Может кто в курсе этих особенностей? И найдет возможность объяснить. Могу предположить, что проблема в бутлоадере, но...

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

Скетч в студию.

Celestron
Offline
Зарегистрирован: 13.04.2016

Я так и знал :)

Cкетч большой, в нескольких файлах с использованием FreeRTOS. И сразу так не выделишь важное из этого. Если это принципиально для понимания, то нужно время для написания работающей альтернативы.

Обязательно сделаю!

Я наивно думал, может так сразу скажут (может сталкивались)... Здесь принципиально, что если меняешь местами, то и результат меняется на противоположный... Т.е. при том, что функции, абсолютно независимые друг от друга, на Serial1 они выполняются правильно, а на Serial - неправильно.

alex_r61
Offline
Зарегистрирован: 20.06.2012

Железо нужно хоть чуточку изучать. Сигнал с выхода порта можно подать на несколько входов других устройств, насколько позволит нагрузочная способность этого порта. А несколько сигналов с разных устройств на один вход, это как вдвоём или втроём на один стул сесть. Можно конечно подключить по схеме "монтажное ИЛИ" или через внешний коммутатор.

slider
Offline
Зарегистрирован: 17.06.2014

проверте на  другой меге (другого продаваца/производителя) или другой модуль, возможно решение как описал здесь http://arduino.ru/forum/apparatnye-voprosy/arduino-uno-ne-rabotaet-rx-tx-ch340g-podklyuchenie-m590-reshenie . Мультиметр в руки и вперед. возможно CH340 не отпускает порт, или с Bluetooh HC-05 слабый сигнал , проверте схему согласования уровней между ними иль резисторы между ними.

Celestron
Offline
Зарегистрирован: 13.04.2016

slider, спасибо! Мысль интересная. Буду посмотреть :) если что, подниму тему.

Celestron
Offline
Зарегистрирован: 13.04.2016

Ну, как говорится начнем с начала... Господа подсказывайте, пожалуйста.

Код примитивный (если на порт подается '0', то светодиод выключается, если другое - включается)

#define TestSerial		Serial

#define pinLED			13


void setup()
{
	TestSerial.begin(9600);
	pinMode(pinLED, OUTPUT);
	digitalWrite(pinLED, LOW);
}


void loop()
{
	if (TestSerial.available())
		if (char(TestSerial.read()) == '0')
			digitalWrite(pinLED, LOW);
		else
			digitalWrite(pinLED, HIGH);
}

Подключено все вот так:

Как видите Uno и Bluetooth HC-06 (с заводской установкой, 9600)

Результат при попытке залить код: долго ждёт, периодически (но редко) подмигивает светодиодом RX, потом:


Sketch uses 2,104 bytes (6%) of program storage space. Maximum is 32,256 bytes.
Global variables use 182 bytes (8%) of dynamic memory, leaving 1,866 bytes for local variables. Maximum is 2,048 bytes.
C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avrdude -CC:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf -v true -patmega328p -carduino -PCOM17 -b115200 -D -Uflash:w:C:\Users\8B77~1\AppData\Local\Temp\build5edf53a9187044784c5dc57acb07b9ca.tmp/srTestLab.ino.hex:i 

avrdude: Version 6.0.1, compiled on Apr 15 2015 at 19:59:58
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2009 Joerg Wunsch

         System wide configuration file is "C:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf"

         Using Port                    : COM17
         Using Programmer              : arduino
         Overriding Baud Rate          : 115200
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0xe4
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0xe4
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0xe4
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0xe4
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0xe4
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0xe4
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0xe4
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0xe4
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0xe4
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0xe4

avrdude done.  Thank you.

Problem uploading to board.  See http://www.arduino.cc/en/Guide/Troubleshooting#upload for suggestions.

А вот если выдернуть Bluetooth из пинов RX0 и TX0, то льется в Uno как по учебнику.

Теперь Mega2560. Та же конфигурация, при загрузке выдает:


Sketch uses 2,698 bytes (1%) of program storage space. Maximum is 253,952 bytes.
Global variables use 182 bytes (2%) of dynamic memory, leaving 8,010 bytes for local variables. Maximum is 8,192 bytes.
C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avrdude -CC:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf -v true -patmega2560 -cwiring -PCOM3 -b115200 -D -Uflash:w:C:\Users\8B77~1\AppData\Local\Temp\build5edf53a9187044784c5dc57acb07b9ca.tmp/srTestLab.ino.hex:i 

avrdude: Version 6.0.1, compiled on Apr 15 2015 at 19:59:58
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2009 Joerg Wunsch

         System wide configuration file is "C:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf"

         Using Port                    : COM3
         Using Programmer              : wiring
         Overriding Baud Rate          : 115200
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_getsync(): timeout communicating with programmer

avrdude done.  Thank you.

Если выдернуть Bluetooth, то загрузка проходит как по учебнику.

Если перевесить Bluetooth на RX1/TX1 и поменять строчку на:

#define TestSerial		Serial1

То все работает, и загрузка и скетч.

Что мог на форуме посмотрел, но своей ситуации не нашел. Мне казалось, что раньше такого небыло... Готов думать головой, только не знаю в каком направлении...

Да, забыл сказать, что это фигня происходит не только с Bluetooth, но и, например, с совершенно другим устройством (Nextion HMI - тачскрин такой)

Подскажите, пожалуйста.

Celestron
Offline
Зарегистрирован: 13.04.2016

Вот, нашел похожий случай

http://www.cyberforum.ru/arduino/thread1449196.html

Но как-то не верится. Там все сводят к тому, что этот порт уже занят для загрузки...  По мне так, слабое объяснение....

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Блин .. 0 и 1 пины не стоит использовать в ардуинках, поскольку они схемно завязаны на тот или иной загрузчик .. вот сколько раз писалось миру .. :)

Тем более, что у Мега2560 есть аж 4 UART .. ну поставьте свой "синий зуб" на свободный, что мешает-то?

Да, там по схеме ch340g сидит напрямую на ногах 0 и 1 через резисторы 1ком или сколько-то .. она и "коротит" ваши попытки связаться с нулевым портом.

Точно также, у меня не работает прерывание PCINT на 13 ноге моей Мега2560 .. и если выводить на неё ШИМ, то можно смотреть как моргает светодиод на плате и если гонять эту ногу как вход, то тоже ничего вразумительного не получается .. нельзя к примеру через xor инвертировать состояние 13 выхода .. не понимаю, зачем юзать то, что идет на обеспечение работы самой платы .. вам ножек мало у 2560?

Celestron
Offline
Зарегистрирован: 13.04.2016

Arhat109-2, спасибо! Ну не нашел я! Искал!

По поводу ножек, это эксперимент, а продуктив у меня на Due и там ножек, действительно мало, поскольку нет SoftwareSerial. И ноги 0 и 1 я попытался использовать последними. Вот и получил в середине проекта "сюрприз".

Просто на Due у меня даже с отключенным USB-кабелем 0 и 1 пины работают только на передачу, а на прием никак не хотят.

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

DUE ТРЕХВОЛЬТОВАЯ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

 

Вам правильно написали - "изучите матчасть".

Celestron
Offline
Зарегистрирован: 13.04.2016

Эта матчасть мной изучена, и если я говорю, что остальные уже заняты, то это может вполне означать, что заняты Serial'ами. Работают они через конверторы уровней, где это необходимо. К тому же, модули Bluetooth могут быть запитаны и 3.3В, что и сделано при подключении к Due и это работает.

Большая просьба, это наверное необычно для этого форума, но не воспринимайте меня как абсолютного новичка. Я не претендую на абсолютного профи, но такие элементарные вещи мне абсолютно под силу. Просто с чем-то сталкиваюсь впервые.

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

По вашим постам четко видно, что у вас проблемма со схемотехникой. У меня работает все. И вы явно не понимаете, что когда к входной ноге уже подключен один источник сигнала, второй будет ему мешать. 

 

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

В продакшн, уважающий себя разработчик ставит не "дуино-платы", а разводит камень непосредственно под плату .. ставить в продакшн "конструктор на поиграться" это все равно что в пассажирский лайнер поставить движок из Лего .. может оно и взлетит конечно, но вот пенять что оно "рассыпается" .. можно только себе. Разведите так, как Вам надо .. я бы поставил перетычки для использования 0 и 1 пинов для заливок: надо залить воткнул перемычку - залил, нет - переткнул, пущай пашет в железке. ИМХО конечно, вам виднее что отдавать Заказчикам.

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Arhat109-2 пишет:

В продакшн, уважающий себя разработчик ставит не "дуино-платы", а разводит камень непосредственно под плату .. ставить в продакшн "конструктор на поиграться" это все равно что в пассажирский лайнер поставить движок из Лего .. может оно и взлетит конечно, но вот пенять что оно "рассыпается" .. можно только себе. Разведите так, как Вам надо .. я бы поставил перетычки для использования 0 и 1 пинов для заливок: надо залить воткнул перемычку - залил, нет - переткнул, пущай пашет в железке. ИМХО конечно, вам виднее что отдавать Заказчикам.

Вы не правы. Дважды. Не вижу причин по которым нельзя в готовых изделиях юзать дуины. Может назовете хоть одну, возможно я пересмотрю свое мнение. И вторая в атмелы прошивка льется по ISP ну или параллельно, использоварие uart для заливки прошивки - возможно после прошивки загрузчика. только зачем ?

Celestron
Offline
Зарегистрирован: 13.04.2016

Arhat109-2 пишет:

В продакшн, уважающий себя разработчик ставит не "дуино-платы", а разводит камень непосредственно под плату .. ставить в продакшн "конструктор на поиграться" это все равно что в пассажирский лайнер поставить движок из Лего .. может оно и взлетит конечно, но вот пенять что оно "рассыпается" .. можно только себе. Разведите так, как Вам надо .. я бы поставил перетычки для использования 0 и 1 пинов для заливок: надо залить воткнул перемычку - залил, нет - переткнул, пущай пашет в железке. ИМХО конечно, вам виднее что отдавать Заказчикам.

Продакшн - это для себя. Это у меня увлечение такое, так что я не сильно парюсь, по поводу ардуины, пока что. Но с Вашим выводом скорее соглашусь. По перммычкам читал, но за напоминание спасибо.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

brokly, эта тема и есть "причина" в целом. Плата дунек имеет много чего "лишнего", что в конечном изделии ведет к росту его цены, и хорошо если Вы сумели это заюзать с пользой ..

Celestron, для себя можно "как угодно" и как раз тут дуньки имхо полезны: надо потестил, перезалил, ресет жмакнул .. (если дотянулся). :)

slider
Offline
Зарегистрирован: 17.06.2014

Celestron пишет:

...

Подключено все вот так:

.....

Если выдернуть Bluetooth, то загрузка проходит как по учебнику.

....

То все работает, и загрузка и скетч.

Что мог на форуме посмотрел, но своей ситуации не нашел. Мне казалось, что раньше такого небыло... Готов думать головой, только не знаю в каком направлении...

....

Подскажите, пожалуйста.

присмотритесь внимательно, китайцы спецом подписали чтоб все видели - LEVEL 3.3v  , нельзя её напрямую в UNO тыкать ! ,

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

 

 

Celestron
Offline
Зарегистрирован: 13.04.2016

Ну, вот не совсем соглашусь. Да, сам модуль работает на 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.

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

У меня на такой хрени даже беспроводная загрузка скетчей работает.

slider
Offline
Зарегистрирован: 17.06.2014

Ваше дело. Значит повезло вам. видимо спасает что модуль всегда включен и потребляет. значит поэтому он остался в живых. Уже не раз сталкивался, когда сильная лог.1 (5в) с UNO идёт в 3в устройство, там она сбрасывается защитными диодами в кристалле на его питание, и если кристалл не много хавает, то эти 5в оказываются на его питании и он успешно сгорает. Стабилизатор что на плате 3.3в - он стабилизирует лиш в одну сторону, если на противоположной стороне окажется 5в, он не будет сопротивлятся, у него нет  чем то либо их нагружать чтоб уменьшить до 3,3в. 

 Да и ардуине самой тяжко, она жрать больше начинает , из за того, что кто-то ее лог1 5в садит до 3,6-4в. Поэтому на крайняк подключаю через резисторы 100ом-10ком (смотря где) . иль резистивные делители.

Есть некий тип устройств 3,3в, которые инфантильны к 5в лог1 уровням, это написано в их даташитах, но это не эти блютузы и GSM M590...

 

Celestron
Offline
Зарегистрирован: 13.04.2016

Slider, спасибо за информацию, буду аккуратнее ;)