Перейти к содержанию

Почему ATmega328P не запускается от кварца?

Обновлено Редакция GAW

У ATmega328P источник тактов выбирают фьюзы CKSEL — по табл. 9-1 даташита это калиброванный RC-генератор 8 МГц, RC-генератор 128 кГц, генератор для кварца в двух вариантах, генератор для часового кварца или внешний сигнал. Кварц на плате сам по себе ничего не включает.

Причины по порядку

ПризнакПричинаЧто сделать
Работает, но в 16 раз медленнееновый кристалл: RC 8 МГц и CKDIV8 — 1 МГцзаписать фьюзы под кварц
Не запускается и не прошиваетсяфьюзы выбрали кварц, а он не генерируетпроверить кварц, конденсаторы, разводку
Работает через раз, сбоит от касанияLow Power и помехирежим Full Swing
Нестабилен на 16 МГц при 3,3 Вчастота выше допустимой для напряжения8 МГц или 5 В

Фьюзы CKSEL

По табл. 9-1 и 9-3 даташита генератор Low Power Crystal занимает коды 1111–1000, и три старших бита задают диапазон частот:

CKSEL3…1РежимЧастотаC1 = C2
101Low Power0,9–3 МГц12–22 пФ
110Low Power3–8 МГц12–22 пФ
111Low Power8–16 МГц12–22 пФ
011Full Swing0,4–20 МГц12–22 пФ

У Arduino Uno младший байт фьюзов — 0xFF: Low Power на 8–16 МГц. Расшифровать и собрать свой байт поможет калькулятор фьюзов AVR.

Low Power и Full Swing

Microchip прямо пишет, что Low Power даёт уменьшенный размах на XTAL2 и может быть чувствительнее к помехам, а его выход нельзя подать на другие тактовые входы. Full Swing выдаёт полный размах, работает до 20 МГц, но только при VCC 2,7–5,5 В и потребляет больше. Если генератор капризничает — первым делом пробуют его.

Конденсаторы и разводка

C1 и C2 должны быть одинаковыми; даташит даёт ориентир 12–22 пФ, а точнее их считают по нагрузочной ёмкости кварца — это делает калькулятор конденсаторов для кварца. Кварц ставят вплотную к XTAL1 и XTAL2, а конденсаторы — на общий провод рядом с выводом GND. Как работает схема Пирса и почему важен запас по усилению, объясняет статья «Генераторы».

Старт кварца по табл. 9-4 — 16 тысяч тактов, а при выборе «медленно нарастающего питания» ещё 65 мс задержки после сброса. Остальные характеристики кристалла — на странице ATmega328P.

Похожие вопросы

Какие фьюзы нужны для кварца 16 МГц?

Как у Arduino Uno: младший байт 0xFF — CKSEL3…0 = 1111, Low Power Crystal на 8–16 МГц, самый долгий старт, и CKDIV8 не запрограммирован. Если плата работает в помехах или кварц должен тактировать ещё что-то, берут Full Swing — CKSEL3…1 = 011 (наш вывод из табл. 9-1 и 9-5).

Перестал прошиваться после смены фьюзов на кварц — что делать?

Для программирования по ISP кристаллу нужен такт, который выбран фьюзами. Если кварца на плате нет или он не запускается, кристалл не отвечает. Временно подключают кварц с конденсаторами или подают меандр на XTAL1, прошивают правильные фьюзы и проверяют генератор (наш вывод).

Можно ли поставить керамический резонатор вместо кварца?

Можно: оба генератора ATmega328P рассчитаны и на кварц, и на керамический резонатор, но для резонатора даташит советует ёмкости от производителя резонатора и предусматривает свои варианты времени запуска в табл. 9-4. Точность резонатора хуже кварца, поэтому для UART и часов предпочтителен кварц.

Источники

  1. Microchip. ATmega48A/PA/88A/PA/168A/PA/328/P Data Sheet (DS40002061B) — табл. 9-1 — CKSEL3…0: 1111–1000 Low Power Crystal, 0111–0110 Full Swing, 0010 внутренний RC, 0000 внешний сигнал; 9.3, табл. 9-3 — Low Power: 0,9–3 МГц — 101, 3–8 МГц — 110, 8–16 МГц — 111, C1 = C2 = 12–22 пФ, меньше размах на XTAL2, чувствительнее к помехам, не может тактировать другие входы; табл. 9-4 — кварц: 16K CK плюс 4,1 или 65 мс; 9.4, табл. 9-5 — Full Swing 0,4–20 МГц, 011, только при VCC 2,7–5,5 В; 28.8 — для программирования по ISP нужен такт, выбранный фьюзами
  2. Arduino. ArduinoCore-avr, boards.txt (коммит 11b9130) — uno.bootloader.low_fuses=0xFF, uno.build.f_cpu=16000000L

Нашли ошибку?