Другое.

usr-bin
Offline
Зарегистрирован: 04.09.2012

Здравствуйте.

Извиняюсь, что невразумительно назвал тему, но у меня проблема, которую я не могу отнести к чему-либо.

у меня arduino mega2650 с незначительно модифицированной прошивкой:

int led = 13;

// the setup routine runs once when you press reset:
void setup() {                
  // initialize the digital pin as an output.
  pinMode(led, OUTPUT);     
}

// the loop routine runs over and over again forever:
void loop() {
  digitalWrite(led, HIGH);
  delay(1000);               // wait for a second
  digitalWrite(led, LOW);   
  delay(200);               // wait for a second

  digitalWrite(led, HIGH);   // 
  delay(200);               // wait for a second
  digitalWrite(led, LOW);    // 
  delay(200);               // wait for a second

}

Моя мега ведет себя странным образом. При подключении к компьютера посредством USB-AB кабеля, светодиод pin1 загорается, гаснет и снова загорается; более не гаснет. И горит до нажатия кнопки сброса на самой ней.

Если ее подключить к питанию другим способом, например, через ICSP разьем, она работает штатно (коротко горит, коротко гаснет, длинно горит, коротко гаснет).

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

Чем же отличается подача питания (или что еще) в двух случаях? Прошу сказать, нормально ли это (на прошлых (купленых у иного поставщика) мегах это не было нормальным), как могло родится и куда копать для  устранения.

П.С. эти две меги были взяты на алиэкспрессе по 7$, прошлая - на dx по 22$. Поставщики разные и могли собрать что-то не так.

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013

А может у вас что-то обращается к ком-порту - по умолчанию DTR соединен со сбросом дуины - на платах есть перемычка соединяющая сброс и DTR - разрежьте ножиком и сравните результат. Еще было несколько подобных тем - там люди конденсатор на сброс и землю вешали и чудеса прекращались.

Также дело может быть в прошивке USB->RS232, но это очень маловероятно.

Andrey_Y_Ostanovsky
Offline
Зарегистрирован: 03.12.2012

Если "другая ведет себя таким же образом" - то есть повод присмотреться к USB выходу.

Взять, например, DC-DС преобразователь и повесить на него компьютерный USB разъем - у меня такие конструкции используются для зарядки телефонов от 12 вольт в полевых условиях.

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

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

 

usr-bin
Offline
Зарегистрирован: 04.09.2012

незначительно модифицированная прошивка - это незначительно модифицированный скетч.

сейчас попробую подать только питание через интерфейс USB

usr-bin
Offline
Зарегистрирован: 04.09.2012

взял DC-DC преобразователь, подпаял вывод к усб-порту дохлой мамки, получил питание в 5 В через USB.

Работает так, как будто просто включили питание: моргает в штатном режиме в безконечном цикле. останавливатся не думает. Разцарапал дорожки на мат.плате, идущие от дата-разьемов (центральные), результат не изменился.

leshak
Offline
Зарегистрирован: 29.09.2011

Я бы еще сделал 

void setup(){
  Serial.begin(9600);
  Serial.println("Started");
  .... тот код что у вас был ....
}

void loop(){
       Serial.print("Current time:");
    Serial.println(millis());


    .... тот код что у вас был ....
}

Открыл сериал и посмотрел что там пишет. Если все время возникает слово Started - значит кто-то перегружает контроллер. Либо железные проблемы, либо софт какой-то (всякие телефонно-блютусные софты этим грешат).

Если надписи Current time продолжают идти нормально.... значит проблема в железе (пробуйте другой выход, как советовали выше).

Замеряйте какое у вас напряжение на 5v пине при питании от USB

Попробуйте с другим компом.

P.S. И надеюсь у вас же больше ничего к дуине не подключено? А то бывает что "Наподключают всего", словят проблему но забывают упомянуть что там еще слон запитан :)

usr-bin
Offline
Зарегистрирован: 04.09.2012

перевел мигание в скетче с 13 на 7 порт. результат: при подключении питания, 13ый загорается, гаснет и снова загорается. После чего 7й начинает моргать как я это запрограммировал в скетче. Мега ведет себя так как при подключении по USB к рабочему компьютеру, так и по USB, подключенного к мертвой мамке. И так же при подключении питания по ICSP.

leshak
Offline
Зарегистрирован: 29.09.2011

Хм... а если вообще влить пустой скетч?

void setup(){
}

void loop(){
}

Горит 13-тый?

leshak
Offline
Зарегистрирован: 29.09.2011

А еще... что будет если не переводить на 7-мой, но... в 13-тый воткнуть внешний светодиод?

usr-bin
Offline
Зарегистрирован: 04.09.2012

Добавил код, сообщающий текущую миллисекунду, как посоветовал Leshak. При старте все работает как и обычно, моргает и загорается pin13, начинает циклично мигать pin7, одновременно с последним загорается и горит RX. При этом если открыть монитор порта, то (как я понимаю, при этом наступает сброс(reset) и RX перестает гореть, но начинает мигать. Он отмаргивается как и положено перед выполнением цикла миганий целевым pin7. При этом в мониторе порта идут миллисекунды начиная с 0 и до бесконечности, пока не отключишь.

Started
Current time:0
Current time:1600
Current time:3200
Current time:4800
Current time:6401
Current time:8001
Current time:9602
Current time:11202
Current time:12803
Current time:14403

"Если надписи Current time продолжают идти нормально.... значит проблема в железе (пробуйте другой выход, как советовали выше)." - ну.. проблема была в том, что pin13 (тогда - целевой) залипает при подключении через usb к компьютеру. Сейчас целевой - pin7 и pin13 все равно "залипает". Бывает это только при изначальном подключении к USB-порту, если не отключая от последнего, нажать сброс на плате, все начинает идти как положено.

Пробую заменив обратно мигающий пин с 7 на 13:

После перезаливки скетча и отключении и подключении обратно к USB: pin13 загорается, гаснет, снова загорается и ждет. через секунд 10 он отвисает, и начинает моргать как положено. TX при этом (через 10 секунд после подключения) загорается и больше не гаснет. Ситуацию с 10 секундами не наблюдал, возможно, она была, но не обращал внимание или не замечал. Если питать ардуину от USB кратковременно отключить от питания, она продолжает работать без 10 секундной паузы.

напряжение на контактах GND и +5 ардуины - +5,01-+5,02 вольта.

С другим компьютером пробовал. Конкретно, пробовал (в самом начале) с тремя компьютерами. OS: Linux Mint 14, Ubuntu 10.04, Debian 6.

Никаких других устройств к ардуине не подключено. Более того, никаких вообще устройств не подключено, кроме светодиода на pin7, когда я пробовал заменить мигание светодиода на pin13  на светодиод на pin7. Вообще, я хотел научится использовать watchdog и режим сна, но обнаружив описанный эффект, сперва подумал что дуина сгорела, а потом долго пытался понять почему она так (как описано в 1м посте) работает. Для чего и написал в эту тему.

...

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

usr-bin
Offline
Зарегистрирован: 04.09.2012

"А еще... что будет если не переводить на 7-мой, но... в 13-тый воткнуть внешний светодиод?"

при таком включении подключаемый светодиод горит одновременно с встроенным в pin13 (на плате). А именно: при включении в USB загорается и гаснет, потом снова загорается и ждет около 10 секунд, после чего загорается светодиод TX и светодиоды на pin13 начинают мигать согласно программе. TX при этом не гаснет. если нажать сброс (не отключая USB) - моргание pin13 ненадолго прекращается, после чего они возобновляют свой бег, светодиод же TX продолжает гореть не погасая на при сбросе.

"Хм... а если вообще влить пустой скетч? 1 void setup(){ 2 } 3 4 void loop(){ 5 } Горит 13-тый? Горит 13-тый?"

при отключении дольше 10-15 секунд и подключении через USB - светодиоды на pin13 загораются, гаснут,  снова загораются и горят пока не отключишь. Через 10 секунд после подключения питания, взмаргивает TX (объявление Serial.print из setup'а я не отключал) и отключается. pin13 же продолжает гореть двумя светодиодами - что на плате и что вставлен в pin13. Так горят дольше 20-30 секунд, дольше не включал.

Если же (при пустом Loop'е) запитать от ICSP-разьема, то светодиоды, относящиеся к pin13 дважды по полсекунды взмаргивают и гаснут, что бы не загорется никогда.

Если стереть и объявления serial.print и loop то

при питании от усб pin13 дважды взмагривает и умолкает.

при питании от ICSP ping13 дважды взмаргивает и умолкает (так же как и от USB)

Так.. мне кажется или чертовщина какая-то?

Ага. Пин 13 горят при пустом  loop и обьявлении pinMode(led, OUTPUT); в setup'e.
 КОгда он не обьявлен, все отмаргивает дважды короткими моргами и замолкает.

Пойду перекушу. Медку или чего-нибудь другого сладкого же...

 

usr-bin
Offline
Зарегистрирован: 04.09.2012

если обьявить pinMode(led, OUTPUT); в Setup'е, то pin13 моргает один которткий раз и загорается надолго, пока не отключишь. ЭТо на USB питании. Если нажать кнопку Reset на плате - двойной морг и погасают pin13.

при стороннем же питании - моргает коротко дважды и погасает.

usr-bin
Offline
Зарегистрирован: 04.09.2012

Благодарю всех за участие и помощь советами/проверками.

usr-bin
Offline
Зарегистрирован: 04.09.2012

В общем, вероятно, у меня какие-то проблемы с железом (ардуино мега). Иногда она отказывается прошиватся скетчем через USB-интерфейс, тогда помогает двойная прошивка - сначала через ICSP - "загрузить с помощью программатора", а затем "залить загрузчик". Одиночно эти действия не помогают, по крайней мере, когда я пробовал.

Причем если он так отказывался шится через USB, то наблюдается такая картина: при подключении к USB горит один pin13 и больше никаких действий нет (или я не замечал), это продолжается долее 20-30 секунд (потом выключаю). При этом при попытке считать данные монитором порта, ругается на неподключенность порта и arduino ide порт видеть перестает. Если прошить двойным способом как выше - питаемость от усб, или скорее внутренняя структура восстанавливается и оно начинает себя вести (при подключении через USB к компьютеру) как запрограммированно и как ожидаю, кроме считываемости с порта. При переключении в другой USB-порт, старые линки в /dev/ttyACMx не изчезают. При заливке прошивки программатором ругается "cannot set sck period" но в конце сообщает "1568 bytes of flash verified". При заливке загрузчика - долго молчит, а потом выдает ошибку

avrdude: verifying ...
avrdude: verification error, first mismatch at byte 0x1e000
         0xff != 0x0d
avrdude: verification error; content mismatch

avrdude done.  Thank you.

но в результате - начинает выполнятся скетч, записанный перед этим программатором.

Возможно (или, даже, вероятно) я туплю и что-то глупо упускаю из внимания, но по крайней мере прошлая мега (первой покупки, за 20баксов) работала безукоризненно, в отличие от двух новых, по 7,5 баксов (программатора не было). Думаю, что то с программно-аппаратным обеспечением этих двух мег (2*mega2650).

 

на мегах не зациклен, есть и унки и atmega8a, рабочий обвес, но просто с мег начал тестинг работы с вачдогом, слипом и usbasp-программатором.