Страница 1 из 2
Как при помощи регистра OSCCAL изменит частоту с 4,8 до 6 M
Добавлено: Сб апр 14, 2012 11:08:54
Катяра
Имеется контроллер 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 ни как понять не могу 
Re: Как при помощи регистра OSCCAL изменит частоту с 4,8 до
Добавлено: Сб апр 14, 2012 13:14:20
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
Re: Как при помощи регистра OSCCAL изменит частоту с 4,8 до
Добавлено: Сб апр 14, 2012 18:55:10
BOB51
ребятки, а может проще после запуска на заводских установках (9,6МГц) изменить значение в CLKPR?!

Re: Как при помощи регистра OSCCAL изменит частоту с 4,8 до
Добавлено: Сб апр 14, 2012 19:15:52
ibiza11
Думаю из 9,6МГц получить 6 МГц с помощью целочисленных делителей из ряда 1, 2, 4, 8, 16.... будет как минимум проблематично.

Re: Как при помощи регистра OSCCAL изменит частоту с 4,8 до
Добавлено: Сб апр 14, 2012 20:01:33
BOB51
так речь идет не о тактовой генератора, а о системном тактировании - есть вероятность подгонки вида 6/8=0,75, а это близко к 9,6/16=0,6

Re: Как при помощи регистра OSCCAL изменит частоту с 4,8 до
Добавлено: Сб апр 14, 2012 21:56:09
ibiza11
Катяра писал(а):если, как я понимаю, запись в регистр OSCCAL происходит однократно при сбросе контролера.
Вы ошибаетесь. прочтите цитату из даташита, которую я привел в предыдущем сообщении. Все должно встать на свои места.
Re: Как при помощи регистра OSCCAL изменит частоту с 4,8 до
Добавлено: Вс апр 15, 2012 01:40:52
Катяра
Странно, что вы не нашли всю информацию в даташите.
для того чтобы настроить ваш контроллер на требуемую частоту (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" - может неправильный по смыслу перевод и не даёт понять мне самой сути...
Re: Как при помощи регистра OSCCAL изменит частоту с 4,8 до
Добавлено: Вс апр 15, 2012 01:41:54
Катяра
BOB51 писал(а):так речь идет не о тактовой генератора, а о системном тактировании - есть вероятность подгонки вида 6/8=0,75, а это близко к 9,6/16=0,6

0,6 MHZ - маловато для моего проекта

Re: Как при помощи регистра OSCCAL изменит частоту с 4,8 до
Добавлено: Вс апр 15, 2012 07:22:51
BOB51
так легче подкорректировать незначительное расхождение между 0,75 и 0,6, тем более, что начальное значение калибровки при 9,6 загружается автоматически, а при 4,8 его еще сначала хитрым способом достать надо
ну и на крайний случай внешний генератор на 6МГц...
хотя... а зачем такой садомазо- внутренний таймер с предделителем любую подгонку выполнить в состоянии, а аппаратных приемопередатчиков в 13й вроде как не имеется

Re: Как при помощи регистра OSCCAL изменит частоту с 4,8 до
Добавлено: Вс апр 15, 2012 09:31:15
ibiza11
Ваш приведенный код должен работать. Смысл того текста, который я процитировал из даташита, заключался именно в том, что нужно изменять регистр OSCCAL за несколько итераций, которые бы сильно не меняли частоту контроллера.
А вообще, раз уж разобрались, расскажите для чего вам именно 6МГц? мне тоже интересно))) в этой тиньке нет аппаратных приемопередатчиков, следовательно все подгонки по частоте можно реализовать и программно, без шаманства с системной тактовой.
Re: Как при помощи регистра OSCCAL изменит частоту с 4,8 до
Добавлено: Вс апр 15, 2012 10:58:02
Катяра
ibiza11 писал(а):Ваш приведенный код должен работать. Смысл того текста, который я процитировал из даташита, заключался именно в том, что нужно изменять регистр OSCCAL за несколько итераций, которые бы сильно не меняли частоту контроллера.
А вообще, раз уж разобрались, расскажите для чего вам именно 6МГц? мне тоже интересно))) в этой тиньке нет аппаратных приемопередатчиков, следовательно все подгонки по частоте можно реализовать и программно, без шаманства с системной тактовой.
Мне нужно чтобы частота выходного ШИМ сигнала составляла 23...24 KHZ. (самая оптимальная частота, выше восприятия человеческим ухом и не сильно нагружает выходной ключ).
Я заметил что во многих устройствах подобного типа используется именно эта частота.
T0 = 6 MHZ / 256 = 23.4 KHZ
С помощью этого ШИМ сигнала будет задаваться скорость вращения электродвигателем.
Думал сначала подогнать программно, но код получиться на порядки сложнее, а из-за задержки прерываний будут
неточности в формировании сигнала.
Я решил пойти по пути наименьшего сопротивления, если будут сбои, тогда уже буду делать программно...
Re: Как при помощи регистра OSCCAL изменит частоту с 4,8 до
Добавлено: Вс апр 15, 2012 11:03:55
Катяра
Вопрос который до сих пор остаётся открытым
Как понимать нижеприведённую таблицу????
Как одно число в OSCCAL может иметь такой большой разброс???
Re: Как при помощи регистра OSCCAL изменит частоту с 4,8 до
Добавлено: Вс апр 15, 2012 11:27:58
BOB51
????!
24 килогерца и такой садомазо???
(9600000/8)/24000=50 + режим аппаратного ШИМ на выбор
Re: Как при помощи регистра OSCCAL изменит частоту с 4,8 до
Добавлено: Вс апр 15, 2012 11:48:02
Катяра
BOB51 писал(а):????!
24 килогерца и такой садомазо???
(9600000/8)/24000=50 + режим аппаратного ШИМ на выбор
В моём случае я могу использовать T0 = 255 и тем самым большую точность выбора ШИМ сигнала.
А частота 1,2 MHZ - маловата для моего проекта, мне нужно ещё успевать обрабатывать входные сигналы.
Я посчитал что 6 MHZ как раз будет всё успевать....
P.S. Это не такое уж садо-мазо:
Код: Выделить всё
for (Cnt = 84; Cnt<106; Cnt++ ) {OSCCAL = Cnt; }
[/size]
Re: Как при помощи регистра OSCCAL изменит частоту с 4,8 до
Добавлено: Вс апр 15, 2012 12:17:45
BOB51
так есть возможность поднять ее вплоть до 9,6 !
9,6 - 4,8 - 2,4 - 1,2(по умолчанию)
кроме того у таймера есть возможность подключить предделитель...
то же 4800000/200=24000 (и это при внутренней тактовой 4,8(исполнение команд) а основная 9,6)
да... совсем склероз, я ж ассемблерист...

Re: Как при помощи регистра OSCCAL изменит частоту с 4,8 до
Добавлено: Вс апр 15, 2012 12:18:29
ibiza11
"И незачем так орать" (с)

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

на ассемблере тоже не особо сложно. Но честно говоря мне было бы лень на месте топикстартера париться с калибровкой системной тактовой, если ее значение и так не особо стабильно и делал именно так, как Вы предложили - рассчитать значение таймера.
Re: Как при помощи регистра OSCCAL изменит частоту с 4,8 до
Добавлено: Вс апр 15, 2012 12:37:59
Катяра
BOB51 писал(а): да... совсем склероз, я ж ассемблерист...

Код: Выделить всё
ldi r17,105
ldi r16,84
start: inc r16
out OSCCAL,r16
cpse r16,r17
rjamp start
[/size]
Re: Как при помощи регистра OSCCAL изменит частоту с 4,8 до
Добавлено: Вс апр 15, 2012 12:54:46
BOB51
разжувываю:
запускаемся на установках "по умолчанию" - RC генератор с заводской калибровкой на 9,6 МГц,
меняем значение в CLKPR на коэффициент деления 2, тем самым сохраняя заводскую точность калибровки и повышая внутреннюю тактовку до 4,8МГц против исходных 1,2 (0,000000208s/команда вместо 0,000000833s/команда), а в таймере коэффициент деления 200
если еще хочется позаморачиваться теперь можно немножко "подергать" содержимое OSCCAL, благо там уже записано содержимое, соответствующее базовому значению частоты в 9,6МГц
зато и частота ШИМ в пределах, и диапазон вариаций 200 шагов и быстродействие/стабильность соблюдены

Re: Как при помощи регистра OSCCAL изменит частоту с 4,8 до
Добавлено: Вс апр 15, 2012 12:57:44
ibiza11
BOB51 писал(а):разжувываю
+1

Re: Как при помощи регистра OSCCAL изменит частоту с 4,8 до
Добавлено: Вс апр 15, 2012 13:04:20
Катяра
ibiza11 писал(а):"И незачем так орать" (с)

Увеличение шрифта сообщения не прибавит понимания.
Рекомендую читать оригинальный даташит, если не получается понять смысл вырезанной таблицы.
Смотрим, читаем, переводим, вкуриваем!!!
Прочитал несколько раз, не вкурил!!!
Всё равно не могу понять смысл этой таблицы. Может кто объяснит что означают эти проценты....
