Уважаемые пользователи Голос!
Сайт доступен в режиме «чтение» до сентября 2020 года. Операции с токенами Golos, Cyber можно проводить, используя альтернативные клиенты или через эксплорер Cyberway. Подробности здесь: https://golos.io/@goloscore/operacii-s-tokenami-golos-cyber-1594822432061
С уважением, команда “Голос”
GOLOS
RU
EN
UA
evgenij-byvshev
8 лет назад

Программирование микроконтроллеров. Часть 9

Тактирование микроконтроллера ATmega328P

И снова здравствуйте! Сегодня я расскажу вам о тактировании микроконтроллера.

Тактовая частота микроконтроллера - это количество тактов, в секунду которые выполняет микроконтроллер. Получается, чем больше тактовая частота микроконтроллера, тем большее количество операций он может выполнить за 1 секунду.

К примеру тактовая частота в 8 МГц означает что МК за 1 секунду выполнить 8000000 различных операций таких как сложение, вычитание, запись данных в регистры и чтение данных т.д.

Микроконтроллер ATmega328P имеет возможность тактирования как внешними, так и внутренними средствами. Выбор режима осуществляется исходя из требований, предъявляемых для разрабатываемого устройства. Так, для большей стабильности и максимальной производительности стоит выбрать использование внешнего кварцевого резонатора или внешнего тактового генератора (до 20 МГц). Если же необходимо задействовать все порты ввода/вывода (высвобождается 2 ножки), уменьшить количество внешних компонентов разрабатываемого устройства, то в данном случае лучше использовать внутренний тактовый генератор (8 МГц или 128кГц).

Выбор режима тактирования осуществляется программированием конфигурационных ячеек (в данном случае Low Fuse Byte):

Биты CKSEL3 - CKSEL1 (3 - 1) управляют выбором тактового генератора:

  • 111 - Кварцевый резонатор с низким эноргопотреблением (8 - 16 МГц)
  • 110 - Кварцевый резонатор с низким эноргопотреблением (3 - 8 МГц)
  • 101 - Кварцевый резонатор с низким эноргопотреблением (0.9 - 3 МГц)
  • 100 - Кварцевый резонатор с низким эноргопотреблением (0.4 - 0.9 МГц)
  • 011 - Обычный кварцевый резонатор (0.4 - 20 МГц)
  • 010 - Низкочастотный кварцевый резонатор
  • 001 - RC тактовый генератор (128 кГц или настраиваемый)
  • 000 – Внешний тактовый генератор

Биты CKSEL0 (0), а также SUT1 (5), SUT0 (4) устанавливают дополнительные параметры для выбранного режима тактирования:

1. При выборе режима работы от кварцевого резонатора с низким энергопотреблением, а также от обычного кварцевого резонатора они выполняют функции установки задержки начала работы после включения питания и выходом из режима пониженного энергопотребления (STP), а также дополнительной задержки после сброса (ADR):

  • 000 - STP = 258 тактов, ADR = 14 тактов + 4.1 мс
  • 001 - STP = 258 тактов, ADR = 14 тактов + 65 мс
  • 010 - STP = 1024 такта, ADR = 14 тактов
  • 011 - STP = 1024 такта, ADR = 14 тактов + 4.1 мс
  • 100 - STP = 1024 такта, ADR = 14 тактов + 65 мс
  • 101 - STP = 16 тысяч тактов, ADR = 14 тактов
  • 110 - STP = 16 тысяч тактов, ADR = 14 тактов + 4.1 мс
  • 111 - STP = 16 тысяч тактов, ADR = 14 тактов + 65 мс

Эта задержка прежде всего выбирается исходя из времени установления стабильной работы тактового генератора.

2. При выборе режима работы от низкочастотного кварцевого резонатора:

  • 000 - STP = 1024 такта, ADR = 4 такта
  • 001 - STP = 1024 такта, ADR = 4 такта + 4.1 мс
  • 010 - STP = 1024 такта, ADR = 4 такта + 65 мс
  • 011 - резерв
  • 100 - STP = 32 тысячи тактов, ADR = 4 такта
  • 101 - STP = 32 тысячи тактов, ADR = 4 такта + 4.1 мс
  • 110 - STP = 32 тысячи тактов, ADR = 4 такта + 65 мс
  • 111 – резерв

3. При выборе режима работы от внутреннего RC генератора:

  • 000 - частота 8 МГц, STP = 6 тактов, ADR = 14 тактов
  • 001 - частота 8 МГц, STP = 6 тактов, ADR = 14 тактов + 4.1 мс
  • 010 - частота 8 МГц, STP = 6 тактов, ADR = 14 тактов + 65 мс
  • 011 – резерв
  • 100 - частота 128 кГц, STP = 6 тактов, ADR = 14 тактов
  • 101 - частота 128 кГц, STP = 6 тактов, ADR = 14 тактов + 4.1 мс
  • 110 - частота 128 кГц, STP = 6 тактов, ADR = 14 тактов + 65 мс
  • 111 – резерв

4. При выборе внешнего тактового генератора:

  • x00 - STP = 6 тактов, ADR = 14 тактов
  • x01 - STP = 6 тактов, ADR = 14 тактов + 4.1 мс
  • x10 - STP = 6 тактов, ADR = 14 тактов + 65 мс
  • x11 – резерв

Бит CKOUT (6) включает внешний выход тактового сигнала CLKO (14 ножка) если его сбросить в 0 (при записи в него 1, ножка 14 работает как обычный порт ввода/вывода).

Бит CKDIV8 (7) позволяет использовать предделитель тактовой частоты на 8 при сбросе его в 0 (при записи в него 1 тактовая частота не изменяется).

Внутренний генератор, частотой 8 МГц, не достаточно стабилен и в зависимости от партии микроконтроллеров его частота может изменяться от 7.3 до 8.1 МГц. Для его подстройки в микроконтроллере есть специальный регистр OSCCAL (8 бит). С увеличением значения, записанного в этот регистр, увеличивается и тактовая частота в обозначенных выше пределах.

Также микроконтроллер ATmega328 имеет внутренний предделитель. Управление предделителем осуществляется через регистр CLKPR:

Бит CLKPCE (7) управляет изменением значения предделителя. Для изменения значения предделителя сначала в него необходимо записать 1, при этом стоит учесть, что в остальные биты данного регистра должно быть записано значение 0. После этого в течении четырех машинных циклов необходимо изменить значение предделителя записью соответствующих битов. По прошествии четырех машинных циклов бит CLKPCE сбрасывается в 0.

Биты CLKPS3 - CLKPS0 (3 - 0) устанавливают значение деления тактовой частоты предделителем:

  • 0000 - тактовая частота без изменений
  • 0001 - CLK/2
  • 0010 - CLK/4
  • 0011 - CLK/8
  • 0100 - CLK/16
  • 0101 - CLK/32
  • 0110 - CLK/64
  • 0111 - CLK/128
  • 1000 - CLK/256
  • 1001 – 1111 - резерв

Если есть вопросы и предложения по этому уроку, пишите комментарии буду рад ответить на ваши вопросы.


Часть 1
Часть 2-1 Часть 2-2
Часть 3-1 Часть 3-2
Часть 4-1 Часть 4-2
Часть 5
Часть 6-1 Часть 6-2
Часть 7
Часть 8-1 Часть 8-2

14
855.658 GOLOS
На Golos с February 2017
Комментарии (3)
Сортировать по:
Сначала старые