Представим: купили вы новый камень для своего проекта, а он - зараза - не шьется! Все собрано правильно, программатор правильный - всё равно ошибка. Знакомо? Мне да. Поэтому я решил написать про это статью.
Немного предыстории
Понадобилась мне значит Atmega32, купил, впаял, пытаюсь прошить - ошибка!
Лезем в гугл, где вам предложат:
Проверить соединение
Проверить пайку
Выкинуть микроконтроллер
Другая история - попалась мне Atmega328p, друг попросил накатить загрузчик. Ошибка такая же. Похоже на случай описанный ранее? На первый взгляд да. А вот когда начнем разбираться...
Прошиваем Atmega32
Я, как и многие другие, использую дешевой китайский программатор 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 частота меняется здесь (в большинстве кастомных ядер):
Если все равно не работает
Первый вариант: вы перебрали не все кварцы. По-хорошему, у вас должно быть достаточно разных кварцев - на 16, 8, 4 MHz. В последнее время появились микроконтроллеры с частотой 20 MHz, но их достаточно мало. Однако и такой вариант следует предусмотреть. Вот полный список частот Atmega32, на свой чип гуглите:
Второй вариант: вы выбрали не тот чип. Например, вот модификации atmega328:
Третий вариант: МК в мусорку. Попался с брачком, ну или сгорел.
Заключение
Описанные в статье проблемы выявить и устранить не всегда бывает легко, но возможно. Надеюсь статья была вам полезна, и вы узнали что-то новое или справились с проблемой. Если есть вопросы, пишите в комментарии, а на этом я с вами прощаюсь, всем удачи и всем, пока!