Изменение тактовой частоты программно
- Войдите на сайт для отправки комментариев
Сб, 31/10/2015 - 22:33
Можно ли как-то в ходе выполнения программы менять тактовую частоту?
Можно ли как-то в ходе выполнения программы менять тактовую частоту?
Если не секрет, для чего?
Если не секрет, для чего?
педаль "газ".
Разве что если переключать частоту внешнего генератора. Я не пробовал.
кстати - да. должно работать, даже можно будет ваще останавливать.
Ага, остановить, потом снова включить! :)
а, в чём проблема?
откуда проц знает, с какой внешней частотой его дёргают?
хоть 1 герц - это же не внутренний генератор запускать?
1 Гц это лет через мильон включится. :)
Этакий слип режим, вмажем и лежим
это не важно, если я правильно понимаю, как работает внешнее тактирование - можно нужное количество тактов посылать и останавливать после инициализации всега.
Можно ли как-то в ходе выполнения программы менять тактовую частоту?
Можно! Так:
clock_prescale_set (clock_div_256);
подробности http://gammon.com.au/power
Ну вот и решение, положил в закладки, спасибо
Недавно об этом же говорили. В реальности никто эту фичу не использует, т.к. все функции напрямую или косвенно связанные со счётом времени начнут неправильно работать. Начиная от миллисов заканчивая serial.print
Можно не трогать физическую частоту, а смоделировать такой эффект программно. Тогда никакие "миллисы" не пострадают. Нужно лишь настроить, чтобы таймер давал прервание через некоторое количество тактов, а в обработчике гнать некое количество NOP'ов. Надо поменять скорость - меняем количество NOP'ов.
Недавно об этом же говорили. В реальности никто эту фичу не использует, т.к. все функции напрямую или косвенно связанные со счётом времени начнут неправильно работать. Начиная от миллисов заканчивая serial.print
в мире ардуино наверно, ибо тогда придётся ручками настраивать весь тот ворох переферии настройку которого делает ардуино автоматически
а вот в не ардуино такая функция очень даже востребована. Особенно когда важно энергосбережение. В некоторых случаях полезно понизить частоту при старте. Например частоты ниже 1мгц не возможно выставить фьюзами, но можно выбрать программно. Потребление МК при понижении частоты существенно падает. В некоторых случаях это может быть динамический режим - при одних условиях одна частота, при других - другая и все это меняется налету. Пример - работа на максимальной частоте при питании от сети и на пониженной при питании от батарей.
П.с у AVR все довольно примитивно с управлением частотой, а например у STM там целый арсенал для управления. В частности можно определить какой источник тактировании использовать если откажет основной. У AVR это притча во языцех - стоит что не так сделать со фьюзами по тактированию и МК умирает. У STM запустится резервный генератор
Пример - работа на максимальной частоте при питании от сети и на пониженной при питании от батарей.
Оно конечно можна и так поизвращатся, но уходить в слип и проще и экономичней (я правда оба варианта на PIC делал когда сравнивал, но думаю и AVR так же поведет себя).
Т.е. при сравнении вариантов работы от батареи:
1. переходим с 16МГц на 1МГц.
2. работаем на 16МГц но только 1/16 от всего времени, остальное в слипе.
имеем следующее - производительность одинаковая, вариант 2 проще реализовать он экономичней (хоть я не уверен на 100%, но думаю даже и если проиграет то немного) и намного гибче - можно менять долю рабочего времени в широких пределах.
Заглянул в даташит на контроллер, пишут есть 128kHz internal Oscillator, можно его задействовать учитывая вышесказаное по теме.
Заглянул в даташит на контроллер, пишут есть 128kHz internal Oscillator, можно его задействовать учитывая вышесказаное по теме.
загляни, что там пишут про external clock
При многоходовом нарезании резьбы без механической синхронизации от таходатчика частотного можно ли на Arduino синхронизировать вращение шпинделя с перемещениями суппортов, если главный привод асинхронный?
За счёт считывающего таходатчиком высокочастотным и применения этой частоты в управлении шаговыми приводамми (какая то кратность) взамен тактовой частоты решает вопрос синхронизации перемещений с частотой вращения, но отрывается от хронометрии.
Возможна ли в Arduino работа в отрыве от тактовой хронометрической частоты, от внешней переменной?
Можете почитать про Комплектный асинхронный глубокорегулируемый электропривод "Размер 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