Перейти к содержанию
    

Калибровка частоты в AVR

Добрый день.

Хочу использовать в AVR контроллере внутренний генератор с частотой отличной от 1МГЦ.

Хочу произвести калибровку этой частоты.

Понимаю, что при программировании надо прочитать соответствующую калибровочную ячейку,

и записать её в определённый адрес ( например последний ) FLASH или EEPROM.

А в начале программы перезаписать его в калибровочный регистр OSCCAL.

Подскажите пожалуйста, как разместить переменную в конкретную ячейку FLASH памяти, или в EEPROM.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вы считаете что AVR контроллер в природе всего один и программируется единственным программатором?

И вопроса какой именно у Вас мк и программатор возникнуть не может?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Хочу произвести калибровку этой частоты. ...Подскажите пожалуйста, как разместить переменную в конкретную ячейку FLASH памяти, или в EEPROM.

 

Непонятно: какие у Вас трудности?

Не знаете как прочитать/записать ячейку EEPROM? В DS в разделе 7 "AVR Memories" об этом написано и даже процедуры соответствующие приведены...

Вызывает затруднение калибровка на нужную частоту? У Atmel'а по этому поводу есть AppNote "AVR053: Calibration of the internal RC oscillator" и программа к ней. Программу необходимо немного поправить под нужную Вам частоту...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

если я правильно понял, Вы хотите использовать не стандартную частоту.

Проблема в том что есть стандартный набор частот и подстройка ограничена 0-255 регистра .

 

Вы можете использовать кварц близкий к нужной частоте и подобрать значение для нужной точности.

 

я делал калибратор для меги88 на меге88, но для стандартной частоты - 8МГц. меня заводской разброс в 10% не устроил. А с калибровкой вышло 1%.

 

нужен образцовый генератор или кварц и мк который будет "подбирать" нужное значение OSCCAL

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

я делал калибратор для меги88 на меге88... нужен образцовый генератор или кварц и мк который будет "подбирать" нужное значение OSCCAL

Источник образцовой частоты, несомненно, нужен. Но, второй МК - зачем? Чем не устроило решение из AVR053 ? Ведь МК, который подберет значение OSCCAL уже есть - это калибруемый МК !

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо за ответы.

Почитал указанную документацию, в основном понятно.

Только программу к AppNote "AVR053: Calibration of the internal RC oscillator" я не смог найти, подскажите...

 

Хочется разобраться в возможностях внутреннего RC генератора на частоте 8МГц.

Задачи бывают разные, и требования к точности генератора тоже.

Скажите, правильно ли я понял, что:

1. если ничего не записывать в калибровочный регистр OSCCAL,

то гарантируемая изготовителем точность частоты будет +\- 10%, это в температурном диапазоне -40\+80С .

2. если записать заводское значение из калибровочной ячейки в калибровочный регистр OSCCAL,

то точность частоты будет +\- 3%, это при 25С,

а в температурном диапазоне -40\+80С надо добавить ещё примерно 2-2,5%,

в зависимости от контроллера, итого будет +\-5%.

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

+\-1% в температурном диапазоне -40\+80С.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Только программу к AppNote "AVR053: Calibration of the internal RC oscillator" я не смог найти, подскажите...

Вот

 

Скажите, правильно ли я понял, что:...

Подробно о этом написано в DS в подразделе 8.6 "Calibrated Internal RC Oscillator".

Если программа в регистр OSCCAL ничего не заносит, то в него записываются "заводское значение" определенное для указанных в DS напряжении питания и температуре. Погрешность частоты при этих напряжении и температуре 3% или 10% (значение указано в DS, конкретно для mega8A - 3% при 5V и 25°C.). Можно дополнительно отколибровать генератор под эти же или нужные Вам напряжение и температуру, при этом можно достичь погрешности в 1% (или 2%, если исходная/заводская калибровка 10%). Зависимость частоты генератора от напряжения и температуры приведены в DS в подразделе 26.10 "Internal Oscillator Speed". Из этих данных можно установить, на сколько "уйдёт" частота при изменении температуры и напряжения питания...

 

P.S. Еще обратите внимание, что зависимости частоты внутреннего генератора от напряжения питания и температуры приведены в разделе с названием "Типичные характеристики". Ваш, конкретный экземпляр МК может оказаться "нетипичным" как в лучшую, так и в худшую сторону...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо за ответ.

 

Если программа в регистр OSCCAL ничего не заносит, то в него записываются "заводское значение" определенное для указанных в DS напряжении питания и температуре. Погрешность частоты при этих напряжении и температуре 3% или 10% (значение указано в DS, конкретно для mega8A - 3% при 5V и 25°C.).

 

Насколько я понял, Если программа в регистр OSCCAL ничего не заносит,

то в него по сбросу записывается "заводское значение" для частоты 1МГц,

не зависимо от того, какую частоту мы зададим в конфигурационных ячейках.

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

Заводское калибровочное значение для частоты, отличной от 1МГц, в регистр OSCCAL надо по сбросу записать в программе.

Я правильно понял?

Изменено пользователем Nikkolaj

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я правильно понял?

Поняли правильно.

Заводские калибровочные значения для разных частот можно прочитать из МК программатором. Для этого есть специальная команда "Read Signature Bytes and Calibration byte". Я их считывал... Для всех четырёх частот в МК были одни и те же значения. Подозреваю, что в МК один генератор на 8МГц, а остальные частоты получают путем деления этой частоты...

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я их считывал... Для всех четырёх частот в МК были одни и те же значения. Подозреваю, что в МК один генератор на 8МГц, а остальные частоты получают путем деления этой частоты...

 

Ради интереса я тоже сейчас попробовал их прочитать.

Под руками был ATmega128, значения оказались разными, от 0x9B до 0xA1.

Сомнительно, что это один генератор и делитель.

Есть ещё и такой аргумент,

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

 

К моему удивлению оказалось что из AVR Studio калибровочные ячейки можно не только прочитать,

но и сразу записать в любую ячейку как Flash, так и EEPROM.

Всё оказалось очень просто.

Я знаю в какую ячейку EEPROM я запишу нужное значение калибровки.

В программе прочитать его конечно можно и по процедуре чтения EEPROM.

Но можно ли сделать проще,

указать компилятору разместить мою переменную, например Calibr8, именно по этому адресу EEPROM ?

Тогда даже не надо будет задумываться над процедурой чтения EEPROM.

Можно ли это сделать в Code Vision AVR ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Но можно ли сделать проще,

указать компилятору разместить мою переменную, например Calibr8, именно по этому адресу EEPROM ?

Тогда даже не надо будет задумываться над процедурой чтения EEPROM.

Можно ли это сделать в Code Vision AVR ?

 

eeprom unsigned char Calibr8 @0x10;// расположение байта по адресу 0x10

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо, Артём !!

Попробовал, Code Vision AVR всё нормально принял.

Интересно, а для ОЗУ, FLASH тоже можно поступать аналогично?

Изменено пользователем Nikkolaj

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Интересно, а для ОЗУ, FLASH тоже можно поступать аналогично?

 

Должна быть такая возможность.

Посмотрите в Help-е где есть пункт Placing variables (примерно так называется).

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...