Рекомендации по применению 8-разрядных микроконтроллеров AVR
AVR053: Калибровка внутреннего RC-генератора
Отличительные особенности:
- Калибровка с использованием STK500, AVRISP, JTAGICE или JTAGICE mkII
- Калибровка с использованием программаторов сторонних производителей
- Подстройка частоты RC-генератора с точностью +/-1%
- Настройка RC-генератора при любом рабочем напряжении и температуре
- Настройка RC-генератора на любую частоту в пределах указанного в характеристиках диапазона
- Относится ко всем AVR-микроконтроллерам с регулируемым RC-генератором
- Выборочная частота синхронизации калибровки
Введение
В данных «Рекомендациях…» описывается быстрый и точный метод для калибровки внутреннего RC-генератора. В состав входит легко адаптируемый исходный код калибровочной программы, которая может использоваться совместно с любым микроконтроллером, у которого имеется встроенный RC-генератор. Данная программа позволяет выполнять калибровку с помощью отладочных средств для AVR-микроконтроллеров STK500, AVRISP или JTAGICE. Также могут использоваться калибровочные системы сторонних производителей, в т.ч. на основе промышленных программаторов.
Большинство существующих AVR-микроконтроллеров предлагают возможность работать от внутреннего RC-генератора. Частота внутреннего RC-генератора может быть откалибрована в большинстве AVR-микроконтроллеров с точностью ?1% относительно частоты, указанной в технических характеристиках на микроконтроллер. Такая возможность повышает гибкость и снижает стоимость решения по сравнению с использованием внешнего генератора.
Заводская калибровка Atmel выполняется при фиксированном рабочем напряжении и температуре (25°C и типично при 5В). Поскольку частота внутреннего RC-генератора зависит от рабочего напряжения и температуры, то может понадобиться дополнительная калибровка для специфических условий проектируемого приложения. Дополнительная калибровка может выполняться при необходимости увеличить точность по сравнению со стандартной калибровкой, учесть специфические рабочие напряжения и температуру или даже настроить генератор на другую частоту.
Рассматриваемый калибровочный метод длится на долю секунды дольше по сравнению со считыванием калибровочного байта из сигнатурной строки и записи его в память микроконтроллера. Таким образом, общее время программирования практически не изменяется при выполнении калибровки как шага программирования при производстве.
Обратите внимание, что в некоторых системах важно выполнять реально-временную калибровку генератора. Данное желательно в приложениях, где точность частоты синхронизации необходимо поддерживать во всем температурном диапазоне и она должна быть независима от рабочего напряжения. В этом случае часовой кварцевый резонатор может быть надежным и недорогим решением. Однако в данных рекомендациях реально-временная калибровка не рассматривается.
В конце данного документа Вы найдете руководство по быстрому старту.
Принцип действия внутреннего RC-генератора
На стадии производства внутренний RC-генератор калибруется при напряжении питания 5В или 3,3В. Точная информация по напряжению, при котором выполнялась калибровка, приводится в документации на каждый тип микроконтроллера. Точность калибровки составляет +/-3 или +/-10% (также необходимо уточнить в документации). Если точности стандартной заводской калибровки недостаточно, то имеется возможность выполнить дополнительную калибровку RC-генератора. В этом случае возможно достигнуть точности частоты генератора в пределах +/-1% (+/-2% для микроконтроллеров, у которых точность стандартной калибровки 10%). Таким образом, дополнительная калибровка может улучшить точность или адаптировать частоту генератора.
Выбор синхронизации
Для выбора источника синхронизации в микроконтроллерах AVR предусмотрены перепрограммируемые конфигурационные биты. Для активизации внутреннего RC-генератора необходимо запрограммировать соответствующее состояние этих бит. Какие именно биты должны быть запрограммированы, а какие нет, необходимо уточнить в документации на микроконтроллер.
Основная частота
В последующих разделах представлен обзор внутренних RC-генераторов AVR-микроконтроллеров.
Некоторые AVR-микроконтроллеры имеют только один RC-генератор, а другие до 4 выборочных генератора. Диапазон частот составляет от 1 МГц до 9,6 МГц. Для обеспечения высокой точности внутреннего RC-генератора в память ввода-вывода включен регистр калибровки генератора OSCCAL. Регистр OSCCAL является однобайтным. Назначением данного регистра является настройка частоты генератора. Данная настройка используется при калибровке RC-генератора.
Значение заводского калибровочного байта Atmel хранится в строке сигнатуры микроконтроллера. Калибровочный байт может варьироваться среди микроконтроллеров, т.к. частота RC-генератора зависима от технологии производства. Если микроконтроллер имеет более одного генератора, то значения калибровочных байт для каждого RC-генератора хранятся в строке сигнатуры.
Калибровочный байт RC-генератора, используемого по умолчанию, в большинстве микроконтроллеров автоматически считывается из строки сигнатуры и копируется в регистр OSCCAL при подаче питания. Например, у микроконтроллера ATmega8 по умолчанию активизирован внутренний RC-генератор с частотой 1МГц и при подаче питания калибровочный байт этого генератора автоматически загружается в регистр калибровки генератора. Если посредством конфигурационных бит выбран генератор 4МГц вместо используемого по умолчанию, то в программе необходимо предусмотреть ручную загрузку калибровочного байта этого генератора в регистр OSCCAL. С помощью средств для программирования может быть считано значение калибровочного байта генератора 4МГц, а затем сохранено во флэш-память или ЭСППЗУ. Далее уже в программе необходимо предусмотреть считывание калибровочного байта и его копирование в регистр OSCCAL в процессе выполнения программы.
В дополнение к настройке частоты генератора посредством регистра OSCCAL у некоторых микроконтроллеров предусмотрен предделитель системной синхронизации. Регистр предделителя (CLKPR) может использоваться для масштабирования системной синхронизации с предопределенными коэффициентами деления в коде двоичного дополнения. Кроме того, на данный предделитель можно повлиять посредством конфигурационных бит. Если запрограммировать бит CKDIV8, то CLKPR будет делить системную синхронизацию на 8. Это может понадобиться, если необходимо гарантировать работу микроконтроллера на частоте ниже номинальной. CLKPR может быть изменен во время выполнения программы для внутреннего изменения частоты синхронизации.
Основная частота генератора определена как немасштабированная частота генератора.
Обзор RC-генераторов
В процессе развития AVR-микроконтроллеров в них встраивались различные RC-генераторы. Обзор микроконтроллеров и их RC-генераторов представлен в таблице 1. Перечень, представленный ниже, отсортирован по типу генераторов, что в какой-то мере соответствует дате выпуска. В таблице представлены только микроконтроллеры с регулируемыми генераторами.
Таблица 1 – Частота генераторов различных версий и особенности микроконтроллеров
Версия генератора |
Микроконтроллер |
Частота RC-генератора, МГц |
CKDIV |
PRSCK |
1.1 |
ATtiny12 |
1.2 |
- |
- |
1.2 |
ATtiny15 |
1.6 |
- |
- |
2.0 |
ATmega163 |
1.0 |
- |
- |
2.0 |
ATmega323 |
1.0 |
- |
- |
3.0 |
ATmega8 |
1.0, 2.0, 4.0 и 8.0 |
- |
- |
3.0 |
ATmega16 |
1.0, 2.0, 4.0 и 8.0 |
- |
- |
3.0 |
ATmega32 |
1.0, 2.0, 4.0 и 8.0 |
- |
- |
3.1 |
ATmega64 |
1.0, 2.0, 4.0 и 8.0 |
- |
XDIV(1) |
3.1 |
ATmega128 |
1.0, 2.0, 4.0 и 8.0 |
- |
XDIV(1) |
3.0 |
ATmega8515 |
1.0, 2.0, 4.0 и 8.0 |
- |
- |
3.0 |
ATmega8535 |
1.0, 2.0, 4.0 и 8.0 |
- |
- |
3.0 |
ATtiny26 |
1.0, 2.0, 4.0 и 8.0 |
- |
- |
4.0 |
ATmega162 |
8.0 |
Есть |
Есть |
4.0 |
ATmega169 |
8.0 |
Есть |
Есть |
4.0 |
ATmega165 |
8.0 |
Есть |
Есть |
4.1 |
ATtiny13 |
4.8 и 9.6 |
Есть |
Есть |
4.2 |
ATtiny2313 |
4.0 и 8.0 |
Есть |
Есть |
5.0 |
ATmega48, ATmega88, ATmega168 |
8.0 |
Есть |
Есть |
5.0 |
ATtiny25, ATtiny45, ATtiny85 |
8.0 |
Есть |
Есть |
5.0 |
ATmega325, ATmega3250, Atmega645, Atmega6450 |
8.0 |
Есть |
Есть |
5.0 |
ATmega329, ATmega3290, Atmega649, Atmega6490 |
8.0 |
Есть |
Есть |
5.0 |
AT90CAN128 |
8.0 |
Есть |
Есть |
5.0 |
AT90PWM2, AT90PWM3 |
8.0 |
Есть |
Есть |
Прим.: 1. XDIV - название регистра предделителя.
Версии генераторов 1.х
Это самые ранние версии внутренних RC-генераторов AVR-микроконтроллеров, в которых была предусмотрена калибровка. Частотный диапазон этих генераторов составляет 1.2МГц…1.6МГц. Калибровочный байт хранится в строке сигнатуры, но автоматически не загружается при подаче питания. Загрузку регистра OSCCAL необходимо предусмотреть в программе. Частота генератора этих версий существенно зависит от рабочих напряжения и температуры.
Версия генераторов 2.х
Данные генераторы поставляются с частотой 1 МГц. Влияние рабочей температуры и напряжения на частоту генератора существенно снижено по сравнению с версией 1.x.
Версии генераторов 3.х
Данные версии появились одновременно с первыми микроконтроллерами, выпущенных по технологии 35.5k.
Системный генератор расширен для генерации нескольких частот. В состав микроконтроллера включено четыре различных RC-генератора с частотами 1, 2, 4 и 8МГц. В данных версиях предусмотрена автоматическое копирование калибровочного байта генератора 1МГц из строки сигнатуры. В связи с наличием 4 различных RC-генераторов также 4 различных калибровочных байта записаны в строке сигнатуры. Если необходимо использовать другой генератор (не 1MHz), то в программе необходимо предусмотреть загрузку регистра OSCCAL соответствующим калибровочным байтом.
Версии генераторов 4.х
В версии 4.0 предлагается один генератор частотой 8МГц. В остальных генераторах версий 4.x предлагается две частоты 4 и 8 МГц для микроконтроллера ATtiny2313, а также 4.8 и 9.6MHz для ATtiny13. Регистр OSCCAL измен таким образом, чтобы только 7 разрядов использовались для настройки частоты выбранного генератора. Старший разряд не используется. Предусмотрены функции автоматического копирования калибровочного байта генератора по умолчанию и предделение системной синхронизации.
Версия генераторов 5.х
В версии 5.0 предлагается один генератор частотой 8 МГц. Для настройки генератора используются все 8 разрядов регистра OSCCAL. Предусмотрены автоматическое копирование калибровочного значения и предделитель системной синхронизации. Регистр OSCCAL разделен на две части. Старший разряд регистра OSCCAL выбирает один из двух перекрывающихся частотных диапазонов, а 7 младших разрядов используются для настройки частоты в пределах выбранного диапазона.
Характеристики генераторов
Частота внутреннего RC-генератора зависит от температуры и от рабочего напряжения. Пример такой зависимости представлен на рисунке 1, на котором показана частота RC-генератора на 8МГц микроконтроллера ATmega169. Как видно из данного рисунка частота увеличивается с увеличением температуры и слегка снижается при увеличении рабочего напряжения. Данные характеристики отличаются для разных типов микроконтроллеров. Подробности по интересующему типу микроконтроллера необходимо искать в документации на него.
Рисунок 1 – Зависимость частоты калиброванного RC-генератора на 8МГц микроконтроллера ATmega169 от рабочего напряжения и температуры.
Все микроконтроллеры с регулируемыми генераторами содержат регистр OSCCAL для настройки частоты генератора. Увеличение значения в OSCCAL приводит к «псевдомонотонному» увеличению частоты. Причиной употребления термина «псевдомонотонный» является то, что при некоторых единичных приращениях значения OSCCAL частота не будет увеличиваться или будет слегка снижаться. Но при следующем единичном увеличении рост частоты возобновится. Другими словами, увеличение значения регистра OSCCAL на 1 не увеличивает частоту, но увеличение значения OSCCAL на 2 будет всегда увеличивать частоту. Данную информацию важно учесть при поиске наилучшего калибровочного значения для достижения заданной частоты. Пример псевдомонотонности зависимости между значением OSCCAL и частотой RC-генератора на 8МГц микроконтроллера ATmega169 приведен на рисунке 2. Обратите внимание, что в микроконтроллере ATmega169 используется только 7 разрядов регистра OSCCAL. Таким образом, максимальной частоте соответствует значение OSCCAL = 128.
Рисунок 2 – Зависимость частоты калиброванного RC-генератора микроконтроллера ATmega169 от значения OSCCAL.
Для всех регулируемых генераторов очень важно учесть, что не рекомендуется настраивать генератор на частоту, отличающуюся более чем на 10% от основной, приведенной в технических характеристиках на микроконтроллер в документации. Причиной этому является зависимость внутренней синхронизации микроконтроллера от частоты RC-генератора.
Зная фундаментальные характеристики RC-генераторов есть возможность создать эффективную калибровочную процедуру, которая калибрует RC-генератор на заданную частоту, которая отличается не более чем на 10% от основной, при любом рабочем напряжении и температуре с точностью +/-1%.
Реализация калибровки
Данный раздел разделен на описание протокола калибровки и описания программы. Протокол может быть адаптирован под любые средства тестирования или программирования для создания калибровочной системы. Соответственно, инструментальные средства Atmel для микроконтроллеров AVR, в т.ч. STK500, AVRISP, JTAGICE и JTAGICE mkII, подходят для этих целей. Использование данных средств для выполнения калибровки описано далее.
Калибровка при использовании STK500, AVRISP, JTAGICE и JTAGICE mkII поддерживается только в версии с командной строкой. Калибровка выполняется под управлением AVR Studio версии 4.11 SP1 (или выше). Самая свежая версия AVR Studio может быть найдена по ссылке http://www.gaw.ru/html.cgi/adv/soft/avr/astudio.htm.
Протокол калибровки
Протокол калибровки выполнен простым и быстрым, что позволяет его эффективно использовать в производственных условиях. Выводы, задействованные для программирования микроконтроллеров (интерфейс ISP или при наличии JTAG), используются для калибровки, поэтому они должны быть доступны в конечном изделии или на печатной плате.
Для калибровки используется два вывода: MOSI и MISO интерфейса ISP или TDI и TDO интерфейса JTAG. Для упрощения описания в дальнейшем указываются только MOSI и MISO, хотя вместо них можно использовать TDI и TDO.
Основная идея заключается в том, что программатор генерирует калибровочную синхронизацию и что микроконтроллер использует ее как эталон для калибровки внутреннего RC-генератора. После завершения калибровки микроконтроллер сигнализирует программатору «ОК» по линии MISO.
Программатор отвечает за включение подтягивающего резистора на линии MISO, а микроконтроллер отвечает за включение подтягивающего резистора на линии MOSI. Этим гарантируется маловероятность влияния шумов на калибровку.
Программатор может использовать 1024 такта синхронизации в качестве максимального времени калибровки, т.к. процедурой калибровки гарантируется завершение калибровки за указанное число тактов.
Процедура калибровки выполняет следующие шаги:
- Программатор записывает калибровочную программу в микроконтроллер, включает подтягивающий резистор на линии MISO и освобождает линию сброса микроконтроллера. Калибровочная синхронизация прикладывается к линии MOSI. Приемлемой считается частота, близкая к частоте часового кварцевого резонатора (32.768 кГц).
- Микроконтроллер разрешает внутренний подтягивающий резистор на линии MOSI и начинает опрос калибровочной синхронизации на MOSI.
- После детекции калибровочной синхронизации осуществляется двоичный поиск для нахождения значения OSCCAL, удовлетворяющего условию 1%-ой точности. Если двоичный поиск не дает желаемого результата, то тестируются несколько ближайших значений к результату двоичного поиска.
- Калибровочное значение запоминается в ЭСППЗУ (в случае неудачной калибровки данный шаг пропускается).
- После завершения калибровки линия MISO переключается 4 раза микроконтроллером. Переключение линии MISO выполняется 5…10 тактов ЦПУ после падающего фронта синхронизации на линии MOSI. В случае неудачной калибровки линия MISO не переключается.
- Если микроконтроллер не имеет конфигурационного бита EESAVE, то программатор должен считать калибровочный байт из ЭСППЗУ для дальнейшей перезаписи после стирания калибровочной программы во флэш-памяти. Если у микроконтроллера имеется конфигурационный бит EESAVE, то его необходимо установить, чтобы не нарушить содержимое ЭСППЗУ во время стирания флэш-памяти.
Необходимо скопировать калибровочный байт из ЭСППЗУ в регистр во время выполнения программы. Процедура, выполняющая это, должна быть предусмотрена в конечной программе для микроконтроллера.
Калибровочная программа
Калибровочный код написан на ассемблере для AVR Studio 4.11 с инсталлированным калибровочным пакетом.
Калибровочная программа структурирована таким образом, что она может быть легко изменена под использование любого микроконтроллера из таблицы 1. Кроме того, может быть изменен интерфейс калибровки. Все требуемые изменения выполняются в корневом файле “RC_Calibration.asm” при использовании для калибровки инструментальных средств для AVR.
Корневой файл ссылается на (включает) следующие фалы:
- Файл-описание микроконтроллера (выбирается один целевой микроконтроллер), например, “m16.asm” для Atmega16. В состав данного файла входит следующее:
- Определения регистров и бит, совпадающие с AVR Studio.
- Файл карты памяти, который определяет, где размещен код и какая ячейка ЭСППЗУ используется для хранения калибровочного байта.
- Макро-файл, который управляет доступом к регистру OSCCAL. Путь доступа к регистру OSCCAL зависит от его положения в памяти ввода-вывода.
- Файл версии генератора. Данный файл определяет величину начального шага, используемого в двоичном поиске, что позволяет учесть отличия в разрядности некоторых регистров OSCCAL (7 или 8).
- Макро-файл инициализации стека возврата. Некоторые микроконтроллеры имеют аппаратный стек, при этом, у других стек совмещен со статическим ОЗУ и, таким образом, требует инициализации.
- Макро-файл доступа к порту для определения как осуществлять доступ к регистрам, управляемых выводами, которые используются для калибровки. Это необходимо, поскольку, некоторые регистры размещены в верхней части памяти ввода-вывода, а другие – в нижней части памяти ввода-вывода.
- Переопределения имен бит и регистров также может входить в этот файл.
- Файл-описание калибровочного интерфейса. Данный файл назначает, какой порт ISP или JTAG, а также какие выводы используются в основной программе. Частота калибровочной синхронизации задается в этом файле.
- Файл с определением используемых макросов - “macros.inc”
- Общий код калибровки “main.asm”
Структура кода калибровки разработана с учетом простоты его изменения под желаемый тип микроконтроллера и интерфейс. Кроме того, широкое использование макросов гарантирует минимальность размеров кода. Конечное решение также гарантирует, что для поддержки новых микроконтроллеров и интерфейсов понадобиться минимум усилий.
Метод двоичного поиска
Поиск основан на методе двоичного поиска или иначе на методе декомпозиции (разделения):
- В регистр OSCCAL загружается начальное значение, которое равно половине максимального значения OSCCAL. Начальное значение OSCCAL определено как initial Step-Size (размер начального шага).
- После этого сравниваются частоты системной синхронизации и внешней эталонной калибровочной синхронизацией.
- Если отклонение частоты в пределах 1%, то переход на 5.
- Если системная синхронизация имеет более высокую частоту, то значение OSCCAL уменьшают и, наоборот, если системная синхронизация имеет меньшую частоту, то увеличивают значение в OSCCAL. Переход на шаг 3.
- Размер шага принимается в два раза меньше предыдущего.
- Если размер шага равен 0, то двоичный поиск неудачный и переход на 4.
- Если размер шага не 0, то он прибавляется или вычитается из текущего значения в регистре OSCCAL для увеличения или уменьшения частоты генератора. Повторение шага 2.
- Проверка 4 самых близких соседних значений OSCCAL. Это необходимо для компенсации недостатка «псевдомонотонности» соотношения между OSCCAL и частотой генератора.
- Если проверенное значение OSCCAL удовлетворяет заданной точности, то переход на 5.
- В противном случае (нет значений OSCCAL, удовлетворяющих заданной точности) на линии MISO устанавливается низкий уровень, сигнализируя о неудачном исходе.
- Запись калибровочного значения в ЭСППЗУ.
- Сигнализация успешности завершения калибровки путем 4 переключений линии MISO синхронно с переключением калибровочной синхронизации.
Метод определения частоты генератора
Сравнение частот калибровочной синхронизации и внутреннего RC-генератора выполняется с помощью 8-разрядного таймера-счетчика 0 (TC0). 8-разрядный таймер используется в связи с тем, что он присутствует во всех микроконтроллерах с регулируемыми RC-генераторами. Идея заключается в определении отсчета таймера за 40 тактов калибровочной синхронизации и сравнении полученного значения с предустановленными порогами. Частота калибровочной синхронизации в существующей реализации задается в файле-описании интерфейса. Метод определения частоты генератора показан в виде блок-схемы на рисунке 3.
Рисунок 3 – Блок-схема алгоритма определения соотношения между частотами калибровочной синхронизации и внутреннего генератора
В целях охвата полного диапазона частот генератора от 1 до 9,6 МГц выполняется проверка флага переполнения ТС0 (OVF) для увеличения разрядности таймера с 8 до 16. Флаг OVF проверяется каждый полупериод калибровочной синхронизации, чем гарантируется детекция всех переполнений таймера. Относительно 16-разрядного разрешения реализованного таймера следует заметить, что наихудший случай по переполнению таймера возникает при использовании генератора на 9,6МГц и загрузке в регистр OSCCAL значения 0xFF. В этом случае, генератор работает с вдвое большей частотой, а таймер дойдет до значения 23541, что с запасом охватывает 16-разрядный таймер.
Аналогичным образом необходимо рассмотреть случай минимальной частоты. Минимально возможная частота генерируется при записи в OSCCAL значения 0x00. В этом случае результирующая частота вдвое меньше от номинальной. Поскольку состояние флага OVF проверяется каждый полупериод, то потенциально потребуется не более 7 тактов ЦПУ на манипуляцию с флагом OVF и детекцию следующего фронта синхронизации (при заданной частоте 1 МГц). Данное временное ограничение выполняется, если флаг OVF не установлен, в случае же его установки потребуется 8 тактов. Это может привести к небольшой ошибке в детекции синхронизации, но не повлияет на конечный результат: генератор будет корректно определен как слишком медленный.
Благодаря использованию метода двоичного поиска вряд ли придется столкнуться с данными крайностями. Однако их рассмотрение может быть уместно при модифицировании калибровочного метода.
Корректировка неточностей синхронизации
Поскольку для детекции фронтов калибровочной синхронизации нет возможности использовать прерывания, то используется метод опроса. Как следствие применения данного метода фронт может быть детектирован с задержкой до 2 тактов ЦПУ. Потенциально это может стать причиной невозможности достичь 1%-ую точность калибровки. Для компенсации данной потенциальной временной ошибки пределы сжаты на 2 отсчета таймера (2 такта ЦПУ).
Все вычисления порогов и констант выполняются препроцессором, который использует 32-разрядную точность при использовании AVRASM и 64-разрядную точность при использовании AVRASM2.
Калибровочная программа не учитывает неточности источника калибровочной синхронизации. См. раздел “Точность калибровочной синхронизации ”в данном документе, чтобы узнать подробности по минимизации данного эффекта.
Использование STK500, AVRISP, JTAGICE или JTAGICE mkII для калибровки
Представленный исходный код калибровочной программы и командные файлы выполнены в качестве примера того, как использовать STK500, AVRISP, JTAGICE или JTAGICE mkII для выполнения калибровки. Для использования программы в составе другой калибровочной системы потребуются максимум незначительные изменения исходной программы.
Ассемблирование калибровочной программы
Исходный код калибровочной программы и командные файлы выполнены в качестве примера того, как использовать STK500, AVRISP, JTAGICE или JTAGICE mkII для выполнения калибровки. Для использования калибровочной программы в составе другой калибровочной системы понадобится внести незначительные изменения или же изменения вовсе не потребуются.
Ассемблирование калибровочной прошивки
Корневой файл калибровочной программы называется RC_Calibration.asm. Данный файл включен в ассемблерный проект в AVR Studio 4.11 SP1 (или выше). В данном файле добавляется целевой микроконтроллер и желаемый калибровочный интерфейс: STK500, AVRISP, JTAGICE или JTAGICE mkII. Кроме того, предусмотрена возможность задания желаемой точности калибровки и желаемой частоты целевого микроконтроллера.
После выполнения данных действий необходимо выполнить сборку проекта для генерации двоичного файла “rc_calib.hex”. Данный файл используется для калибровки микроконтроллера.
Обратите внимание, что очень важно соблюсти правильную установку конфигурационных бит перед калибровкой. Иными словами, невозможно откалибровать микроконтроллер на частоту 8 МГц, если с помощью конфигурационных бит выбран 1МГц-ый RC-генератор.
Использование инструментальных средств с управлением через командную строку
Поддержка калибровки у STK500, AVRISP, JTAGICE и JTAGICE mkII в настоящее время возможна только через интерфейс командной строки (AVR Studio 4.11 SP1 или выше). Программный пакет, который обеспечивает данную поддержку можно найти по ссылке http://www.gaw.ru/html.cgi/adv/soft/avr/astudio.htm. Необходимо проинсталлировать пакет по поддержке калибровки.
В состав пакета входят новые прошивки для инструментальных средств, которые необходимы для разрешения калибровки. Обновление прошивки инициируется автоматически при первом соединении инструментального средства с AVR Studio 4.11 SP1 (или выше). Альтернативно обновление может быть выполнено вручную, как описано в помощи к AVR Studio.
В состав исходного кода входят три командных файла. В этих файлах показывается, как использовать интерфейс командной строки для программирования калибровочного кода в целевой микроконтроллер, выполнить калибровку, а затем перепрограммировать микроконтроллер конечной прошивкой. Три командных файла управляют калибровкой ATmega16 посредством STK500/ISP, JTAGICE и JTAGICE mkII, соответственно. Изучите данные командные файлы и интегрированную помощь в AVR Studio, чтобы понять, как использовать инструментарий командной строки STK500/ISP, JTAGICE и JTAGICE mkII. В таблице 2 представлен перечень новых команд для exe-файлов, касающихся выполнения калибровки.
Таблица 2 – Специфические опции калибровки нового генератора в stk500.exe и jtagice.exe
Команда |
Описание |
-Z [addr] |
Чтение калибровочного байта из памяти ЭСППЗУ. ‘addr’ – адрес байта. Операция чтения выполняется перед выполнением команды “chip erase” (стирание кристалла). Использование ‘-S#’ приведет к перезаписи значения во флэш-памяти или ЭСППЗУ после стирания кристалла. |
-Y |
Выполнение последовательности калибровки генератора. Данная команда перекрывает все другие операции. exe-файл возвратит ошибочный уровень 1, если от целевого микроконтроллера не будет принят сигнал подтверждения. |
Добавление поддержки новых микроконтроллеров
Для добавления поддержки нового микроконтроллера необходимо только скопировать файл-описание для похожего микроконтроллера (желательно совместимый по расположению выводов) и адаптировать его под характеристики нового микроконтроллера. Приведенный ниже перечень может использоваться для адаптирования файла к новому микроконтроллеру. В качестве примера используется ATmega8535.
- Скопируйте файл-описание микроконтроллера, совместимого по расположению выводов и функциям.
- ATmega8535 совместим по расположению выводов с ATmega16, однако, ATmega8535 не имеет интерфейса JTAG. Таким образом, копируется файл “m16.asm” и ему присваивается имя “m8535.asm”
- Измените имя файла с определением регистров и бит нового микроконтроллера.
- Для ATmega8535 файл с определением регистров и бит называется “m8535.inc”
- Измените файл-описание выводов для согласования расположения выводов.
- Поскольку ATmega8535 не имеет интерфейса JTAG, в отличие от ATmega16, то файл с описанием расположения выводов изменяется на “s8535_family_pinout.inc”.
- Измените файл версии генератора для указания версии нового генератора.
- Добавьте новый файл в перечень микроконтроллеров в файле RC_Calibration.
- Убедитесь в корректности ассемблирования. Если при ассемблировании возникает ошибка, то в большинстве случаев это связано с изменением имен регистров или бит, выводов или таймеров. ATtiny13 (t13.asm) реализован как переназначенный ATtiny12 и может использоваться как образец по переназначению.
Характеристики калибровочной программы
При написании кода достигалась его максимальная эффективность. Весь процесс калибровки должен быть достаточно быстрым. Таким образом, к характеристикам относятся размер калибровочной прошивки и длительность калибровки.
Калибровочная прошивка занимает 183…240 байт, а фактический размер зависит от типа выбранного микроконтроллера и интерфейса. Таким образом, программирование данной прошивки выполняется очень быстро.
Процедура калибровки завершается менее чем за 1024 калибровочных такта. Минимальная продолжительность зависит от длительности нахождения подходящего значения OSCCAL и времени записи ЭСППЗУ. В предлагаемом исполнении при использовании STK500.exe или JTAGICE.exe калибровка завершается не более чем за 32 мс.
Точность калибровочной синхронизации
Точность калибровки существенно зависит от точности внешней калибровочной синхронизации. Частота калибровочной синхронизации, генерируемая инструментальными средствами для AVR, может варьироваться. Поэтому, очень важно измерить с высокой точностью генерируемую частоту и указать ее в исходном файле-описании интерфейса. Поскольку частота резонаторов зависит от рабочего напряжения и температуры, то измерение частоты необходимо выполнять при тех же условиях, что и при выполнении калибровки.
Руководство по быстрому освоению калибровки внутреннего RC-генератора
Для быстрого освоения калибровки одного из поддерживаемых микроконтроллеров рекомендуется придерживаться следующей последовательности.
- Скачайте и распакуйте исходный код для AVR053 (любое местоположение может использоваться, здесь полагается \AVR053\).
- Загрузите и проинсталлируйте AVR Studio 4.11 SP1 с сайта http://www.atmel.com/avr/
- Запустите AVR Studio, создайте новый проект с именем “rc_calib” и добавьте в проект корневой исходный файл RC_Calibration.asm.
- Выберите целевой микроконтроллер из перечня в RC_Calibration.asm путем удаления или добавления точки с запятой (";") в начале строки определения микроконтроллера.
- Выберите интерфейс, который используется для калибровки, аналогичным предыдущему способом.
- Измерьте частоту калибровочной синхронизации с помощью частотометра или осциллографа. Данный сигнал может быть найден на линии MOSI в STK500/AVRISP и TDI в JTAG ICE. Введите определенное таким образом значение частоты в файле-описании интерфейса в строке “.EQU CALIB_CLOCK_FREQ = XXXX”.
- Задайте желаемую частоту целевого микроконтроллера и желаемую точность калибровки. Обратите внимание, что если задана высокая точность калибровки, то высока вероятность неудачного исхода. Уточните в документации достижимую точность.
- Ассемблируйте проект для генерации hex-файла, который необходимо запрограммировать в микроконтроллер.
- Если STK500/AVRISP используется для калибровки, то:
- Откройте файл “\AVR053\AVR Asm\Batch file\ISP_rc_calib.bat” в редакторе. (выполните STK500.exe -h для вывода информации по аргументам).
- Отредактируйте файл для выбора желаемого микроконтроллера путем изменения аргумента -datmega16 на -d[целевой микроконтроллер].
- Измените настройки конфигурационных бит на желаемые. Следует понимать, что выбираемые установки должны соответствовать желаемой частоте калибровки, например, необходимо выбрать «8MHz internal RC», если требуется калибровка на частоту 8МГц. Установки конфигурационных бит задаются посредством аргументов -E (расширенные конфигурационные биты) и -f (старший/младший конфигурационные биты). Учтите, что конфигурационный бит постоянного включения сторожевого таймера не нужно устанавливать.
- Если путь инсталляции AVR Studio отличается от используемого в командном файле, то измените путь к файлу stk500.exe.
- Сохраните файл.
- Если для калибровки используется JTAGICE, то обратите внимание, чтобы была доступна линия сброса.
- Откройте файл \AVR053\AVR Asm\Batch file\JTAGICE_rc_calib.bat в редакторе. (информация по аргументам выводится по команде jtagice.exe -h).
- Отредактируйте файл для выбора желаемого микроконтроллера путем изменения аргумента -datmega16 на -d[целевой микроконтроллер].
- Задайте желаемые значения конфигурационных бит. Вводимые установки должны соответствовать желаемой частоте, например, выберите «8MHz internal RC», если микроконтроллер калибруется на частоту 8 МГц. Значения конфигурационных бит задаются через аргументы -E (расширенные конфигурационные биты) и -f (старшие/младшие конфигурационные биты). Необходимо учесть, чтобы бит постоянного разрешения сторожевого таймера не был установлен.
- Если путь инсталляции AVR Studio отличается от используемого в командном файле, то измените путь к файлу jtagice.exe.
- Сохраните файл.
- Если JTAGICE mkII используется для калибровки, то необходимо обеспечить доступность линии сброса для JTAGICE mkII.
- Откройте файл \AVR053\AVR Asm\Batch file\JTAGICE_mkII_rc_calib.bat в редакторе. (для вывода информации по аргументам выполните jtagiceii.exe -h).
- Отредактируйте файл в целях выбора желаемого микроконтроллера путем изменения аргумента -dATmega16 на –d [целевой микроконтроллер].
- Задайте желаемые значения конфигурационных бит. Вводимые установки должны соответствовать желаемой частоте, например, выберите «8MHz internal RC», если микроконтроллер калибруется на частоту 8 МГц. Значения конфигурационных бит задаются через аргументы -E (расширенные конфигурационные биты) и -f (старшие/младшие конфигурационные биты). Необходимо учесть, чтобы бит постоянного разрешения сторожевого таймера не был установлен.
- Если путь инсталляции AVR Studio отличается от используемого в командном файле, то измените путь к файлу jtagiceii.exe.
- Сохраните файл.
- Подключите STK500, AVRISP, JTAGICE или JTAGICE mkII к целевой плате. Подайте питание на инструментальное средство и приложение. Убедитесь, что кабель последовательной связи подключен между инструментальным средством и ПК.
- Запустите командное окно (DOS). Выберите директорию “\AVR053\AVR Asm\Batch file\”. Запустите командный файл (ISP_rc_calib.bat, JTAGICE_rc_calib.bat или JTAGICE_mkII_rc_calib.bat).
- Немного подождите до завершения калибровки.
Командный файл также может быть модифицирован для программирования выборочной прошивки аналогично test.hex после калибровки. Следует понимать, что новое калибровочное значение должно быть загружено в регистр OSCCAL во время выполнения программы.
Документация:
|
|
Engl 188Kb Исходный фаил |
|
|
40Kb Программа |
промышленные полы, полиуретановые полы
|