Nikkolaj 0 29 мая, 2012 Опубликовано 29 мая, 2012 · Жалоба Добрый день. Хочу использовать в AVR контроллере внутренний генератор с частотой отличной от 1МГЦ. Хочу произвести калибровку этой частоты. Понимаю, что при программировании надо прочитать соответствующую калибровочную ячейку, и записать её в определённый адрес ( например последний ) FLASH или EEPROM. А в начале программы перезаписать его в калибровочный регистр OSCCAL. Подскажите пожалуйста, как разместить переменную в конкретную ячейку FLASH памяти, или в EEPROM. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zombi 0 29 мая, 2012 Опубликовано 29 мая, 2012 · Жалоба Вы считаете что AVR контроллер в природе всего один и программируется единственным программатором? И вопроса какой именно у Вас мк и программатор возникнуть не может? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nikkolaj 0 30 мая, 2012 Опубликовано 30 мая, 2012 · Жалоба Контроллер ATmega8A, программатор STK500 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nikkolaj 0 30 мая, 2012 Опубликовано 30 мая, 2012 · Жалоба Компилятор Code Vision AVR Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Палыч 10 30 мая, 2012 Опубликовано 30 мая, 2012 · Жалоба Хочу произвести калибровку этой частоты. ...Подскажите пожалуйста, как разместить переменную в конкретную ячейку FLASH памяти, или в EEPROM. Непонятно: какие у Вас трудности? Не знаете как прочитать/записать ячейку EEPROM? В DS в разделе 7 "AVR Memories" об этом написано и даже процедуры соответствующие приведены... Вызывает затруднение калибровка на нужную частоту? У Atmel'а по этому поводу есть AppNote "AVR053: Calibration of the internal RC oscillator" и программа к ней. Программу необходимо немного поправить под нужную Вам частоту... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
arttab 0 31 мая, 2012 Опубликовано 31 мая, 2012 · Жалоба если я правильно понял, Вы хотите использовать не стандартную частоту. Проблема в том что есть стандартный набор частот и подстройка ограничена 0-255 регистра . Вы можете использовать кварц близкий к нужной частоте и подобрать значение для нужной точности. я делал калибратор для меги88 на меге88, но для стандартной частоты - 8МГц. меня заводской разброс в 10% не устроил. А с калибровкой вышло 1%. нужен образцовый генератор или кварц и мк который будет "подбирать" нужное значение OSCCAL Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Палыч 10 31 мая, 2012 Опубликовано 31 мая, 2012 · Жалоба я делал калибратор для меги88 на меге88... нужен образцовый генератор или кварц и мк который будет "подбирать" нужное значение OSCCAL Источник образцовой частоты, несомненно, нужен. Но, второй МК - зачем? Чем не устроило решение из AVR053 ? Ведь МК, который подберет значение OSCCAL уже есть - это калибруемый МК ! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nikkolaj 0 31 мая, 2012 Опубликовано 31 мая, 2012 · Жалоба Спасибо за ответы. Почитал указанную документацию, в основном понятно. Только программу к 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С. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Палыч 10 31 мая, 2012 Опубликовано 31 мая, 2012 · Жалоба Только программу к 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. Еще обратите внимание, что зависимости частоты внутреннего генератора от напряжения питания и температуры приведены в разделе с названием "Типичные характеристики". Ваш, конкретный экземпляр МК может оказаться "нетипичным" как в лучшую, так и в худшую сторону... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nikkolaj 0 31 мая, 2012 Опубликовано 31 мая, 2012 (изменено) · Жалоба Спасибо за ответ. Если программа в регистр OSCCAL ничего не заносит, то в него записываются "заводское значение" определенное для указанных в DS напряжении питания и температуре. Погрешность частоты при этих напряжении и температуре 3% или 10% (значение указано в DS, конкретно для mega8A - 3% при 5V и 25°C.). Насколько я понял, Если программа в регистр OSCCAL ничего не заносит, то в него по сбросу записывается "заводское значение" для частоты 1МГц, не зависимо от того, какую частоту мы зададим в конфигурационных ячейках. Это значение для другой частоты, например 8МГц, может совсем и не подходить. Заводское калибровочное значение для частоты, отличной от 1МГц, в регистр OSCCAL надо по сбросу записать в программе. Я правильно понял? Изменено 31 мая, 2012 пользователем Nikkolaj Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Палыч 10 31 мая, 2012 Опубликовано 31 мая, 2012 · Жалоба Я правильно понял? Поняли правильно. Заводские калибровочные значения для разных частот можно прочитать из МК программатором. Для этого есть специальная команда "Read Signature Bytes and Calibration byte". Я их считывал... Для всех четырёх частот в МК были одни и те же значения. Подозреваю, что в МК один генератор на 8МГц, а остальные частоты получают путем деления этой частоты... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nikkolaj 0 31 мая, 2012 Опубликовано 31 мая, 2012 · Жалоба Я их считывал... Для всех четырёх частот в МК были одни и те же значения. Подозреваю, что в МК один генератор на 8МГц, а остальные частоты получают путем деления этой частоты... Ради интереса я тоже сейчас попробовал их прочитать. Под руками был ATmega128, значения оказались разными, от 0x9B до 0xA1. Сомнительно, что это один генератор и делитель. Есть ещё и такой аргумент, в типичных характеристиках процентное отклонение частоты для 1МГц как минимум в два раза меньше, чем для 8МГц. К моему удивлению оказалось что из AVR Studio калибровочные ячейки можно не только прочитать, но и сразу записать в любую ячейку как Flash, так и EEPROM. Всё оказалось очень просто. Я знаю в какую ячейку EEPROM я запишу нужное значение калибровки. В программе прочитать его конечно можно и по процедуре чтения EEPROM. Но можно ли сделать проще, указать компилятору разместить мою переменную, например Calibr8, именно по этому адресу EEPROM ? Тогда даже не надо будет задумываться над процедурой чтения EEPROM. Можно ли это сделать в Code Vision AVR ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Артём__ 0 31 мая, 2012 Опубликовано 31 мая, 2012 · Жалоба Но можно ли сделать проще, указать компилятору разместить мою переменную, например Calibr8, именно по этому адресу EEPROM ? Тогда даже не надо будет задумываться над процедурой чтения EEPROM. Можно ли это сделать в Code Vision AVR ? eeprom unsigned char Calibr8 @0x10;// расположение байта по адресу 0x10 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nikkolaj 0 31 мая, 2012 Опубликовано 31 мая, 2012 (изменено) · Жалоба Спасибо, Артём !! Попробовал, Code Vision AVR всё нормально принял. Интересно, а для ОЗУ, FLASH тоже можно поступать аналогично? Изменено 31 мая, 2012 пользователем Nikkolaj Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Артём__ 0 31 мая, 2012 Опубликовано 31 мая, 2012 · Жалоба Интересно, а для ОЗУ, FLASH тоже можно поступать аналогично? Должна быть такая возможность. Посмотрите в Help-е где есть пункт Placing variables (примерно так называется). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться