Настройка внешнего источника синхронизации на ATmega8

Я пытаюсь настроить V-USB на моем ATmega8-16PU ( техническое описание ), и мне может понадобиться помощь в подключении к нему внешнего источника кварцевых часов. Я попытался понять техническое описание в меру своих возможностей и сделал несколько выводов, которые я был бы признателен, если бы кто-то мог их проверить и подвергнуть критике. Для справки, я буду использовать кварц 16 МГц или 20 МГц, и мне также нужна помощь в выборе.

Вот мой план на данный момент, основанный на моем понимании:

  • Присоедините мой внешний кристалл (два контакта один) к контактам XTAL1 и XTAL2 микросхемы.
  • Используйте два керамических конденсатора по 22 пФ.
  • Согласно таблице 2 на странице 26, CKSEL3..0 должен быть 1111-1010.
  • CKOPT не будет запрограммирован (основываясь на описании вверху страницы 27), потому что мне не нужен большой размах выходного сигнала, и я не управляю чем-то еще с кристаллом.
  • CKSEL3..1 должен быть 101, 110 или 111, потому что частота моего кристалла больше 1 МГц.
  • CKSEL0 должен быть установлен на 1, а SUT1..0 на 11 (на основе таблицы 5 на странице 28), потому что я хочу, чтобы максимальное время запуска было безопасным.

Итак, я сделал эти заметки и не знаю, куда идти дальше. Например:

  1. Что это за штуки (CKSEL3..1, CKSEL3..0 и т. д.) и как узнать, какое значение выбрать для CKSEL3..0 и CKSEL3..1, если мне предоставляется набор вариантов на выбор ?
  2. Что мне нужно изменить и как установить фьюз-биты, чтобы включить эти настройки? Я использую avrdude для программирования своего микроконтроллера.
  3. Нужно ли использовать сторожевой таймер? Если я это сделаю, не похоже, что есть какие-либо настройки для его включения или отключения (нижняя часть страницы 26), или он всегда включен?

Спасибо всем. Извините за все эти вопросы, я очень новичок во всем этом, но полон решимости учиться.

Ответы (1)

CKSEL обычно означает выбор часов. Есть несколько вариантов, которые можно выбрать с помощью внутреннего мультиплексора: некоторые для тестирования, другие для альтернативных источников.

Поскольку вы используете xtal, вы можете предоставить код для выбора этой опции: которые находятся в первых 2-х строках стр. 26. Вы можете использовать 3 нижние строки таблицы 4 для кристалла. Каждый из них настроен на определенный диапазон частот, как показано на рисунке. Если ваш эталонный кварц рассчитан на колебание около 4 МГц, вы должны установить биты выбора на код, например, 111. 16Mhz работает только с CKOPT low при использовании любого из трех кодов выбора, показанных в строке 4 таблицы.

Внешние конденсаторы должны быть 12-22 пФ, а не 22 мкФ для xtal в соответствии с той же таблицей. Он также указывает только максимальный предел частоты генератора 16 МГц, поэтому я бы не стал использовать xtal с частотой 20 МГц.

Мне кажется, что функция сторожевого таймера является внутренней.

*обратите внимание, что xtal и кристалл здесь используются как синонимы.

Спасибо за ответ. К сожалению, он не отвечает на некоторые мои вопросы. Во-первых, я отредактировал 22 мкФ в пФ, это была ошибка, извините. Во-вторых, в первой строке на стр. 26 написано, что я могу выбрать CKSEL3..0 как 1111–1010. Что это значит, почему он дает мне диапазон? В-третьих, откуда вы знаете, что частота около 4 МГц соответствует 111? В-четвертых, кажется, что ограничение в 16 МГц распространяется только на резонаторы - не так ли? Где сказано, что к внешним кристаллам применяется ограничение в 16 МГц? Наконец, что мне делать дальше, как только я выберу свои настройки? Еще раз спасибо, очень признателен.
CKSEL имеет 4 бита, которые вы можете выбрать с помощью битов ff. Диапазон этих 4 битов показан ниже: 1111-1010 для вашего приложения (см. строку 1 в таблице 2), самый левый бит или MSB всегда будет для вас равен 1, потому что вам нужно выбрать только правильные 3 для вашего частотного диапазона ( поясняется в таблице 4). Поскольку вы сказали, что собираетесь использовать> = 1 МГц и CKOPT = 0, то любой из битовых кодов, 101 110 111, должен подходить для вашего приложения. Посмотрите внимательно на таблицу 4, стр. 27. Примечание CKSEL 3..1=111 соответствует диапазону 3,0-8 МГц. Вы будете использовать тот, который вы хотите, чтобы он соответствовал 16 МГц, который находится чуть ниже, если я вас понял.
как указано в техническом описании, он предлагает вам некоторую внутреннюю схему для оптимизации внешней частоты и диапазона, которые вы предоставляете. Вы сообщаете это значение через биты. Если вы считаете, что это было полезно, вы можете дать мне удар, так как я здесь новенький.
Спасибо, вроде все отлично получилось. FWIW, вот команда avrdude, которую я использовал: avrdude -c usbasp -p m8 -U lfuse:w:0b11111111:m -U hfuse:w:0b11001001:m... может пригодиться будущим читателям этого вопроса. Чтобы было понятно, эта команда использовалась для настройки внешнего кристалла 16 МГц на моем ATMega8 с помощью программатора USBasp.