Приветствую всех участников форума!
Ардуинками я увлекаюсь довольно давно. но обычно свои поделки делал на готовых платах. Но тут решил собрать устройство на голом процессоре с минимальной обвязкой. Развел печатную плату, заказал пробную партию 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-разъем? Просто пока у меня нет опыта работы с фьюзами, а кнопка “Записать загрузчик” позволяет не накосячить в этом вопросе. Сам загрузчик мне не мешает: памяти достаточно, пауза при старте не критична.
C Reset разобрался, беру его с 10 ноги Ардуины.
Про плохое подключение тоже читал, но при таком же подключении Atmega328 запустилась и работала. Единственное подозрение - я мог перегреть чип при установке, но вроде старался аккуратно, фен на 350 градусов был.
Про конденсатор на Reset не забыл, и еще поставил два кондера по 18pF с ножек кварца на землю. Ну и 328 мега же в этой схеме завелась без проблем.
А если обзавестись набором кварцев на 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
Почему то считываются данные самой Нано, а не целевого проца.
Новые чипы идут с фьюзами по умолчанию, а это значит тактовая от внутреннего RC-генератора на частоте 1МГц. Ардуино ИДЕ в упор не видит такие “камушки”.
Помогает:
При использовании в качестве программатора USBasp и чего-то на подобии AVRDUDE_PROG33, замкнуть JP3 на USBasp (это поможет прочесть фьюзы МК) и отключить фьюз CKDIV8 (не забыв записать фьюзы обратно). После этого тактовая частота поднимается до 8МГц и Адруино ИДЕ уже может работать с этим МК.
Можно попробовать вместо USBasp использовать Arduino as ISP и AVRDUDE_PROG33 (выбрать LOW SPEED (ключ -B 175)). Но я никогда так не пробовал.
В общем - подними тактовую частоту доступным способом (изменив фьюзы).
Но для начала - просто попробуй прочесть фьюзы в программе AVRDUDE_PROG33 и скинь сюда скриншот.
Ребята, прошу у всех прощения. Похоже первый чип я все-таки перегрел или ещё как-то угробил. Это мой первый опыт пайки феном 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? Короче как мне сделать всё по фен-шую, чтобы в следующие восемь устройств загрузчик вместе с фьюзами зашёл как по маслу.
Ну так и пропишите в командной строке m168p вместо m168 !
-F это для камикадзе !
Зачем вам загрузчик ? Если надо только фьюзы под кварц 16Мгц без загрузчика - их можно залить через командную строку и avrdude или графические оболочки для avrdude типа AVRDUDES …
Сами фьюзы для кварца 16 МГц без загрузчика надо такие:
LOW 0xFF
HIGH 0xD7
EXT 0xF9
Используйте именно HEX значения, а не установку галочек в квадратиках ! С галочками можно нарваться на прямые/инверсные биты …
Вы имеете в виду готовая плата, чтобы выбрать ее в Ардуино ИДЕ? - не знаю, может и есть. А если нет, поправить файл board.txt вопрос пары минут.
Но это же не все. Добавить строчку в ИДЕ недостаточно. Нужно иметь и сам загрузчик, скомпилированный по атмегу168.
Теперь новая беда, при заливке скетча сообщение: #error "Interrupts are unknown for this board, please add to this code"
Вроде в описании ATmega168p есть прерывания. И в настройках плат все наследуется из ATmega168:
Или я ничего не понимаю… Вы пробовали так? :
1.Установить MiniCore
2 Выбрать Atmega168 => Variant168P/168PA
3.Выбрать нужную частоту
4.Записать загрузчик
Это уже из самого скетча или библиотеки строка !!!
Что то вы от 168PA такого попросили - чего в нём нет !!!
(глянул - таблица векторов 328P и 168PA совпадает)