Информация к новости
  • Просмотров: 45820
  • Автор: administrator
  • Дата: 9 апреля 2008
  • 0
9 апреля 2008

Тактирование и фузи-биты

Категория: Начинающим

Вам удалось заставить мигать светодиод на вашем ATmega168 (ATmega8)  – Поздравляем! Это существенное достижение для начала. Теперь пришло время заставить его мигать быстрее.

Вы загружаете код программы в чип и ATmega168 выполняет этот код, но как он работает при этом? И как быстро? Любой микроконтроллер нуждается в источнике тактового сигнала. Думайте о нём как о «ритме музыки», который использует микроконтроллер при выполнении кода. Без тактового сигнала микроконтроллер не знает как запускать код и при нестабильном тактировании код будет выполняться так же нестабильно. Вам необходим тактовый сигнал определённого типа и иногда требуется очень чёткий и точный сигнал. Вы когда-нибудь пробовали танцевать под CD который постоянно залипает и обрывается? Это очень трудно.
 
Здесь приведены основные способы задания тактового сигнала:
 
  1. Внешняя RC – цепочка – используется главным образом для программ не критичных к скорости выполнения. В цепи состоящей из резистора и конденсатора, заряд/разряд использоваться в качестве тактирующего сигнала. Простейший вариант не рекомендуется использовать.
  2. Внутренняя RC цепочка -  самый экономичный тактовый генератор. Современный микроконтроллер, такой как ATmega168, можно просто попросить генерировать тактовый сигнал для самого себя. При этом будет использоваться встроенная в кристалл процессора RC цепочка. К сожалению, сигнал такого тактового генератора не очень стабилен.
  3. Внешний тактовый кварцевый резонатор – стал де факто стандартом тактирования микроконтроллеров. Подключив кристалл кварца (для простоты просто кристалл) к соответствующим выводам микроконтроллера запускаем микроконтроллер на заданной частоте – частоте кварца.
  4. Внешний тактовый  керамический резонатор – резонатор чуть дешевле, чем кристалл, но имеет меньшую точность.     
  5. Внешний сигнал синхронизации – вместо осциллятора вы можете использовать внешний тактирующий сигнал. Этот способ применяется в случае если требуется одновременная работа нескольких устройств на одной частоте. Автором никогда не использовалась эта опция.

Внутренняя RC цепочка –

 

В Atmel работают умные люди! Они выставили в ATmega168 по умолчанию использование внутреннего генератора на 1МГц. Микроконтроллер ATmega168 (и семейство микроконтроллеров AVR в общем) способны выполнять одну инструкцию за один такт. Это означает, что в каждый момент времени, когда генератор совершает один цикл, выполняется одна инструкция (хотя существуют и инструкции которым необходимо более чем один такт на выполнение).  Так как  мы используем обычный  ATmega168, мы запускаем мигание светодиодом с частотой 1МГц или 1MIPS (миллион инструкций с секунду). Вы прочитали верно – один миллион действий в секунду. Это действительно впечатляет. Какие же тогда проблемы ограничивают использование внутреннего тактового генератора? А проблемы заключаются в отклонении сигнала на +/- 5 процентов и возможности внутреннего генератора работать на максимальной  частоте 8 МГц. Отклонение 5 процентов означает, что ваш ATmega168 может выполнять 1.000.000 *1.05 = 1.050.000 инструкций секунду, в то время как у вашего соседа его ATmega168 может производить 1.000.000 * 0.95 = 950.000 инструкций в секунду. Это может показаться небольшой разницей, но для современной цифровой электроники это очень много. Так же ATmega168 имеет максимальную частоту работы в 20МГц при том что внутренний генератор может выдавать максимум 8. Таким образом если вы хотите использовать весь потенциал микроконтроллера вам необходимо использовать внешний тактовый генератор.

 

Внешний тактовый кварцевый резонатор –

 

Это один из наиболее распространенных источников тактового сигнала.
Внешний тактовый кварцевый резонатор
 

Кварцевые резонаторы выпускаются в разных корпусах и на разные частоты. Наиболее распространены кварцы на 20МГц, 16МГц, 10Мгц, 8Mгц и 4Мгц. Так же выпускаются кварцы частот типа 14.7456МГц, 9.216МГц и 32,768кГц. Эти частоты кратны частотам необходимым для последовательного обмена и для расчетов  времени. На пример, если необходимо обеспечить последовательный обмен на скорости 9600 бит в секунду, 9.216МГц делим на 960 и получаем 9600. Просто нет целого числа, на которое бы можно было разделить без остатка 16МГц чтобы получить 9600. поэтому последовательный обмен на кварце 9.216МГц будет гораздо более качественным, а на 16МГц всегда будет приводить к некоторому числу ошибок.   

Внутри, под металлом резонатора содержится небольшой кусок кварца. Кварц имеет  определённый высокоточный размер и вибрирует с определённой частотой. Внутренний осциллятор ATMega имеет отклонение в +/-5%. В то же время для кристалла этот показатель измеряется в +/- 20 ppm. Это означает частоту с погрешностью «частей» на миллион. Таким образом, на примере кварца в 16Мгц отклонения составят +/- 320Гц. Что в процентах составляет +/- 0.002%. Кристалл имеет в 2.5 тыс. раз более высокую точность чем внутренний тактовый генератор.

 

Внешний керамический резонатор -
По своим характеристикам занимает промежуточное положение между внутренними RC генераторами и кварцевыми резонаторами
Внешний керамический резонатор

Керамический резонатор представляет собой керамический элемент особой конструкции, обеспечивающей колебания с определённой частотой. К сожалению это процесс сложно обеспечить с высокой точностью. Керамические резонаторы обычно имеют погрешность +/- 0.5%. Таким образом они в 10 раз точнее внутренних осцилляторов, но всё ещё проигрывают резонаторам на кристаллах. 

Керамические резонаторы дешевле кварцевых, имеют как правило более низкие частоты работы. Керамические резонаторы мало греются, так как имеют защитный корпус, размещённый внутри 3-х пиновго элемента.  Корпуса могут быть выполнены в очень небольших габаритах, что позволяет экономить место на печатной плате.
 
Подводя некоторый итого можно сказать что для некоторых приложений внутреннего тактового генератора достаточно. Но если вы попробуете организовать последовательный обмен, то 5% погрешности это слишком много (допустимые значения для последовательного обмена составляют 1-2% отклонений). Я использую кварцевые резонаторы в большинстве своих проектов. Но когда требуется сделать какое то действительно компактное устройство – использую керамические резонаторы. Любое устройство  работающее с цифровыми высокочастотными сигналами требует применения высокоточных кварцевых резонаторов. Любой осциллятор может изменять характеристики с течением времени (этот процесс называют старением) и любой генератор изменяет свои характеристики при изменении температуры.  
 
Как говорилось выше ATmega168 поставляется сконфигурированным на внутренний  тактовый генератор на 1МГц. Но мы можем заставить его работать лучше, установив на него внешний кварцевый резонатор на 16 МГц.
Чем придётся поплатиться при запуске ATmega168 на высокой частоте? Тем что на высоких частотах нельзя использовать низкое напряжение питания (такое как 3.3В или 2.8В). На 20МГц микроконтроллер будет потреблять больше мощности чем на 1МГц. Все эти факторы нужно учитывать при разработке собственных систем.
 
Как быстро можно запустить контроллер?

Максимальная скорость работы ATmega168 – 20МГц или 20MIPS! Это кажется действительно быстрым.

Возьмите свой  кварц на 16МГц и найдите контакты PB6 и PB7.
 Тактирование и фузи-биты
 

Соедините контакты кварца с выводами контроллера и заземлите каждый через конденсатор на 22пФ.

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

Фузии - биты -

 

 

 
Это была одна из сложнейших проблем при работе с контроллерами AVR. Фузи – биты представляют собой низкоуровневое конфигурирование микроконтроллера. Устанавливая или снимая эти биты вы можете полностью изменить режим работы контроллера. Многие годы я был сторонником микроконтроллеров PIC. Конфигурирование PIC было простым. Вы просто управляете ими через Windows приложение или программно в коде Си.  AVRы во многом отличаются и вы запросто можете вывести из строя ваш контроллер, если не разберётесь с программированием фузи-бит.    
  
Два конфигурационных байта ATmega168 получили название «Фузи-биты». Если вас ещё нет -  скачайте даташит на  ATmega168(всего 376 страниц) и сохраните на рабочем столе.  Если вы никогда не читали подобной документации, не переживайте. Вам не понадобится изучать все 376 страниц, вам только нужно знать как находить нужную информацию из даташита, а это не совсем просто.
Давайте попробуем найти Фузи – биты. Направляемся в раздел «Источники  тактирования» (Убедитесь, что боковая панель открыта и вы можете видеть все разделы даташита). Здесь описывается множество настроек для источников тактирования ATmega168. Давайте начнём с настройки внутреннего осциллятора с 1МГц до 8МГц.
 
Тактирование и фузи-биты
 

Страница 34 (раздел 8.6) «По умолчанию внутренний RC осциллятор обеспечивает приблизительно 8МГц. В зависимости от напряжения и температуры эта частота может быть с достаточной точностью настроена пользователем. Устройство поставляется с запрограммированным битом CKDIV8. Подробности смотрите в раздел «Предделитель частоты» на странице 37 »

Таким образом чтобы запустить внутренний тактовый генератор быстрее необходимо изменить фузии -бит CKDIV8

 

Тактирование и фузи-биты
 
Здесь мы видим почему ATmega168 может использоваться прямо из коробки. Atmel поставляет контроллер с настроенным на 8МГц внутренним RC осциллятором и с установленным предделителем частоты на 8. Итого получаем частоту контроллера 1МГц. Всё что нам нужно это изменить бит CKDIV8 и убрать деление частоты.

Младший фузи байт по умолчанию : 0b.0110.0010

Новое значение фузи байта : 0b.1110.0010
Используя эти новые значения фузи-бит, ATmega168 должна запуститься на частоте 8МГц на внутреннем тактовом генераторе и мы должны увидеть что светодиод мигает в 8 раз быстрее.
 
Запускаем микроконтроллер на частоте 16Mhz
 
Вам понадобится кварц на 16МГц присоединенный к линиям тактового генератора, как показано на схеме выше. Вернитесь в раздел «Источники  тактирования» документации и и изучите настройки подключения внешнего тактового резонатора. Я помогу вам. Они должны выглядеть так:

CKDIV8 = 1

CKOUT = 1

SUT1 = 1

SUT0 = 0

CKSEL3 = 0

CKSEL2 = 1

CKSEL1 = 1

CKSEL0 = 0
 
Когда вы запрограммируете эти настройки, ATmega168 должна переключиться на внешний тактовый резонатор 16МГц и диод замигает ещё в два раза быстрее. Если этого не произошло, перепроверьте ёмкости на кварце и линии тактового генератора xtal. ATmega168 имеет максимальную скорость работы 20МГц (20MIPS). Попробуйте разогнать ваш микроконтроллер кварцем на 30 или 40 МГц. Может быть даже всё будет работать, однако вы никогда не захотите разрабатывать реальную систему на частотах, превышающих спецификацию. 
 
На основе зарубежных источников

 

 

Метки к статье: начинающим, atmega8, atmega168

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
<
wan0

18 апреля 2009 21:44

Информация к комментарию
  • Группа: Гости
  • ICQ: {icq}
  • Регистрация: --
  • Статус:
  • Публикаций: 0
  • Комментариев: 0
Здравствуйте! ПОдскажите пожалуйста, как фузи нужно прошить в мега8
чтобы включился внешний генератор на 16Mhz?
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.