Как стать программистом Как устроен компьютер. Что такое программа. Как написать свою программу. И многое другое узнаете вы из этой книги. Получить бесплатно! |
Регистры CLKPR и OSCCAL
Микроконтроллеры / Для начинающих / Архитектура /
![]() |
Что нужно для того, чтобы стать профессиональным разработчиком программ для микроконтроллеров и выйти на такой уровень мастерства, который позволит с лёгкостью найти и устроиться на работу с высокой зарплатой (средняя зарплата программиста микроконтроллеров по России на начало 2017 года составляет 80 000 рублей). Подробнее... |
OSCCAL – Oscillator Calibration Register (регистр калибровки генератора тактовой частоты)

- Бит 7 - Res: Зарезервирован.
- Биты 6...0 - CAL[6:0]: значение калибровки генератора.
Запись калибровочного байта в этот адрес (в биты 6...0) приведет к подстройке внутреннего генератора, чтобы устранить неравномерности из частоты генератора. Это делается автоматически во время сброса микроконтроллера.
Если регистр OSCCAL равен нулю, выбирается самая низкая доступная частота. Запись ненулевых значений в этот регистр приведет к увеличению частоты внутреннего генератора. Запись 0x7F в регистр дает самую высокую доступную частоту.
Откалиброванный генератор используется для определения времени доступа к EEPROM и Flash. Если EEPROM или Flash уже записаны (содержат данные), то не калибруйте генератор до более чем на 10% выше номинальной частоты. В противном случае запись EEPROM или Flash может завершиться ошибкой. Обратите внимание, что генератор предназначен для калибровки на 9,6 МГц или на 4,8 МГц. Настройка на другие значения не гарантируется, как указано в таблице 6-7 ниже.
Значение OSCCAL | Типовая самая низкая частота по отношению к номинальной частоте | Типовая самая высокая частота по отношению к номинальной частоте |
0х00 | 50% | 100% |
0х3F | 75% | 150% |
0x7F | 100% | 200% |
Для обеспечения устойчивой работы микроконтроллера калибровочное значение следует изменять небольшими шагами. Изменение частоты более чем на 2% от одного цикла к следующему может привести к непредсказуемому поведению. Изменения в регистре OSCCAL не должны превышать 0x20 для каждой калибровки. Это необходимо для того, чтобы микроконтроллер сохранялся в сбросе во время таких изменений тактовой частоты.
CLKPR - Clock Prescale Register (делитель частоты)

- Бит 7 – CLKPCE: Включение изменения делителя частоты. В бит CLKPCE должна быть записана логическая единица, чтобы включить изменение битов CLKPS. Бит CLKPCE обновляется только тогда, когда другие биты в CLKPR одновременно записываются в ноль. CLKPCE очищается аппаратными средствами через четыре такта после его записи или при записи битов CLKPS. Перезапись бита CLKPCE в течение этого периода ожидания не продлевает период ожидания и не очищает бит CLKPCE.
- Биты 6...4: Зарезервированы. Эти биты зарезервированы в ATtiny13A и всегда равны нулю.
- Биты 3...0 - CLKPS[3:0]: Биты установки делителя частоты. Эти биты определяют коэффициент деления между выбранным источником синхронизации и внутренними системными часами. Эти биты могут быть записаны во время выполнения для изменения тактовой частоты в соответствии с требованиями приложения. Поскольку делитель делит главный тактовый вход микроконтроллера, скорость всех синхронных периферийных устройств уменьшается при использовании коэффициента деления. Коэффициенты деления приведены в таблице 6-8.
CLKPS3 | CLKPS2 | CLKPS1 | CLKPS0 | Делитель |
0 | 0 | 0 | 0 | 1 |
0 | 0 | 0 | 1 | 2 |
0 | 0 | 1 | 0 | 4 |
0 | 0 | 1 | 1 | 8 |
0 | 1 | 0 | 0 | 16 |
0 | 1 | 0 | 1 | 32 |
0 | 1 | 1 | 0 | 64 |
0 | 1 | 1 | 1 | 128 |
1 | 0 | 0 | 0 | 256 |
1 | 0 | 0 | 1 | Резерв |
1 | 0 | 1 | 0 | Резерв |
1 | 0 | 1 | 1 | Резерв |
1 | 1 | 0 | 0 | Резерв |
1 | 1 | 0 | 1 | Резерв |
1 | 1 | 1 | 0 | Резерв |
1 | 1 | 1 | 1 | Резерв |
Чтобы избежать непреднамеренных изменений тактовой частоты, необходимо выполнить специальную процедуру записи для изменения битов CLKPS:
- Записать бит Clock Prescaler Change Enable (CLKPCE) в единицу, а все остальные биты в CLKPR - в ноль.
- В течение четырех тактов записать желаемое значение в CLKPS, а в CLKPCE записать ноль.
Прерывания должны быть отключены при изменении настроек делителя частоты. Это необходимо для уверенности, что запись не прервётся.
Конфигурационный бит CKDIV8 определяет начальное значение битов CLKPS. Если CKDIV8 не запрограммирован, то биты CLKPS будут сброшены в “0000”. Если CKDIV8 запрограммирован, то биты CLKPS устанавливаются в "0011", давая коэффициент деления 8 при запуске.
Эта функция должна использоваться, если выбранный источник тактовой частоты имеет более высокую частоту, чем наибольшая допустимая частота устройства в текущих условиях использования.
Обратите внимание, что любое значение может быть записано в биты CLKPS независимо от настройки конфигурационного бита (fuse-бита) CKDIV8.
Прикладное программное обеспечение должно гарантировать, что выбран достаточный коэффициент деления, если выбранный источник тактовой частоты имеет более высокую частоту, чем наибольшая допустимая частота устройства в текущих условиях использования. Устройство поставляется с запрограммированным fuse-битом CKDIV8.
См. также Делитель тактовой частоты.
Вступить в группу "Основы программирования"
Подписаться на RUTUBE-канал Подписаться на Дзен-канал Подписаться на рассылки по программированию |
![]() |
Микроконтроллеры для ЧАЙНИКОВ
Бесплатная рассылка о микроконтроллерах. Рассылка содержит как бесплатную информацию для начинающих, так и ссылки на платные продукты (книги, видеокурсы и др.) для тех, кто захочет вникнуть в тему более глубоко. Подробнее... |