Как запустить новый ATMEGA168PA

Приветствую всех участников форума!
Ардуинками я увлекаюсь довольно давно. но обычно свои поделки делал на готовых платах. Но тут решил собрать устройство на голом процессоре с минимальной обвязкой. Развел печатную плату, заказал пробную партию 10 штук и заказал 10 Atmega168PA в корпусе TQFP-32. После получения плат попробовал собрать одно устройство: припаял кварц на 16 МГц, конденсаторы, резисторы и саму атмегу. Запаял ISP-разъём, залил в Arduino Nano скетч Arduino as ISP и приготовился записывать загрузчик через ArduinoIDE, но не тут то было.


Проверил схему - соединения правильные. проверил с лупой пайку ножек мелкосхемы - косяков не обнаружил. Нашел в столе старю Nano, сдул с нее феном Atmega328 и пересадил на мое устройство - всё аработало: и загрузчик заливается через ISP и программа заливается через UART-адаптер. Atmega168 я поставил в Нано - и там опять та же ошибка.
Где-то я вычитал, что с завода атмеги идут настроенными на работу от внутреннего осциллятора и внешний кварц может мешать нормальной работе (изменению фьюзов и заливке загрузчика).
Хотелось бы получить совет о том как мне запустить оставшиеся атмеги168? Я правильно понимаю, что в моем случае можно поступить так: запаять в устройство атмегу168 и разъем ISP. Затем подключить к нему ардуину как ISP-программатор и записать загрузчик для Atmega168. Затем только припаять кварц на 16 МГц и все должно заработать?
Отдельного программатора у меня нет, панельки для прошивки TQFP-32 без пайки тоже нет. Достаточно будет для этого процесса Ардуинки в качестве программатора? Можно через такой программатор поменять фьюзы и какую программу лучше использовать (у меня операционка Linux Ubuntu)?
Предвижу вопрос: нахрена мне загрузчик, если есть ISP-разъем? Просто пока у меня нет опыта работы с фьюзами, а кнопка “Записать загрузчик” позволяет не накосячить в этом вопросе. Сам загрузчик мне не мешает: памяти достаточно, пауза при старте не критична.

Основная проблема при использовании Arduino as ISP это сигнал Reset !!!

ТС вы разобрались с Reset ???

Нули вылетают при плохом подключении.

1 лайк

Про конденсатор на ножке Ресет у той Наны, которая прошита программатором, не забыл?

C Reset разобрался, беру его с 10 ноги Ардуины.
Про плохое подключение тоже читал, но при таком же подключении Atmega328 запустилась и работала. Единственное подозрение - я мог перегреть чип при установке, но вроде старался аккуратно, фен на 350 градусов был.
Про конденсатор на Reset не забыл, и еще поставил два кондера по 18pF с ножек кварца на землю. Ну и 328 мега же в этой схеме завелась без проблем.

Чипы могут быть не пустые ! Надо их сбросить в дефолт через HVPP …

А если обзавестись набором кварцев на 1, 4, 8, 12 и 16 МГц и по-очереди их подкидывать - может помочь? Как еще можно прочитать фьюзы?
Пробовал через Нано как ISP считать вот так:
avrdude -p m168p -c arduino -P /dev/ttyUSB0 -U flash:r:/tmp/m168p_chip_flash_dump.hex:i -U hfuse:r:/tmp/m168p_hfuse.hex:i -U lfuse:r:/tmp/m168p_lfuse.hex:i
Почему то считываются данные самой Нано, а не целевого проца.

Отнесите в нормальный сервисный центр, и попросите прочитать МК.

P.S. Или купите/спаяйте сами высоковольтный программатор

Новые чипы идут с фьюзами по умолчанию, а это значит тактовая от внутреннего RC-генератора на частоте 1МГц. Ардуино ИДЕ в упор не видит такие “камушки”.
Помогает:

  • При использовании в качестве программатора USBasp и чего-то на подобии AVRDUDE_PROG33, замкнуть JP3 на USBasp (это поможет прочесть фьюзы МК) и отключить фьюз CKDIV8 (не забыв записать фьюзы обратно). После этого тактовая частота поднимается до 8МГц и Адруино ИДЕ уже может работать с этим МК.

Можно попробовать вместо USBasp использовать Arduino as ISP и AVRDUDE_PROG33 (выбрать LOW SPEED (ключ -B 175)). Но я никогда так не пробовал.

В общем - подними тактовую частоту доступным способом (изменив фьюзы).

Но для начала - просто попробуй прочесть фьюзы в программе AVRDUDE_PROG33 и скинь сюда скриншот.

В скетче ArduinoISP частота SPI задается как 1000000/6. Можно попробовать делить не на 6, а на 12 например. И далее увеличивать - вдруг отзовется …

Даже в ChipDip я покупал непаянные, но уже прошитые чипы … с отключенным ISP …
Пришлось их сначала познакомить с HVPP …

Не исключено, но если HVPP нет, то можно для начала и через ISP попробовать достучаться…

Ребята, прошу у всех прощения. Похоже первый чип я все-таки перегрел или ещё как-то угробил. Это мой первый опыт пайки феном TQFP32. Перепробовав всё, я вял новый чип, запаял его в устройство и произошло чудо:

avrdude: Device signature = 0x1e940b (probably m168p)
avrdude: Expected signature for ATmega168 is 1E 94 06
         Double check chip, or use -F to override this check.

Теперь у меня другой вопрос: есть какая-то плата с ATmega168p на борту и с частотой 16 МГц? Чтобы залить её загрузчик ко мне в устройство. Или нужно ручками править список плат? Или через командную строку как-то запустить опцию -F? Короче как мне сделать всё по фен-шую, чтобы в следующие восемь устройств загрузчик вместе с фьюзами зашёл как по маслу.

В пакете MiniCore есть 168ые чипы !

Ну так и пропишите в командной строке m168p вместо m168 !
-F это для камикадзе !

Зачем вам загрузчик ? Если надо только фьюзы под кварц 16Мгц без загрузчика - их можно залить через командную строку и avrdude или графические оболочки для avrdude типа AVRDUDES …
Сами фьюзы для кварца 16 МГц без загрузчика надо такие:

LOW 0xFF
HIGH 0xD7
EXT 0xF9

Используйте именно HEX значения, а не установку галочек в квадратиках ! С галочками можно нарваться на прямые/инверсные биты …

вот этого КАТЕГОРИЧЕСКИ не надо делать. НИКОГДА.
Забудьте об этой опции вовсе.

Вы имеете в виду готовая плата, чтобы выбрать ее в Ардуино ИДЕ? - не знаю, может и есть. А если нет, поправить файл board.txt вопрос пары минут.
Но это же не все. Добавить строчку в ИДЕ недостаточно. Нужно иметь и сам загрузчик, скомпилированный по атмегу168.

Открыл я файл board.txt и не нашел там упоминаний ATmega168p, добавил свою плату:

Теперь новая беда, при заливке скетча сообщение:
#error "Interrupts are unknown for this board, please add to this code"
Вроде в описании ATmega168p есть прерывания. И в настройках плат все наследуется из ATmega168:


Перепробовал разные загрузчики, даже optiboot - результат тот же.
Возможно нужно будет переделать скетч на использование энкодера без прерываний.

Ошибку приведите полностью

Или я ничего не понимаю… Вы пробовали так? :
1.Установить MiniCore
2 Выбрать Atmega168 => Variant168P/168PA
3.Выбрать нужную частоту
4.Записать загрузчик

Это уже из самого скетча или библиотеки строка !!!
Что то вы от 168PA такого попросили - чего в нём нет !!!
(глянул - таблица векторов 328P и 168PA совпадает)