Одноразовость загрузчика на ATMEGA328

Neschur
Offline
Зарегистрирован: 23.02.2016

Сжёг плату arduino, заменил на ней ATMEGA328, прошил загрузчик, и всё было бы хорошо, но

Заливаю скет, он там прекрасно работает, но повторно залить уже не получается, плата ведёт себя так, как буд-то замкнуто RESET на GND, нужно снова шить загрузчик.

Разбираясь в вопросе пришёл к выводу, что возможно не работает autoreset, но так не понял до конца что это такое и как он реализуется, как его можно сэмулировать, подать как-то землю/напряжение на RESET atmega?

Какие есть идеи по диагностике проблемы?

Лью скетч вставив атмегу в ардуину или по схеме https://www.arduino.cc/en/uploads/Tutorial/ArduinoUSBSerial.png

Так же игралcя с fuse флагами, с ними всё ок, пробовал версии IDE 1.0.1 и 1.6.7

bwn
Offline
Зарегистрирован: 25.08.2014

Так все таки скетч заливается первый раз в плате через USB или через проводки? Вангую, что неверно выбрана плата или неработающий загрузчик.

Neschur
Offline
Зарегистрирован: 23.02.2016

Первый раз прекрасно заливается(через usb и проводки), после прекрасно работает, но при попытке залить повторно пишет что программатор не отвечает, ественно пытался вынимать/втсалять кабель, даже запускался на windows, там тоже самое.

При этом есть ещё похожая плата, она прекрасно работает, но в ней atmeta не съёмная, и проверить не получистя через неё.

Загрузчики и платы опять же, пробовал разные, но в основном пытаюсь Duimilanova/ATMEGA328, как в ин струкциях, и плата/контроллер как раз именно такие

bwn
Offline
Зарегистрирован: 25.08.2014

Боюсь, что reset здесь не при чем. FUSE дергать не надо, при заливке загрузчика они берутся из board.txt, те которые нужны. Вы загрузчик как заливаете?

Neschur
Offline
Зарегистрирован: 23.02.2016

собираю схему https://www.arduino.cc/en/uploads/Tutorial/BreadboardAVR.png

на ардуине прошито Arduino as ISP, пограмматор Arduino as ISP, плата Duemilanove, ATmega328

Далее Tools > Burn Bootloader(Инструменты -> прошить загрузчик)

bwn
Offline
Зарегистрирован: 25.08.2014

Все верно, мигают три светика, докладывает, что все ОК. Я их себе так и шью, только UNOвские. Если устанавливается в плату и первый раз нормально прошивается скетч, тогда не знаю.

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

Neschur
Offline
Зарегистрирован: 23.02.2016

Через Arduino as ISP можно заливать загрузчик, но может можно как-то и скетчи шить?

Подозреваю что может быть плата не исправна, хотелось бы её полностью исключить из процесса заливки скетча

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

Neschur, если внимательно посмотреть, то можно найти в меню пункт "Загрузить через программатор".

Neschur
Offline
Зарегистрирован: 23.02.2016

Спасибо!

Через программатор загружается много раз, но я так понял оно стирает загрузчик?

std
Offline
Зарегистрирован: 05.01.2012

Прошить в обход загрузчика - upload using programmer. Только по-идее где-то в фузах ставится размер, т. о. длина загрузчика и адрес запуска, по-умненькому - надо вернуть в них нули на место, тогда и максимальный объём флеша будет полностью 32768 а не как в boards.txt 30720. Но лично я не трогаю (да и не знаю, где) потому что мне никогда не бывал нужен полный объём флеша, и работает.

Чтобы USB2Serial переходник сбрасывал плату перед заливкой программы (в варианте с загрузчиком), надо ставить между DTR переходника и Reset платы конденсатор 1 мкФ последовательно. Он сразу виден, например, в схеме подключения BT-Serial удлиннителя (32й вывод HC05):

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

Возможно такое м.б. если прошивать загрузчик к примеру с помощью AVRISP . В IDE выбрать что шить им . прошить. А потом при заливке скетчей через rx tx dtr , случайно забыть в IDE поменять тип программатора на обычный.

Neschur
Offline
Зарегистрирован: 23.02.2016

std, спасибо, я сам склонялся к тому что не работает автосброс, точнее что он сломался, проверить конденсатор который имеется пока неполулось, муьтиметра под рукой нет. Нодо будет копать в эту сторону.

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

bwn
Offline
Зарегистрирован: 25.08.2014

Neschur пишет:

Спасибо!

Через программатор загружается много раз, но я так понял оно стирает загрузчик?

Если объем скетча меньший, то загрузчику ничего не сделается. Только, если шьем через ISP, зачем он вообще нужен?
Сам правда, пока не достиг просветления, как дуиноISP прошить требуемые fuse и не лить загрузчик.((((

Neschur
Offline
Зарегистрирован: 23.02.2016

bwn пишет:

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

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

Насчёт fuse есть полезный каклькулятор http://www.engbedded.com/fusecalc/

UPD: Видно я понял, что не верно понял

bwn
Offline
Зарегистрирован: 25.08.2014

Neschur пишет:

bwn пишет:

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

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

Насчёт fuse есть полезный каклькулятор http://www.engbedded.com/fusecalc/

UPD: Видно я понял, что не верно понял

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

Neschur
Offline
Зарегистрирован: 23.02.2016

Подозревая что тут надо шить через консоль

Из одной инструкции

прошивка загрузчика

avrdude -P comport -b 19200 -c avrisp -p m328p -v -e -U efuse:w:0x05:m -U hfuse:w:0xD6:m -U lfuse:w:0xFF:m

Прошивка скетча

avrdude -P comport -b 19200 -c avrisp -p m328p -v -e -U flash:w:hexfilename.hex -U lock:w:0x0F:m

позодревая что можно сделать что-то типа

avrdude -P comport -b 19200 -c avrisp -p m328p -v -e -U flash:w:sketch.hex -U efuse:w:0x05:m -U hfuse:w:0xD6:m -U lfuse:w:0xFF:m

 

Neschur
Offline
Зарегистрирован: 23.02.2016

Также думаю может помочь в этом AVR Studio

bwn
Offline
Зарегистрирован: 25.08.2014

Neschur пишет:

Подозревая что тут надо шить через консоль

Из одной инструкции

прошивка загрузчика

avrdude -P comport -b 19200 -c avrisp -p m328p -v -e -U efuse:w:0x05:m -U hfuse:w:0xD6:m -U lfuse:w:0xFF:m

Прошивка скетча

avrdude -P comport -b 19200 -c avrisp -p m328p -v -e -U flash:w:hexfilename.hex -U lock:w:0x0F:m

позодревая что можно сделать что-то типа

avrdude -P comport -b 19200 -c avrisp -p m328p -v -e -U flash:w:hexfilename.hex -U lock:w:0x0F:m efuse:w:0x05:m -U hfuse:w:0xD6:m -U lfuse:w:0xFF:m

 

Эт можно, но не спортивно, да и мотивации для изучения пока нет.)))) Все и так помещается.

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

bwn, через Arduino IDE фьюзы без загрузчика нельзя прошить. Отдельно фьюзы шьются либо через консоль, либо через любую GUI-оболочку для avrdude (коих огромное множество). Ничего сложного в этом нет, главное правильно их выставить ;-)

 

bwn
Offline
Зарегистрирован: 25.08.2014

Jeka_M пишет:

bwn, через Arduino IDE фьюзы без загрузчика нельзя прошить. Отдельно фьюзы шьются либо через консоль, либо через любую GUI-оболочку для avrdude (коих огромное множество). Ничего сложного в этом нет, главное правильно их выставить ;-)

Спасибо, утешил. Думал, может тупой. Появится причина, буду копать.)))