Pull to refresh

Банальная проблема незапуска AVR, решение которой глубоко под землей

Reading time2 min
Views12K

Представим: купили вы новый камень для своего проекта, а он - зараза - не шьется! Все собрано правильно, программатор правильный - всё равно ошибка. Знакомо? Мне да. Поэтому я решил написать про это статью.

Немного предыстории

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

Ошибка avrdude
Ошибка avrdude

Лезем в гугл, где вам предложат:

  • Проверить соединение

  • Проверить пайку

  • Выкинуть микроконтроллер

Другая история - попалась мне Atmega328p, друг попросил накатить загрузчик. Ошибка такая же. Похоже на случай описанный ранее? На первый взгляд да. А вот когда начнем разбираться...

Прошиваем Atmega32

Я, как и многие другие, использую дешевой китайский программатор USBasp.

USBasp
USBasp

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

На программаторе мы видим 3 джампера: прошивка программатора - JP1, напряжение питания - JP2, и незапаяный джампер JP3 - прошивка на пониженной скорости.

Что такое "низкая скорость прошивки" и почему важна частота?

Пока перенесёмся из мира электроники, мир наш. Представим что на работе раз в час приходит начальник, чтобы проверить, как вы работаете. Время появления начальника вам известно, соответственно, вы начинаете работать и не получаете пинков от него. Но в один прекрасный момент, начальник начинает приходить раз в 45 минут, но вы этого не знаете. Так же и с МК, если он настроен на 16 MHz, но будет кварц на 8 MHz, чип не будет работать. Настройки частоты задаются фьюзами. За источник тактирования отвечают CKSEL. В зависимости от частоты, меняется скорость прошивки. Обычно на новых камнях стоят одни из этих источников тактирования:

  • External 16 MHz

  • External 8 MHz

  • Internal 8 MHz

  • Internal 1 MHz

  • Internal 128 KHz

Для работы с чипом имеющим частоту меньше 1 МГц, нужно снизить скорость прошивки. Это можно сделать перемычкой JP3 на программаторе, или в настройках используемой вами программы. После этого Atmega32 прошилась!

Прошиваем Atmega328p

В этом случае колдовать со скоростью прошивки не пришлось. Но пришлось поиграть с кварцами. Просто глядя на камень его настройки установить невозможно. А если МК не запускается, определить фьюзы даже с программатором это бесполезная затея. Не буду томить - в моем случае какой-то китаец настроил Atmega328p на External 8 MHz. Подключаем чип к программатору, жмем "Записать загрузчик" и...

Готово!
Готово!

Далее не забываем подкинуть кварц на выбранную вами частоту. В Arduino IDE частота меняется здесь (в большинстве кастомных ядер):

Выбранная частота 16MHz
Выбранная частота 16MHz

Если все равно не работает

Первый вариант: вы перебрали не все кварцы. По-хорошему, у вас должно быть достаточно разных кварцев - на 16, 8, 4 MHz. В последнее время появились микроконтроллеры с частотой 20 MHz, но их достаточно мало. Однако и такой вариант следует предусмотреть. Вот полный список частот Atmega32, на свой чип гуглите:

Все частоты AVR
Все частоты AVR

Второй вариант: вы выбрали не тот чип. Например, вот модификации atmega328:

Тот ли чип вы выбрали?
Тот ли чип вы выбрали?

Третий вариант: МК в мусорку. Попался с брачком, ну или сгорел.

Заключение

Описанные в статье проблемы выявить и устранить не всегда бывает легко, но возможно. Надеюсь статья была вам полезна, и вы узнали что-то новое или справились с проблемой. Если есть вопросы, пишите в комментарии, а на этом я с вами прощаюсь, всем удачи и всем, пока!

Tags:
Hubs:
Total votes 8: ↑7 and ↓1+6
Comments27

Articles