Столкнулся с проблемой, которая заключается в том что на китайских arduino nano на контроллере MEGA328P слетает прошивка. Час то это обнаруживается при подаче питания на контроллер. Нашел способ бороться с этим. Заодно решил вопрос как залить новый bootloader в arduino nano.
Проблема слета прошивки заключается в том, что на китайских платах отключены фюз биты которые отвечают за сброс (reset) процессора если напряжение питания опуститься ниже определенного порога.
Чтобы проверить фюзы, нужно залить в ардуино следующий скетч.
05 | Serial .print( "Signatura= " ); |
06 | Serial .print(boot_signature_byte_get(0),HEX); |
07 | Serial .print(boot_signature_byte_get(2),HEX); |
08 | Serial .println(boot_signature_byte_get(4),HEX); |
09 | Serial .print( "Fuses(l/h/ext)= " ); |
10 | Serial .print(boot_lock_fuse_bits_get(GET_LOW_FUSE_BITS),HEX); |
11 | Serial .print(boot_lock_fuse_bits_get(GET_HIGH_FUSE_BITS),HEX); |
12 | Serial .println(boot_lock_fuse_bits_get(GET_EXTENDED_FUSE_BITS),HEX); |
Запустить Serial monitor, и получим результат:
Signatura= 1E9516
Fuses(l/h/
ext)= FFDA
FF
Ext байт отвечает за BOD (Brown-out detection). Значение FF означает что эта функция отключена. Что приводит к потенциальной возможности слета прошивки.
Чтобы изменить эти фюз биты, в самом простом случае, необходимо сменить бутлоадер.
Для смены бутлоадера необходим программатор. Сделаем программатор из ардуино.
Для превращения ардуино в программатор, в среде ардуино необходимо выбрать скетч Arduino ISP, и залить в ардуино. Эта ардуинка будет программатором.
Подключить этот программатор к неправильной ардуинке по схеме:
Если не прошивается, тогда добавляем конденсатор 10-100мкф между ногой rst и gnd программатора
В среде ардуино изменить программатор на Arduino as ISP:
И прошить бутлоадер через меню при помощи команды "Записать загрузчик" или "Burn bootloader": Tools -> Burn Bootloader
ТАк же, в китайских ардуино стоит более дешевый чип, и его уникальный код (Signature) отличается от оригинального ардуино. В таком случае внизу окна мы увидим ошибку о невозможности загрузки. Для успешной заливки бутлоадера необходимо изменить файл конйигурации AVRDude, через который непосредственно и происходит программирование.
Заходим в папку с Arduino, и следуем по пути: ..\hardware\tools\avr\etc
- Делаем копию файла: avrdude.conf
- Открываем файл avrdude.conf в текстовом редакторе.
- Ищем: “0x1e 0x95 0x0F” (это уникальный код ATmega328P который используется в оригинальном ардуино)
- Изменяем на тот который получили с помощью скетча в начале статьи: “0x1e 0x95 0x16” (это уникальный код ATmega328PB)
- Сохраняем файл.
- Перезапускаем среду Arduino IDE
- Прошиваем бутлоадер как описано высше.
- Восстанавливаем файл avrdude.conf из резервной копии, которую сделали в п.1.
Немає коментарів:
Дописати коментар