Очень неприятный и несвоевременный сбой при прошивке atmel328p через USBasp
- Войдите на сайт для отправки комментариев
Товарищи, очень нуждаюсь в вашей помощи. Занимаюсь программированием МК недавно, и произошла проблема, решить которую мне не позволяют ограниченные знания и опыт.
Кому лень читать - вниз к жирному тексту. Здесь будут описывать все мелочи, которые хоть как-то могли стать причиной печального исхода, для установления точного диагноза.
Итак, хронология...
В течение месяца заливал много раз прошивки в плату 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, четырёхканальный модуль реле, датчик температуры.
Фьюзы. Либо собирать высоковольтный восстановитель, либо перепаивать МК.
Фьюзы... Что с ними делать? Киньтесь ссылкой, пожалуйста, или в двух словах.
Фьюзы... Что с ними делать? Киньтесь ссылкой, пожалуйста, или в двух словах.
собирать устройство которое позволит востановить эти фьюзы.
долго, геморно да и чип, как мне думается, придется выпаивать.
чего проще обложить чип фальгой, "сдуть" его феном и напаять новый.
Можно еще выпаять со сплавом розэ.
Вот такую схему нашел вот в этой статье https://radiokot.ru/circuit/digital/pcmod/72/
Выглядит очень просто... 12В на ресет и ещё 5 проводков от пинов.
Поможет?
http://microtherion.github.io/ScratchMonkey/Tested.html
вот тут написано, что 328 программируется через HVPP. Но речь идет о МК...
С тиньками вроде как HVSP, это другое. На getchip.net было описание доктора фьюзов, но подпаиваться к МК на плату и собирать доктора будет сложнее, чем просто сдуть чип и напаять другой. Вы из какого города? Если задача прям так горит и вы из Питера, помогу, если привезёте платку)
С Москвы я.
Мда... Как назло закончились 328 ардуинки. По ходу всё таки придётся менять её на 168. Здравствуйте, боль и страдания! Может, всё таки, получится как-то отрезать все ноги дремелем а потом аккуратно по одной выпаять ноги, не повредив пятаки...
А что мне сделать для предотвращения таких эксцессов в будущем?
Быть аккуратнее с фьюзами.
Так я ничего с ними не делал. Я вообще смутно представляю что это и как с ними работать. Я просто заливал прошивки кнопкой Upload через нубский софт. Оно само!
вокруг фольгой защитить
запомните этот урок. Такой ужас никогда больше не собирайте:
Контроллеры ставятся в панели. Готовые платы, типа Ардуино - в гребенчатые контакты. Вот как-то так:
Сгорит контроллер или ардуина - можно поставить новую за 10 секунд
Да уж, урок что надо. А вообще я хотел. Вот только посылка именно с рейками мамами не доехала. Рейки папы есть, мам нету)
Наверное, пока рейки едут из Китая , выпаяю их из меги)
unisonic, минипро если что вставляется в стандартную панельку под 24 ногие микросхемы, в любом чип-дипе такого добра завались.
запомните этот урок. Такой ужас никогда больше не собирайте:
Контроллеры ставятся в панели. Готовые платы, типа Ардуино - в гребенчатые контакты. Вот как-то так:
Сгорит контроллер или ардуина - можно поставить новую за 10 секунд
Да фигня это все и гребенки, эти ваши, фигня. Гребенка не даст лучшего контакта, чем пайка. Я Заглядывал в японские касетники и приемники. Там монтаж, на вид, был еще хуже, а они славились своим качеством работы.
Мое дело как хочу так и собираю. Важно, что бы был надежный контакт и правильно собранная схема.
Я тоже всегда за пайку. И я не думал, что МК может просто так перестать работать. Причем не сгореть, а сбить себе служебные настройки. Схема была отработана в прототипе, потом каждое периферийное устройство тестировалось на работоспособность с этой платой. Очевидно, причина сбоя 4. Нужен экзорцист.
Genri5 - а вы-то что возбудились? я вроде и писал не вам.
На фото монтаж схемы отвратительный = и вряд ли стоит с этим спорить. Но вы правы в том, что "как хочу - так и собираю". И ТС, конечно же, волен собирать как хочет. Если ему нравится трахаться с заменой компонентов, как сейчас - пусть продолжает впаивать все компоненты намертво в макетку...
Вы советуете гребенки, а я точно знаю, что как раз с ними и возникают проблемы. Ни сразу, а в течении эксплуатации. Я если и использую панельки под микросхемы или разьемы то только дорогие с золоченными контактами. Другие не советую.
На фото монтаж схемы отвратительный = и вряд ли стоит с этим спорить.
...Если ему нравится трахаться с заменой компонентов...
Никто и не спорит, что монтаж отвратительный. Первая плата в жизни. Я инженер конструктор, электронику только осваиваю. И тем не менее изначально пайка выглядела гораздо лучше и аккуратнее. А потом то дисплей не работает, то дорожки реле не к тем контактам подвёл, то... После всех этих издевательств плата и превратилась в такое гуано. Сейчас я спаяю версию 3 с рейками погоняю устройство, а вот для четвертой версии уже сделаю печатную плату фоторезистом. И вот туда я МК точно впаяю)
3. Отсутствие общей земли при прошивке (я вообще точно не знаю, нужна ли она);
И это неправильно- общая земля в этом случае обязательна. Возможно МК теперь будет не восстановить.
3. Отсутствие общей земли при прошивке (я вообще точно не знаю, нужна ли она);
И это неправильно- общая земля в этом случае обязательна. Возможно МК теперь будет не восстановить.
когда инженер-конструктор не имеет представления об общей земле и принцах её разводки меня одолевает печалька, страна предрешена
Эээм...
Во-первых я по работе ни коим образом с электроникой дела не имею, только с механикой. Этим занимается совсем другое подразделение.
Во-вторых я имею представление. Более того, я имею представление не только на уровне электроники, но и на уровне физики. Откуда и куда бегут электрончики мне понятно. И именно поэтому я сразу и сразу и кинул проводком землю на МК. А потом, после окончательного монтажа, просто забыл распаять землю с разъема. Ну а пока питание и программатор были с соседних разъемов-земля была общей.
В-третьих всегда нужно сомневаться в своих знаниях и выводах. Вдруг в этом интерфейсе как нибудь хитро сделали, и можно без общей...
Ну а если Вы, прочитав последний пост, не читая первый, просто решили побрызгать в меня говном - доброго Вам дня в нашей ужасной стране.
Никто в вас брызгать говницом не собирался. Вам указали на вероятную причину вашх бед. При таком раскладе существует вероятность выхода из строя МК намертво, т. к. разница потенциалов между вашими устройсвами в тот момент превышала допустимые пределы и это привело к кирдыку МК. И в этом случае даже ВВП не поможет.
А вы сразу обижаетесь , как человек , еще не ходивший в школу.
естественно ни о каком брызгании в мыслях не было, обидно за звание инженер-конструктор!!!
Раунд 2.
Контроллер был заменён. Земля с МК распаяна на землю USBasp. Залиты тестовые скетчи. Всё работает.
При питании от БП ATX (как оно долджно быть) заливаю скетч, который должен работать.
Получаю:
После этого один раз прошивается загрузчик из Arduino IDE. Повторно не шьется. Скетчи не пишутся, получаю ошибку content mismatch.
Вернул питание от USB. Всё прошилось удачно.
Итак, дело не в общей земле. Кстати, у линий 5В и 12В от БП земля тоже общая.
При питании от БП МК снова не прошился с идентичными симптомами. И снова прошился при питании от USB. Прошитий МК от БП работает стабильно и без проблем.
unisonic ! Чудес не бывает- разбирайтесь со своими блоками АТХ и подключениями. Питая МК от БП, вы USBasp включаете в ЮСБ . А что там у вас дальше происходит- одному Клапауцию известно.
Ищите .Судя по фото к вашему устройству еще и жгут проводов из вне приходит. А где они проходят ,и что на них- только вы и можете знать . Просто нужно немного пораскинуть мозгами. Вы уже узнали что в АТХ БП у 5В и 12В земля общая. А пока найдете вашу багу - столько нового познаете.Вам ли как инженеру-конструктору не знать .
В заключение:через USB все шьется и работает.
Вывод: МК не при чем.
Согласны?
Уточню: все жгуты отключены в момент прошивки. Меняется только питание. В первом случае на вход платы идут плюс и минус с юсб, во втором плюс и минус с другого БП. Земля с программатора распаяна на землю схемы. Я на всякий случай кидал отлельный провод с юсб на минус платы.
Вот и вся разница-источник питания. Да, очевидно что МК не виноват, но в чём дело тогда?
З. Ы. Может, создать тему в разделе аппаратные вопросы?
а на какой вывод вы +5 вольт подаете? случаем не на +5V ардуины

Ээээмм... Да, на vcc.
Когда я на меге спалил стабилизатор, мне на форуме сказали, что питать можно в vcc, если источник нормальный. А я всёдумал, что за raw на мини)
Спасибо...
То-есть имеем ситуацию, если на Vcc подаем с USB - работает, с блока питания - не работает?
Именно так. Напряжения отличаются где-то на 0.15В
как выше правильно сказали - чудес не бывает, тестером пробегитесь по всем соединениям - проверьте,
я маленький выключатель для включения внешнего питания обычно припаиваю (и напоминалку чтоб отключать внешнее при usb питании)
Эх... Так а если мк питать через внутренний (или внешний) стаб? Тоже не поможет?
А то как-то очень неудобно получится. Пока буду дописывать и отлаживать прошивку замучаюсь питание перебрасывать. Надо будет хоть найти кнопку такую двухпозиционную...
ищите уж сразу 2х позиционную 5шт блок :)
мне в одном проекте так и пришлось делать, одним движением надо было ISP и питание обрубать чтоб менять из рабочего в программируемый режим. а пока не сделал - два МК сжег.
и думайте не об удобстве разработке а о конечном результате, кстати если изначально отладите качественно скетч - может и переключать часто не придется.
смотрим фразу - "При питании от БП ATX (как оно долджно быть) заливаю скетч, который должен работать" ...
что-то Вы батенька перемудрили
Втыкаете USB, заливаете скетч, далее вытыкаем USB, втыкаем БП - работает?
Или вы с двумя воткнутыми питаниями пытаетесь шить?
Не. Устройство лежит в тумбе. Питается от своего БП. По задумке, когда мне надо прошить, я втыкаю в устройство разъем от программатора, в котором линии MISO, MOSI, SCK, RST и GND. Программатор в комп и прошиваю. Вот только так оно не работает.
ну не знаю, при параллельном питание вроде надо от программатора кидать, по крайней мере я так делаю
должно работать, проверяйте контакты, питание от программатора точно оторвано?
Я +5В именно от программатора никогда и не распаивал. Только линии, указанные выше. Когда я пишу "питание от USB" я подразумеваю провод, воткнутый в соседний от программатора порт, который распаян на устройство.
у меня тут с текущим заказчиком недавно история была, вдруг ваш вариант:
у него Arduino pro mini и у меня, только у меня тестовая от Robotdyn,
а у него какая то непонятная которые пачками от 10 штук совсем задешево на али продается,
и куплено их у заказчика больше 30 штук.
Прошиваем через ISP только он через Nano или UNO а я через USBASP,
Долго мучались, перепробовали кучу МК так и не победили, а потом случайно он нажал "Загрузить"
в arduino IDE два раза подряд и о чудо - МК прошился без проблем.
В итоге сейчас все прошивается, что там в них Китайцы напаяли мы так и не поняли.
Вот тут я прям не понял... А как дудка поймет, что надо программатор использовать? Он же будет искать саму плату в сом-порте...
в смысле? так в arduino ide пункт есть программатор в котором и выбираешь или arduinoisp или usbasp потом жму загрузить через программатор и все....
или у вас какой то другой метод?
Ну, а Вы пишете, что заказчик нажал просто "загрузить" и всё свершилось. Или я Вас не понял.
Ну а вообще я обычно шью через атом.
да, имел в виду "загрузить через программатор", первый раз вываливалась ошибка, сразу же нажимается повторно - все ок.
Я всегда, в случае ошибки, пробую ещё 3-4 раза.
Вообщем-то вариант только один я услышал - делать на устройстве ещё один разъем для питания от USB во время прошивки.
So sad.
вот чисто из любопытства понять: а вы собираетесь отключать питание внутреннего БП при программировании? если нет - тогда смысл внешнего USB?
Конечно собираюсь. Я вот даже так на вскидку не знаю что произойдёт, если в 5в юсб порта подать 5.15в от другого мощного бп...
Конечно собираюсь. Я вот даже так на вскидку не знаю что произойдёт, если в 5в юсб порта подать 5.15в от другого мощного бп...
В 99.9% случаев - ничего.
В 0.09(9) % случаев - вырубятся USB на компе до перезагрузки оного.
В оставшихся(очень малых) случаях - на компе сгорит мост =)