Очень неприятный и несвоевременный сбой при прошивке atmel328p через USBasp

unisonic
Offline
Зарегистрирован: 09.01.2018

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

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

Итак, хронология...

В течение месяца заливал много раз прошивки в плату pro mini atmel328p https://www.aliexpress.com/item/Free-Shipping-New-Atmega328-5v-Version-Pro-Mini-Module-16M-For-Arduino-Compatible/32605434250.html?spm=a2g0s.9042311.0.0.27424c4dogJK9d через USBasp v2 https://www.aliexpress.com/item/WAVGAT-USBasp-USB-ISP-3-3V-5V-AVR-Programmer-USB-ATMEGA8-ATMEGA128-New-10PIN-Wire-Support/32578298532.html?spm=a2g0s.9042311.0.0.27424c4dogJK9d В USBasp не обновлена прошивка, выдаёт предупреждение, что не может выставить другую частоту. Работало и так, забил.

Пишу в Atom с плагином Platformio-IDE. Конфигурация:
[env:atmelavr_usbasp]
platform = atmelavr
board = 328p16m
framework = arduino
upload_protocol = usbasp
upload_flags = -Pusb -B5

Пятница: распаял на пины МК разъем USB-female (MISO, MOSI, SCK, RES), который был вырезан вместе с куском платы из материнки ноута. На интерфейсе SPI также висит сдвиговый регистр дисплея. На USBasp параллельно шлейфу распаял USB-male длина 1.5-2м, свёрнут восьмеркой, стянут резинкой. Питание МК через соседний от программатора разъем USB. Блинк залился. Всё было собрано в корпус, прикручено, попытка прошивки - программатор не может найти МК. При тщательной прозвонке было выяснено, что в куске платы, на которой USB разъем, остались дорожки, и некоторые контакты соединены через диоды (вот честно, понятия не имею как оно раньше работало и прошивалось, когда с SCK на MOSI и MISO льётся всякое говно при прошивке). Ноги разъема были отрезаны от платы, звон ног друг на друга был устранён. Всё заработало, я довольный ушел спать. 

Суббота: весь день паял, звонил, лил прошивки, добавлял периферию. Вечером при заливке кода впервые появилась ошибка при верификации флеша. Несовпадение данных. При этом МК код более не выполнял. Ошибка не исчезала, пока не залью через ArduinoIDE бутлоадер. После этого прошивка заливалась. И так каждый раз. на Погуглив, решил что проблема в недостатке питания. Запитал МК отдельно через БП от телефона. При попытке залить прошивку программатор не нашел МК. Подумав, я решил, что им нужна общая земля. Кинул проводом из шлейфа землю на МК. Заработало, шилось нормально раз 5. Ушел спать.

Воскресенье: пришло время убирать сопли. Расковырял заливку на USBasp, распаял экран и оплётку на землю. Вот только на МК распаять забыл... При этом всё шилось преимущественно нормально, лишь изредка выдавая ошибки верификации. Под конец дня я полностью закончил сборку устройства. Распаял все разъемы, подключил периферию. Подал питание-всё работает. Обнаружил, что не крутится вентилятор, понял, что я просто забыл включить этот блок кода в прошивку. Дописал, нажал кнопку загрузки...

И вот тут случилась какая-то фигня.

В логе, при попытке загрузки, появилась фраза вроде:
"Фьюзы изменились. Принять изменения? (y/n)?
ERROR 1". 

И после этого все дальнейшие попытки прошить контроллер были безуспешными. Программатор не может найти МК. Бутлоадер тоже не прошивается.

Прозвонил ещё раз все цепи, обнаружил, что не распаял землю с программатора. Не помогло. Подключал в соседние USB порты. Тоже тихо.

Собсна, а почему я просто не выкинул этот МК в мусорку и не поставил другой, коих у меня горка? А вот почему...

Всё распаяно, залито. Плата двухсторонняя. Поменять МК=переделать всё заново, включая сами платы, ибо пятаки повторной пайки не выдерживают. При этом на последнем шаге был разобран прототип, отрезана вся коммутация. А устройство должно работать...

Пожалуйста, помогите оживить этого парня, а также исправить причину такого поведения. Не хочу всё переделывать(

У меня версии следующие:

1. Что-то сбилось, когда МК прошивался через ноги, которые немного в одну сторону звонились;

2. Очень длинный кабель от программатора до МК, свернутый восьмеркой, хоть и экранированный;

3. Отсутствие общей земли при прошивке (я вообще точно не знаю, нужна ли она);

4. В МК вселился бес. 

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

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

Фьюзы. Либо собирать высоковольтный восстановитель, либо перепаивать МК.

unisonic
Offline
Зарегистрирован: 09.01.2018

Фьюзы... Что с ними делать? Киньтесь ссылкой, пожалуйста, или в двух словах.

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

unisonic пишет:

Фьюзы... Что с ними делать? Киньтесь ссылкой, пожалуйста, или в двух словах.

собирать устройство которое позволит востановить эти фьюзы.

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

чего проще обложить чип фальгой, "сдуть" его феном и напаять новый.

inspiritus
Offline
Зарегистрирован: 17.12.2012

Можно еще выпаять со сплавом розэ.

unisonic
Offline
Зарегистрирован: 09.01.2018

Вот такую схему нашел вот в этой статье https://radiokot.ru/circuit/digital/pcmod/72/

Выглядит очень просто... 12В на ресет и ещё 5 проводков от пинов.

Поможет?

unisonic
Offline
Зарегистрирован: 09.01.2018

http://microtherion.github.io/ScratchMonkey/Tested.html

вот тут написано, что 328 программируется через HVPP. Но речь идет о МК...

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

С тиньками вроде как HVSP, это другое. На getchip.net было описание доктора фьюзов, но подпаиваться к МК на плату и собирать доктора будет сложнее, чем просто сдуть чип и напаять другой. Вы из какого города? Если задача прям так горит и вы из Питера, помогу, если привезёте платку)

unisonic
Offline
Зарегистрирован: 09.01.2018

С Москвы я.

Мда... Как назло закончились 328 ардуинки. По ходу всё таки придётся менять её на 168. Здравствуйте, боль и страдания! Может, всё таки, получится как-то отрезать все ноги дремелем а потом аккуратно по одной выпаять ноги, не повредив пятаки...

А что мне сделать для предотвращения таких эксцессов в будущем? 

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

Быть аккуратнее с фьюзами.

unisonic
Offline
Зарегистрирован: 09.01.2018

Так я ничего с ними не делал. Я вообще смутно представляю что это и как с ними работать. Я просто заливал прошивки кнопкой Upload через нубский софт. Оно само!

evgta
Offline
Зарегистрирован: 02.09.2016

вокруг фольгой защитить 

https://www.youtube.com/watch?v=Nl60oEhsfB0
b707
Offline
Зарегистрирован: 26.05.2017

запомните этот урок. Такой ужас никогда больше не собирайте:

Контроллеры ставятся в панели. Готовые платы, типа Ардуино - в гребенчатые контакты. Вот как-то так:

Сгорит контроллер или ардуина - можно поставить новую за 10 секунд

unisonic
Offline
Зарегистрирован: 09.01.2018

Да уж, урок что надо. А вообще я хотел. Вот только посылка именно с рейками мамами не доехала. Рейки папы есть, мам нету)
Наверное, пока рейки едут из Китая , выпаяю их из меги)

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

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

Genri5
Offline
Зарегистрирован: 31.05.2016

b707 пишет:

запомните этот урок. Такой ужас никогда больше не собирайте:

Контроллеры ставятся в панели. Готовые платы, типа Ардуино - в гребенчатые контакты. Вот как-то так:

Сгорит контроллер или ардуина - можно поставить новую за 10 секунд

Да фигня это все и гребенки, эти ваши, фигня. Гребенка не даст лучшего контакта, чем пайка. Я Заглядывал в японские касетники и приемники. Там монтаж, на вид, был еще хуже, а они славились своим качеством работы.

Мое дело как хочу так и собираю. Важно, что бы был надежный контакт и правильно собранная схема.

unisonic
Offline
Зарегистрирован: 09.01.2018

Я тоже всегда за пайку. И я не думал, что МК может просто так перестать работать. Причем не сгореть, а сбить себе служебные настройки. Схема была отработана в прототипе, потом каждое периферийное устройство тестировалось на работоспособность с этой платой. Очевидно, причина сбоя 4. Нужен экзорцист.

b707
Offline
Зарегистрирован: 26.05.2017

Genri5 - а вы-то что возбудились? я вроде и писал не вам.

На фото монтаж схемы отвратительный = и вряд ли стоит с этим спорить. Но вы правы в том, что "как хочу - так и собираю". И ТС, конечно же, волен собирать как хочет. Если ему нравится трахаться с заменой компонентов, как сейчас - пусть продолжает впаивать все компоненты намертво в макетку...

Genri5
Offline
Зарегистрирован: 31.05.2016

Вы советуете гребенки, а я точно знаю, что как раз с ними и возникают  проблемы. Ни сразу, а в течении эксплуатации. Я если и использую панельки под микросхемы или разьемы то только дорогие с золоченными контактами. Другие не советую.

unisonic
Offline
Зарегистрирован: 09.01.2018

b707 пишет:

На фото монтаж схемы отвратительный = и вряд ли стоит с этим спорить. 

...Если ему нравится трахаться с заменой компонентов...

Никто и не спорит, что монтаж отвратительный. Первая плата в жизни. Я инженер конструктор, электронику только осваиваю. И тем не менее изначально пайка выглядела гораздо лучше и аккуратнее. А потом то дисплей не работает, то дорожки реле не к тем контактам подвёл, то... После всех этих издевательств плата и превратилась в такое гуано. Сейчас я спаяю версию 3 с рейками погоняю устройство, а вот для четвертой версии уже сделаю печатную плату фоторезистом. И вот туда я МК точно впаяю)

nikolaki
nikolaki аватар
Offline
Зарегистрирован: 14.02.2013

unisonic пишет:

3. Отсутствие общей земли при прошивке (я вообще точно не знаю, нужна ли она);

И это неправильно- общая земля в этом случае обязательна. Возможно МК теперь будет не восстановить.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

nikolaki пишет:

unisonic пишет:

3. Отсутствие общей земли при прошивке (я вообще точно не знаю, нужна ли она);

И это неправильно- общая земля в этом случае обязательна. Возможно МК теперь будет не восстановить.

когда инженер-конструктор не имеет представления об общей земле и принцах её разводки меня одолевает печалька, страна предрешена

unisonic
Offline
Зарегистрирован: 09.01.2018

Эээм...

Во-первых я по работе ни коим образом с электроникой дела не имею, только с механикой. Этим занимается совсем другое подразделение.
Во-вторых я имею представление. Более того, я имею представление не только на уровне электроники, но и на уровне физики. Откуда и куда бегут электрончики мне понятно. И именно поэтому я сразу и сразу и кинул проводком землю на МК. А потом, после окончательного монтажа, просто забыл распаять землю с разъема. Ну а пока питание и программатор были с соседних разъемов-земля была общей.
В-третьих всегда нужно сомневаться в своих знаниях и выводах. Вдруг в этом интерфейсе как нибудь хитро сделали, и можно без общей...

Ну а если Вы, прочитав последний пост, не читая первый, просто решили побрызгать в меня говном - доброго Вам дня в нашей ужасной стране.

Штирлиц
Штирлиц аватар
Offline
Зарегистрирован: 13.06.2015

Никто в вас брызгать говницом не собирался. Вам указали на вероятную причину вашх бед. При таком раскладе существует вероятность выхода из строя МК намертво, т. к. разница потенциалов между вашими устройсвами в тот момент превышала допустимые пределы и это привело к кирдыку МК. И в этом случае даже ВВП не поможет.

А вы сразу обижаетесь , как человек , еще не ходивший в школу.

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

естественно ни о каком брызгании в мыслях не было, обидно за звание инженер-конструктор!!!

 

unisonic
Offline
Зарегистрирован: 09.01.2018

Раунд 2.

Контроллер был заменён. Земля с МК распаяна на землю USBasp. Залиты тестовые скетчи. Всё работает.

При питании от БП ATX (как оно долджно быть) заливаю скетч, который должен работать.

Получаю:

avrdude: warning: cannot set sck period. please check for usbasp firmware update.
 
avrdude: reading input file ".pioenvs\atmelavr_usbasp\firmware.hex"
avrdude: writing flash (9424 bytes):
Writing | ################################################## | 100% 10.76s
avrdude: 9424 bytes of flash written
avrdude: verifying flash memory against .pioenvs\atmelavr_usbasp\firmware.hex:
avrdude: load data flash data from input file .pioenvs\atmelavr_usbasp\firmware.hex:
 
avrdude: input file .pioenvs\atmelavr_usbasp\firmware.hex contains 9424 bytes
 
avrdude: reading on-chip flash data:
Reading | ################################################## | 100% 6.05s
avrdude: verifying ...
avrdude: verification error, first mismatch at byte 0x0000
avrdude: verification error; content mismatch
0x00 != 0x0c
 
avrdude: safemode: lfuse changed! Was ff, and is now 0
*** [program] Error 5
Would you like this fuse to be changed back? [y/n]
 [ERROR] Took 28.73 seconds

После этого один раз прошивается загрузчик из Arduino IDE. Повторно не шьется. Скетчи не пишутся, получаю ошибку content mismatch.

Вернул питание от USB. Всё прошилось удачно.

Итак, дело не в общей земле. Кстати, у линий 5В и 12В от БП земля тоже общая.

unisonic
Offline
Зарегистрирован: 09.01.2018

При питании от БП МК снова не прошился с идентичными симптомами. И снова прошился при питании от USB. Прошитий МК от БП работает стабильно и без проблем.

Штирлиц
Штирлиц аватар
Offline
Зарегистрирован: 13.06.2015

unisonic ! Чудес не бывает- разбирайтесь со своими блоками АТХ и подключениями. Питая МК  от БП, вы USBasp включаете в ЮСБ . А что там у вас дальше происходит- одному Клапауцию известно.

Ищите .Судя по фото к вашему устройству еще и жгут проводов из вне приходит. А где они проходят ,и что на них- только вы и можете знать . Просто нужно немного пораскинуть мозгами. Вы уже узнали что в АТХ БП у 5В и 12В земля общая. А пока найдете вашу багу - столько нового познаете.Вам ли как инженеру-конструктору не знать .

В заключение:через USB все шьется и работает.

Вывод: МК не при чем.

Согласны?

 

unisonic
Offline
Зарегистрирован: 09.01.2018

Уточню: все жгуты отключены в момент прошивки. Меняется только питание. В первом случае на вход платы идут плюс и минус с юсб, во втором плюс и минус с другого БП. Земля с программатора распаяна на землю схемы. Я на всякий случай кидал отлельный провод с юсб на минус платы.
Вот и вся разница-источник питания. Да, очевидно что МК не виноват, но в чём дело тогда?
З. Ы. Может, создать тему в разделе аппаратные вопросы?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

unisonic пишет:
Уточню: все жгуты отключены в момент прошивки. Меняется только питание. В первом случае на вход платы идут плюс и минус с юсб, во втором плюс и минус с другого БП. Земля с программатора распаяна на землю схемы. Я на всякий случай кидал отлельный провод с юсб на минус платы. Вот и вся разница-источник питания. Да, очевидно что МК не виноват, но в чём дело тогда? З. Ы. Может, создать тему в разделе аппаратные вопросы?

а на какой вывод вы +5 вольт подаете? случаем не на +5V ардуины

unisonic
Offline
Зарегистрирован: 09.01.2018

Ээээмм... Да, на vcc.
Когда я на меге спалил стабилизатор, мне на форуме сказали, что питать можно в vcc, если источник нормальный. А я всёдумал, что за raw на мини)
Спасибо...

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

unisonic пишет:
Ээээмм... Да, на vcc. Когда я на меге спалил стабилизатор, мне на форуме сказали, что питать можно в vcc, если источник нормальный. А я всёдумал, что за raw на мини) Спасибо...

То-есть имеем ситуацию, если на Vcc подаем с USB - работает, с блока питания - не работает?

unisonic
Offline
Зарегистрирован: 09.01.2018

Именно так. Напряжения отличаются где-то на 0.15В

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

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

я маленький выключатель для включения внешнего питания обычно припаиваю (и напоминалку чтоб отключать внешнее при usb питании)

unisonic
Offline
Зарегистрирован: 09.01.2018

Эх... Так а если мк питать через внутренний (или внешний) стаб? Тоже не поможет?
А то как-то очень неудобно получится. Пока буду дописывать и отлаживать прошивку замучаюсь питание перебрасывать. Надо будет хоть найти кнопку такую двухпозиционную...

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

unisonic пишет:
Эх... Так а если мк питать через внутренний (или внешний) стаб? Тоже не поможет? А то как-то очень неудобно получится. Пока буду дописывать и отлаживать прошивку замучаюсь питание перебрасывать. Надо будет хоть найти кнопку такую двухпозиционную...

ищите уж сразу 2х позиционную 5шт блок :)

мне в одном проекте так и пришлось делать, одним движением надо было ISP и питание  обрубать чтоб менять из рабочего в программируемый режим. а пока не сделал - два МК сжег.

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

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

смотрим фразу - "При питании от БП ATX (как оно долджно быть) заливаю скетч, который должен работать" ...
что-то Вы батенька перемудрили
Втыкаете USB, заливаете скетч, далее вытыкаем USB, втыкаем БП - работает?
Или вы с двумя воткнутыми питаниями пытаетесь шить?

unisonic
Offline
Зарегистрирован: 09.01.2018

Не. Устройство лежит в тумбе. Питается от своего БП. По задумке, когда мне надо прошить, я втыкаю в устройство разъем от программатора, в котором линии MISO, MOSI, SCK, RST и GND. Программатор в комп и прошиваю. Вот только так оно не работает.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

unisonic пишет:
Не. Устройство лежит в тумбе. Питается от своего БП. По задумке, когда мне надо прошить, я втыкаю в устройство разъем от программатора, в котором линии MISO, MOSI, SCK, RST и GND. Программатор в комп и прошиваю. Вот только так оно не работает.

ну не знаю, при параллельном питание вроде надо от программатора кидать, по крайней мере я так делаю

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

unisonic пишет:
Не. Устройство лежит в тумбе. Питается от своего БП. По задумке, когда мне надо прошить, я втыкаю в устройство разъем от программатора, в котором линии MISO, MOSI, SCK, RST и GND. Программатор в комп и прошиваю. Вот только так оно не работает.

должно работать, проверяйте контакты, питание от программатора точно оторвано?

unisonic
Offline
Зарегистрирован: 09.01.2018

Я +5В именно от программатора никогда и не распаивал. Только линии, указанные выше. Когда я пишу "питание от USB" я подразумеваю провод, воткнутый в соседний от программатора порт, который распаян на устройство.

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

у меня тут с текущим заказчиком недавно история была, вдруг ваш вариант:

у него Arduino pro mini и у меня, только у меня тестовая от Robotdyn,

а у него какая то непонятная которые пачками от 10 штук совсем задешево на али продается,

и куплено их у заказчика больше 30 штук.

Прошиваем через ISP только он через Nano или UNO а я через USBASP,

Долго мучались, перепробовали кучу МК так и не победили, а потом случайно он нажал "Загрузить" 

в arduino IDE два раза подряд и о чудо - МК прошился без проблем.

В итоге сейчас все прошивается, что там в них Китайцы напаяли мы так и не поняли.

 

unisonic
Offline
Зарегистрирован: 09.01.2018

Вот тут я прям не понял... А как дудка поймет, что надо программатор использовать? Он же будет искать саму плату в сом-порте...

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

unisonic пишет:
Вот тут я прям не понял... А как дудка поймет, что надо программатор использовать? Он же будет искать саму плату в сом-порте...

в смысле? так в arduino ide пункт есть программатор в котором и выбираешь или arduinoisp или usbasp потом жму загрузить через программатор и все....

или у вас какой то другой метод?

 

unisonic
Offline
Зарегистрирован: 09.01.2018

Ну, а Вы пишете, что заказчик нажал просто "загрузить" и всё свершилось. Или я Вас не понял.
Ну а вообще я обычно шью через атом.

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

unisonic пишет:
Ну, а Вы пишете, что заказчик нажал просто "загрузить" и всё свершилось. Или я Вас не понял. Ну а вообще я обычно шью через атом.

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

unisonic
Offline
Зарегистрирован: 09.01.2018

Я всегда, в случае ошибки, пробую ещё 3-4 раза.
Вообщем-то вариант только один я услышал - делать на устройстве ещё один разъем для питания от USB во время прошивки.
So sad.

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

unisonic пишет:
Я всегда, в случае ошибки, пробую ещё 3-4 раза. Вообщем-то вариант только один я услышал - делать на устройстве ещё один разъем для питания от USB во время прошивки. So sad.

вот чисто из любопытства понять: а вы собираетесь отключать питание внутреннего БП при программировании? если нет - тогда смысл внешнего USB?

unisonic
Offline
Зарегистрирован: 09.01.2018

Конечно собираюсь. Я вот даже так на вскидку не знаю что произойдёт, если в 5в юсб порта подать 5.15в от другого мощного бп...

unisonic
Offline
Зарегистрирован: 09.01.2018

Конечно собираюсь. Я вот даже так на вскидку не знаю что произойдёт, если в 5в юсб порта подать 5.15в от другого мощного бп...

ToRcH2565
Offline
Зарегистрирован: 16.05.2015

unisonic пишет:
Конечно собираюсь. Я вот даже так на вскидку не знаю что произойдёт, если в 5в юсб порта подать 5.15в от другого мощного бп...

В 99.9% случаев - ничего.

В 0.09(9) % случаев - вырубятся USB на компе до перезагрузки оного.

В оставшихся(очень малых) случаях - на компе сгорит мост =)