Изменение тактовой частоты программно

O'NeiLL
Offline
Зарегистрирован: 13.08.2014

Можно ли как-то в ходе выполнения программы менять тактовую частоту?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Если не секрет, для чего?

Клапауций 911
Offline
Зарегистрирован: 18.10.2015

ЕвгенийП пишет:

Если не секрет, для чего?

педаль "газ".

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Разве что если переключать частоту внешнего генератора. Я не пробовал.

Клапауций 911
Offline
Зарегистрирован: 18.10.2015

kisoft пишет:
Разве что если переключать частоту внешнего генератора. Я не пробовал.

кстати - да. должно работать, даже можно будет ваще останавливать.

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Ага, остановить, потом снова включить! :)

Клапауций 911
Offline
Зарегистрирован: 18.10.2015

kisoft пишет:
Ага, остановить, потом снова включить! :)

а, в чём проблема?

откуда проц знает, с какой внешней частотой его дёргают?

хоть 1 герц - это же не внутренний генератор запускать?

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

1 Гц это лет через мильон включится. :)
Этакий слип режим, вмажем и лежим

Клапауций 911
Offline
Зарегистрирован: 18.10.2015

kisoft пишет:
1 Гц это лет через мильон включится. :) Этакий слип режим, вмажем и лежим

это не важно, если я правильно понимаю, как работает внешнее тактирование - можно нужное количество тактов посылать и останавливать после инициализации всега.

toc
Offline
Зарегистрирован: 09.02.2013

O'NeiLL пишет:

Можно ли как-то в ходе выполнения программы менять тактовую частоту?

Можно! Так:

clock_prescale_set (clock_div_256);

подробности http://gammon.com.au/power

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Ну вот и решение, положил в закладки, спасибо

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Недавно об этом же говорили. В реальности никто эту фичу не использует, т.к. все функции напрямую или косвенно связанные со счётом времени начнут неправильно работать. Начиная от миллисов заканчивая serial.print

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Можно не трогать физическую частоту, а смоделировать такой эффект программно. Тогда никакие "миллисы" не пострадают. Нужно лишь настроить, чтобы таймер давал прервание через некоторое количество тактов, а в обработчике гнать некое количество NOP'ов. Надо поменять скорость - меняем количество NOP'ов.

axill
Offline
Зарегистрирован: 05.09.2011

dimax пишет:

Недавно об этом же говорили. В реальности никто эту фичу не использует, т.к. все функции напрямую или косвенно связанные со счётом времени начнут неправильно работать. Начиная от миллисов заканчивая serial.print

в мире ардуино наверно, ибо тогда придётся ручками настраивать весь тот ворох переферии настройку которого делает ардуино автоматически

а вот в не ардуино такая функция очень даже востребована. Особенно когда важно энергосбережение. В некоторых случаях полезно понизить частоту при старте. Например частоты ниже 1мгц не возможно выставить фьюзами, но можно выбрать программно. Потребление МК при понижении частоты существенно падает. В некоторых случаях это может быть динамический режим - при одних условиях одна частота, при других - другая и все это меняется налету. Пример - работа на максимальной частоте при питании от сети и на пониженной при питании от батарей. 

П.с у AVR все довольно примитивно с управлением частотой, а например у STM там целый арсенал для управления. В частности можно определить какой источник тактировании использовать если откажет основной. У AVR это притча во языцех - стоит что не так сделать со фьюзами по тактированию и МК умирает. У STM запустится резервный генератор 

Logik
Offline
Зарегистрирован: 05.08.2014

axill пишет:

Пример - работа на максимальной частоте при питании от сети и на пониженной при питании от батарей. 

Оно конечно можна и так поизвращатся, но уходить в слип и проще и экономичней (я правда оба варианта на PIC делал когда сравнивал, но думаю и AVR так же поведет себя).

Т.е. при сравнении вариантов работы от батареи:

1. переходим с 16МГц на 1МГц.

2. работаем на 16МГц но только 1/16 от всего времени, остальное в слипе.

имеем следующее - производительность одинаковая, вариант 2 проще реализовать он экономичней (хоть я не уверен на 100%, но думаю даже и если проиграет то немного) и намного гибче - можно менять долю рабочего времени в широких пределах.

Заглянул в даташит на контроллер, пишут есть 128kHz internal Oscillator, можно его задействовать учитывая вышесказаное по теме.

Клапауций 911
Offline
Зарегистрирован: 18.10.2015

Logik пишет:

Заглянул в даташит на контроллер, пишут есть 128kHz internal Oscillator, можно его задействовать учитывая вышесказаное по теме.

загляни, что там пишут про external clock

Петруха
Offline
Зарегистрирован: 24.03.2019

При многоходовом нарезании резьбы без механической синхронизации от таходатчика частотного можно ли на Arduino синхронизировать вращение шпинделя с перемещениями суппортов, если главный привод асинхронный?

Петруха
Offline
Зарегистрирован: 24.03.2019

За счёт считывающего таходатчиком высокочастотным и применения этой частоты в управлении шаговыми приводамми (какая то кратность) взамен тактовой частоты решает вопрос синхронизации перемещений с частотой вращения, но отрывается от хронометрии.

Возможна ли в Arduino работа в отрыве от тактовой хронометрической частоты, от внешней переменной?

Buldakov
Offline
Зарегистрирован: 17.01.2016

Можете почитать про Комплектный асинхронный глубокорегулируемый электропривод  "Размер 2М-5-21"

Там же почитать как реализована следящая часть привода подачи.

Все уже реализовано давно.

http://stanoks.net/index.php?option=com_content&view=article&id=32:tsern...

http://stanoks.net/index.php?option=com_jdownloads&Itemid=131