Как при помощи регистра OSCCAL изменит частоту с 4,8 до 6 M

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Аватара пользователя
Катяра
Встал на лапы
Сообщения: 129
Зарегистрирован: Сб янв 17, 2009 01:12:10
Откуда: Минск

Как при помощи регистра OSCCAL изменит частоту с 4,8 до 6 M

Сообщение Катяра »

Имеется контроллер ATtiny13
Частоты внутреннего RC генератора составляют 4,8 MHZ и 9,6 MHZ.
Для проекта (EEPROM не используется) необходима частота 6,0 MHZ
Понятно что 4,8 + 25% = 6 MHZ
Как при помощи регистра OSCCAL изменит частоту с 4,8 до 6 MHZ ???
Не могу понять как сделать чтобы частота за один цикл изменялась меньше чем на 2% (согласно datasheet)
если, как я понимаю, запись в регистр OSCCAL происходит однократно при сбросе контролера.
Возможно ли выстроит програмную цепочку чтобы увеличить частоту 4,8 MHZ на 25% для получения 6,0 MHZ ???

И ещё вопрос по таблице из datasheet:
Как для одного значения регистра OSCCAL может быт такая большая разбежка в процентах, к примеру для $7F 75% 150% и что означают эти проценты, как их высчитывать????


Изображение

Заранее всем спасибо!!!

P.S. 10 раз прочитал datasheet, но работу OSCCAL ни как понять не могу
:(
"Разум, единожды раздвинувший свои границы, никогда не вернется в границы прежние"
Альбе́рт Эйнште́йн

“Так что же такое электричество? Уже на протяжении всей жизни я задаю себе этот вопрос.”
Никола Тесла
Реклама
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Re: Как при помощи регистра OSCCAL изменит частоту с 4,8 до

Сообщение ibiza11 »

Странно, что вы не нашли всю информацию в даташите.
для того чтобы настроить ваш контроллер на требуемую частоту (6МГц), сначала нужно установить фьюзы для тактирования от 4,8 МГц.Изображение
Далее нужно поменять значение регистра OSCCAL. В даташите написано соответствующее предупреждение о том КАК нужно это делать.
To ensure stable operation of the MCU the calibration value should be changed in small steps. A
variation in frequency of more than 2% from one cycle to the next can lead to unpredicatble
behavior. Changes in OSCCAL should not exceed 0x20 for each calibration. It is required to
ensure that the MCU is kept in Reset during such changes in the clock frequency
Теперь про значения. раздел даташита 19.8 Internal Oscillator Speed скрин:
Изображение
Ну и про точность внутреннего генератора можно почитать в разделе 18.4 Clock Characteristics
Вложения
values.PNG
значения OSCCAL
(28.41 КБ) 3143 скачивания
fuses.PNG
фьюзы
(13.43 КБ) 3014 скачиваний
Ставим плюсы: )
Реклама
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15575
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Как при помощи регистра OSCCAL изменит частоту с 4,8 до

Сообщение BOB51 »

ребятки, а может проще после запуска на заводских установках (9,6МГц) изменить значение в CLKPR?! :shock:
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Re: Как при помощи регистра OSCCAL изменит частоту с 4,8 до

Сообщение ibiza11 »

Думаю из 9,6МГц получить 6 МГц с помощью целочисленных делителей из ряда 1, 2, 4, 8, 16.... будет как минимум проблематично. :)
Ставим плюсы: )
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15575
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Как при помощи регистра OSCCAL изменит частоту с 4,8 до

Сообщение BOB51 »

так речь идет не о тактовой генератора, а о системном тактировании - есть вероятность подгонки вида 6/8=0,75, а это близко к 9,6/16=0,6 :)
Реклама
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Re: Как при помощи регистра OSCCAL изменит частоту с 4,8 до

Сообщение ibiza11 »

Катяра писал(а):если, как я понимаю, запись в регистр OSCCAL происходит однократно при сбросе контролера.
Вы ошибаетесь. прочтите цитату из даташита, которую я привел в предыдущем сообщении. Все должно встать на свои места.
Ставим плюсы: )
Реклама
Аватара пользователя
Катяра
Встал на лапы
Сообщения: 129
Зарегистрирован: Сб янв 17, 2009 01:12:10
Откуда: Минск

Re: Как при помощи регистра OSCCAL изменит частоту с 4,8 до

Сообщение Катяра »

Странно, что вы не нашли всю информацию в даташите.
для того чтобы настроить ваш контроллер на требуемую частоту (6МГц), сначала нужно установить фьюзы для тактирования от 4,8 МГц.
О том как выставить рабочую частоту 4,8 или 9,6 MHZ с помощью фьюзов я прекрасно знаю...
Вопрос состоит в том как правильно организовать алгоритм записи значений в регистр OSCCAL чтобы увеличить
рабочую частоту 4,8 MHZ на 25% и получить тем самым 6 MHZ и не превысить лимит перехода 2% от одной частоты к другой???

Главные открытые вопросы которые остаётся до сих пор открыты:
1) Как понимать нижеприведённую таблицу????
Изображение

2) В datasheet указано (перевод брал из книги A.В.Белова "Самоучитель разработчика устройвств на микроконтроллерах AVR"):
a) Изменение частоты более чем на 2% от одного цикла генератора до следующего может привести к непредсказуемому поведению микросхемы. Вопрос: Как задать это число в OSCCAL чтобы значение приращение было меньше 2% иначе контролер может зависнуть???
b) Изменение регистра OSCCAL не должно превышать 32 (0x20) за один шаг калибровки. Мне кажется здесь противоречие, так как 0x20 явно больше 2%???


Теперь мои предположения:

Изображение

1) Если я правильно понял при записи во фьюзы CKSEL1..0 значения 01 частота внутреннего RC генератора выбирается 4,8 MHZ
и это является эквивалентным тому что в регистр OSCCAL записывается значение (если смотреть по графику) приблизительно 84 (0x54).
2) Чтобы получить частоту 6 MHZ мне нужно изменить значение OSCCAL от 84 (0x54) до 105 (0x69)
3) Изменение OSCCAL от 84 до 105 в данном случае соответствует 25%.
4) 105-84 = 21; изменение OSCCAL на 21 (0x15) меньше максимально допустимого значения изменения 32 (0x20) OSCCAL
5) 25% / 21=1.2%. Получается что при изменении OSCCAL на 1 значение частоты будет увеличиваться на 1,2% от предыдущего.
Что является меньше максимально допустимых 2%.
6) Вот пример моего программного кода:

Код: Выделить всё

for (Cnt = 84; Cnt<106; Cnt++ ) {OSCCAL = Cnt; }
[/size]

Код: Выделить всё

               ldi  r17,105
               ldi  r16,84
start:         inc r16
               out OSCCAL,r16
               cpse r16,r17
               rjamp start
[/size]

ПОПРАВЬТЕ ЕСЛИ Я НЕ ПРАВ!!! Так как описание ррегистра OSСCAL брал из книги A.В.Белова "Самоучитель разработчика устройвств на микроконтроллерах AVR" - может неправильный по смыслу перевод и не даёт понять мне самой сути...
Последний раз редактировалось Катяра Вс апр 15, 2012 02:12:13, всего редактировалось 11 раз.
"Разум, единожды раздвинувший свои границы, никогда не вернется в границы прежние"
Альбе́рт Эйнште́йн

“Так что же такое электричество? Уже на протяжении всей жизни я задаю себе этот вопрос.”
Никола Тесла
Аватара пользователя
Катяра
Встал на лапы
Сообщения: 129
Зарегистрирован: Сб янв 17, 2009 01:12:10
Откуда: Минск

Re: Как при помощи регистра OSCCAL изменит частоту с 4,8 до

Сообщение Катяра »

BOB51 писал(а):так речь идет не о тактовой генератора, а о системном тактировании - есть вероятность подгонки вида 6/8=0,75, а это близко к 9,6/16=0,6 :)
0,6 MHZ - маловато для моего проекта :shock:
"Разум, единожды раздвинувший свои границы, никогда не вернется в границы прежние"
Альбе́рт Эйнште́йн

“Так что же такое электричество? Уже на протяжении всей жизни я задаю себе этот вопрос.”
Никола Тесла
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15575
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Как при помощи регистра OSCCAL изменит частоту с 4,8 до

Сообщение BOB51 »

так легче подкорректировать незначительное расхождение между 0,75 и 0,6, тем более, что начальное значение калибровки при 9,6 загружается автоматически, а при 4,8 его еще сначала хитрым способом достать надо 8)
ну и на крайний случай внешний генератор на 6МГц...
хотя... а зачем такой садомазо- внутренний таймер с предделителем любую подгонку выполнить в состоянии, а аппаратных приемопередатчиков в 13й вроде как не имеется :cry:
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Re: Как при помощи регистра OSCCAL изменит частоту с 4,8 до

Сообщение ibiza11 »

Ваш приведенный код должен работать. Смысл того текста, который я процитировал из даташита, заключался именно в том, что нужно изменять регистр OSCCAL за несколько итераций, которые бы сильно не меняли частоту контроллера.
А вообще, раз уж разобрались, расскажите для чего вам именно 6МГц? мне тоже интересно))) в этой тиньке нет аппаратных приемопередатчиков, следовательно все подгонки по частоте можно реализовать и программно, без шаманства с системной тактовой.
Ставим плюсы: )
Аватара пользователя
Катяра
Встал на лапы
Сообщения: 129
Зарегистрирован: Сб янв 17, 2009 01:12:10
Откуда: Минск

Re: Как при помощи регистра OSCCAL изменит частоту с 4,8 до

Сообщение Катяра »

ibiza11 писал(а):Ваш приведенный код должен работать. Смысл того текста, который я процитировал из даташита, заключался именно в том, что нужно изменять регистр OSCCAL за несколько итераций, которые бы сильно не меняли частоту контроллера.
А вообще, раз уж разобрались, расскажите для чего вам именно 6МГц? мне тоже интересно))) в этой тиньке нет аппаратных приемопередатчиков, следовательно все подгонки по частоте можно реализовать и программно, без шаманства с системной тактовой.
Мне нужно чтобы частота выходного ШИМ сигнала составляла 23...24 KHZ. (самая оптимальная частота, выше восприятия человеческим ухом и не сильно нагружает выходной ключ).
Я заметил что во многих устройствах подобного типа используется именно эта частота.
T0 = 6 MHZ / 256 = 23.4 KHZ
С помощью этого ШИМ сигнала будет задаваться скорость вращения электродвигателем.
Думал сначала подогнать программно, но код получиться на порядки сложнее, а из-за задержки прерываний будут
неточности в формировании сигнала.
Я решил пойти по пути наименьшего сопротивления, если будут сбои, тогда уже буду делать программно...
"Разум, единожды раздвинувший свои границы, никогда не вернется в границы прежние"
Альбе́рт Эйнште́йн

“Так что же такое электричество? Уже на протяжении всей жизни я задаю себе этот вопрос.”
Никола Тесла
Аватара пользователя
Катяра
Встал на лапы
Сообщения: 129
Зарегистрирован: Сб янв 17, 2009 01:12:10
Откуда: Минск

Re: Как при помощи регистра OSCCAL изменит частоту с 4,8 до

Сообщение Катяра »

Вопрос который до сих пор остаётся открытым
Как понимать нижеприведённую таблицу????
Изображение

Как одно число в OSCCAL может иметь такой большой разброс???
"Разум, единожды раздвинувший свои границы, никогда не вернется в границы прежние"
Альбе́рт Эйнште́йн

“Так что же такое электричество? Уже на протяжении всей жизни я задаю себе этот вопрос.”
Никола Тесла
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15575
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Как при помощи регистра OSCCAL изменит частоту с 4,8 до

Сообщение BOB51 »

????!
24 килогерца и такой садомазо??? :shock:
(9600000/8)/24000=50 + режим аппаратного ШИМ на выбор
Аватара пользователя
Катяра
Встал на лапы
Сообщения: 129
Зарегистрирован: Сб янв 17, 2009 01:12:10
Откуда: Минск

Re: Как при помощи регистра OSCCAL изменит частоту с 4,8 до

Сообщение Катяра »

BOB51 писал(а):????!
24 килогерца и такой садомазо??? :shock:
(9600000/8)/24000=50 + режим аппаратного ШИМ на выбор
В моём случае я могу использовать T0 = 255 и тем самым большую точность выбора ШИМ сигнала.
А частота 1,2 MHZ - маловата для моего проекта, мне нужно ещё успевать обрабатывать входные сигналы.
Я посчитал что 6 MHZ как раз будет всё успевать....

P.S. Это не такое уж садо-мазо:

Код: Выделить всё

for (Cnt = 84; Cnt<106; Cnt++ ) {OSCCAL = Cnt; }
[/size]
"Разум, единожды раздвинувший свои границы, никогда не вернется в границы прежние"
Альбе́рт Эйнште́йн

“Так что же такое электричество? Уже на протяжении всей жизни я задаю себе этот вопрос.”
Никола Тесла
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15575
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Как при помощи регистра OSCCAL изменит частоту с 4,8 до

Сообщение BOB51 »

так есть возможность поднять ее вплоть до 9,6 !
9,6 - 4,8 - 2,4 - 1,2(по умолчанию)
кроме того у таймера есть возможность подключить предделитель...
то же 4800000/200=24000 (и это при внутренней тактовой 4,8(исполнение команд) а основная 9,6)
да... совсем склероз, я ж ассемблерист... :cry:
Последний раз редактировалось BOB51 Вс апр 15, 2012 12:32:13, всего редактировалось 2 раза.
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Re: Как при помощи регистра OSCCAL изменит частоту с 4,8 до

Сообщение ibiza11 »

"И незачем так орать" (с) :) Увеличение шрифта сообщения не прибавит понимания.
Рекомендую читать оригинальный даташит, если не получается понять смысл вырезанной таблицы.
Смотрим, читаем, переводим, вкуриваем!!!
Изображение

BOB51 писал(а):да... совсем склероз, я ж ассемблерист... :cry:
на ассемблере тоже не особо сложно. Но честно говоря мне было бы лень на месте топикстартера париться с калибровкой системной тактовой, если ее значение и так не особо стабильно и делал именно так, как Вы предложили - рассчитать значение таймера.
Вложения
accuracy.PNG
(54.24 КБ) 3197 скачиваний
Ставим плюсы: )
Аватара пользователя
Катяра
Встал на лапы
Сообщения: 129
Зарегистрирован: Сб янв 17, 2009 01:12:10
Откуда: Минск

Re: Как при помощи регистра OSCCAL изменит частоту с 4,8 до

Сообщение Катяра »

BOB51 писал(а): да... совсем склероз, я ж ассемблерист... :cry:

Код: Выделить всё

               ldi  r17,105
               ldi  r16,84
start:         inc r16
               out OSCCAL,r16
               cpse r16,r17
               rjamp start
[/size]
"Разум, единожды раздвинувший свои границы, никогда не вернется в границы прежние"
Альбе́рт Эйнште́йн

“Так что же такое электричество? Уже на протяжении всей жизни я задаю себе этот вопрос.”
Никола Тесла
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15575
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Как при помощи регистра OSCCAL изменит частоту с 4,8 до

Сообщение BOB51 »

разжувываю:
запускаемся на установках "по умолчанию" - RC генератор с заводской калибровкой на 9,6 МГц,
меняем значение в CLKPR на коэффициент деления 2, тем самым сохраняя заводскую точность калибровки и повышая внутреннюю тактовку до 4,8МГц против исходных 1,2 (0,000000208s/команда вместо 0,000000833s/команда), а в таймере коэффициент деления 200
если еще хочется позаморачиваться теперь можно немножко "подергать" содержимое OSCCAL, благо там уже записано содержимое, соответствующее базовому значению частоты в 9,6МГц
зато и частота ШИМ в пределах, и диапазон вариаций 200 шагов и быстродействие/стабильность соблюдены
:beer:
Последний раз редактировалось BOB51 Вс апр 15, 2012 12:59:08, всего редактировалось 1 раз.
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Re: Как при помощи регистра OSCCAL изменит частоту с 4,8 до

Сообщение ibiza11 »

BOB51 писал(а):разжувываю
+1 :beer:
Ставим плюсы: )
Аватара пользователя
Катяра
Встал на лапы
Сообщения: 129
Зарегистрирован: Сб янв 17, 2009 01:12:10
Откуда: Минск

Re: Как при помощи регистра OSCCAL изменит частоту с 4,8 до

Сообщение Катяра »

ibiza11 писал(а):"И незачем так орать" (с) :) Увеличение шрифта сообщения не прибавит понимания.
Рекомендую читать оригинальный даташит, если не получается понять смысл вырезанной таблицы.
Смотрим, читаем, переводим, вкуриваем!!!
Изображение
Прочитал несколько раз, не вкурил!!! :( :o :shock:
Всё равно не могу понять смысл этой таблицы. Может кто объяснит что означают эти проценты.... :write:
"Разум, единожды раздвинувший свои границы, никогда не вернется в границы прежние"
Альбе́рт Эйнште́йн

“Так что же такое электричество? Уже на протяжении всей жизни я задаю себе этот вопрос.”
Никола Тесла
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»