Могут ли микроконтроллеры работать на произвольно низких тактовых частотах?

Например, в таблице данных для ATTiny13A указана минимальная частота 0 МГц. Означает ли это, что часы могут работать на любой произвольно низкой частоте без каких-либо побочных эффектов? Я предполагаю, что он потребляет меньший ток при более низких тактовых частотах? Означает ли 0 МГц, что вы можете полностью остановить часы, и пока подается питание, они будут помнить свое состояние бесконечно долго?

Я хотел бы добавить, что это отличный вопрос. Большинство старших EE не тратят время на то, чтобы на самом деле прочитать и подумать о таблицах данных, что является либо дополнением для вас, либо оскорблением для них, я хотел бы иметь в виду и то, и другое.
Я не совсем уверен, что внутренний RC-генератор отключается, если только вы специально не проинструктируете его об этом (через различные параметры энергосбережения). Не уверен, для чего он используется, но, по крайней мере, для EEPROM и, возможно, для АЦП.
@jippie, о каком внутреннем RC ты говоришь? ATMegaX, например, имеет внутренний RC для системных часов (обычно 8 МГц, с дополнительным прескалером div 8), у него есть сторожевой генератор. Системные часы выбраны предохранителем и, вероятно, отключены при использовании внешних часов. Остальные, как вы сказали, могут быть отключены режимами энергосбережения, но я сомневаюсь, что системные часы остановятся.

Ответы (5)

Да. Если в даташите написано "полностью статическая работа", то можно тактировать на любой частоте, даже 0 Гц. «Динамический» чип должен иметь часы с определенной частотой, иначе он потеряет свое состояние.

у вас есть пример микро, который позволяет это?
Микроконтроллеры, содержащие встроенную флэш-память, могут указывать минимальную (и максимальную) тактовую частоту флэш-памяти при записи во флэш-память. Однако при чтении из флэш-памяти это неприменимо.
MrEvil, серия Atmel AVR ATtiny, упомянутая в вопросе, полностью статична, как я думаю, и большинство чипов Atmel AVR. И я думаю, что почти все микроконтроллеры Microchip PIC.
Я хотел бы добавить MSP430 в список todbot. Большинство современных микроконтроллеров это делают, динамический тип - головная боль при разработке, поэтому большинство из них этого не делает.
На самом деле, я думаю, что АЦП в ATTiny13A не работает на низких частотах, может быть, из-за распада конденсатора выборки и хранения? «По умолчанию схема последовательного приближения требует входной тактовой частоты от 50 кГц до 200 кГц для получения максимального разрешения. ... Модуль АЦП содержит предварительный делитель, который генерирует приемлемую тактовую частоту АЦП на любой частоте процессора выше 100 кГц».
endolith -- согласен, АЦП обычно не работают на низких частотах. Насколько я могу судить, все остальное практически на всех современных микроконтроллерах продолжает нормально работать вплоть до «0 Гц», то есть «пауза на неопределенный срок». В частности, многие микроконтроллеры имеют режим «сна с низким энергопотреблением», который останавливает все часы до тех пор, пока что-то — обычно человек, нажимающий кнопку — не разбудит их, и они возобновятся с того места, где остановились. en.wikipedia.org/wiki/Static_logic_(digital_logic)
RCA 1802 ( en.wikipedia.org/wiki/RCA_1802 ) был, насколько мне известно, первым микроконтроллером, поддерживающим статическую работу еще в 1976 году.
Однако АЦП можно рассматривать как периферийное устройство с точки зрения диапазона тактовой частоты ядра ЦП. Статическая работа, кажется, не имеет большого значения. Вы можете собрать последовательную схему, используя микросхемы TTL, и она будет работать на произвольно низких тактовых частотах. Такие вещи, как наличие DRAM, требующей обновления, создают проблемы.
@Kaz: при изготовлении устройства NMOS более эффективно безоговорочно подтягивать шину к высокому уровню в одной половине цикла, а затем условно подтягивать к низкому уровню в другой половине цикла, чем использовать пассивное подтягивание, которое должно быть сильным. достаточно, чтобы поднять автобус высоко в течение цикла. При первом подходе будет теряться ток, пропорциональный фактической емкости шины в каждом цикле, в то время как при втором будет теряться ток, пропорциональный фактическому току источника цепи, чья способность источника тока в наихудшем (наименьшем) случае должна быть достаточной для питания в наихудшем случае ( максимальная) емкость шины.
@Kaz: Таким образом, многие устройства NMOS, такие как 6502, использовали динамическую логику для таких вещей, как управление шиной, а не только динамическую «память». Использование динамического управления шиной означает, что должны быть обеспечены соотношения емкости и утечки, но в противном случае обеспечивается гораздо более щедрый запас по многим другим производственным параметрам, чем это было бы возможно в полностью статической конструкции.

Я публикую еще один ответ только потому, что на последний вопрос, который у вас был, раньше не было ответа.

Тодбот совершенно прав. Он также будет потреблять меньшую мощность на более низких скоростях. Это также означает, что если вы снабжаете его тактовой частотой, например, от другого процессора, вы можете прекратить снабжать его тактовой частотой в любой момент, а затем начать синхронизацию позже, если вы не разгоняетесь быстрее, чем максимальная скорость, все будет в порядке.

Чипы, которые у меня есть, меняются на порядок между генератором с частотой 32768 Гц и генератором с частотой 1 МГц. У меня были приложения, в которых мне не требовалась скорость, мне просто нужен был еще один маленький человек, выполняющий за меня базовую обработку данных.

Надеюсь это поможет.

Я всегда хотел запустить тактовую линию микроконтроллера с помощью кнопки. Пусть человек будет часами. :) А если серьезно, то действительно хорошая вещь в этих статических конструкциях заключается в том, что их энергопотребление линейно зависит от тактовой частоты: замедляйте часы и используйте меньше энергии. Это может быть очень удобно.
Да, но я хотел бы отметить, что потребляемая мощность является линейной функцией со смещением, даже без часов они все равно потребляют энергию, особенно при работе с любыми выходами. У нас только что появились новые стажеры на моей работе, я предлагаю нажать кнопку и посмотреть, что произойдет.
@todbot Хорошая идея. :-) Но не забудьте устранить дребезг кнопки.
Попробуйте с помощью «шлифовальной рукоятки» (как на жаргоне это означает: jargon.net/jargonfile/g/grindcrank.html ) :-)) (и да, много лет назад я создал ее для пошагового выполнения кода, когда использовал Turbo Pascal . в школе :-)
@todbot На самом деле это не надуманно и не сложно, если вы можете принять грубую абстракцию. Есть несколько примеров, когда люди используют такие гаджеты для обучения работе компьютеров. У Майка Предко действительно хорошая книга, и в ней даже есть печатные платы (хотя и не для компьютерного проекта): amazon.com/Digital-Electronics-Guidebook-Michael-Predko/dp/…
@everyone, я на 99% уверен, что todbot знал, что это сработает, и задумал это как шутку, поскольку большинству RISC-процессоров требуется так много тактовых импульсов, что это будет долго. забывая устранить дребезг, чтобы получить более высокую тактовую частоту за одно нажатие.
@Axeman - в файле жаргона утверждается, что «крученая рукоятка» мифична. Вот доказательства обратного: computerhistory.org/babbage . Рукоятка справа управляет компьютером; тот, что слева, управляет принтером. Вы можете лучше понять размер вещи, посмотрев видео на этой странице; это около восьми футов в высоту.
@PeteBecker: Калькулятор Curta также имел рукоятку, которую можно было тянуть вверх или вниз, чтобы выбрать сложение или вычитание.

Большинство современных конструкций микроконтроллеров будут работать с любым шаблоном на их тактовом входе, при условии, что ни один высокий импульс не будет меньше определенной минимальной длины, ни один низкий импульс не будет меньше определенной минимальной длины, и не будет ни один низкий-высокий-низкий или высокий-низкий-высокий длина пары импульсов меньше определенной. По сути, происходит то, что после того, как микросхема выполнит все действия, связанные с определенным фронтом тактовых импульсов, он окажется в состоянии, в котором он ничего не делает, а только ожидает следующего фронта тактовых импульсов. Если следующий перепад не появится в течение десяти дней, тогда (если у чипа нет внешнего сторожевого таймера) чип будет в том же состоянии, как если бы перепад прибыл в тот момент, когда чип был готов к нему.

Обратите внимание, что в целом приостановка часов на микроконтроллере существенно снижает потребление тока, но не так сильно, как использование функции «сна». Потребляемый ток большинства микроконтроллеров в режиме «работа» можно довольно хорошо оценить как постоянный ток покоя плюс определенное количество тока за цикл в секунду (что может быть более «естественно» выражено как заряд за цикл). Например, ток покоя микросхемы может составлять 10 мкА плюс ток 0,1 мА/МГц (100 пКл/цикл). Работа такого чипа на частоте 10 МГц даст ток 1,01 мА. Запуск на частоте 1 МГц даст 0,11 мА. Запуск его на частоте 100 кГц даст 0,02 мА. Запуск его на частоте 1 Гц даст 0,0100001 мА. С другой стороны, чип может предложить ток сна 1 мкА. Вообще, переход в спящий режим полностью отключит области чипа, которые не будут делать ничего полезного, пока чип находится в спящем режиме, тем самым избегая любых токов утечки, которые могут быть в таких областях. В некоторых случаях это также снизит нагрузку на такие области, как файлы регистров, до уровня, при котором файлы регистров могут хранить свое содержимое, но не будут получать к ним быстрый доступ (поскольку к ним вообще не будет доступа, скорость доступа не имеет значения). .

Некоторые старые микропроцессоры, микроконтроллеры и другие устройства имели максимальное время максимальной и/или минимальной частоты. Такие процессоры использовали динамическую логику для экономии схемы. В качестве примера динамической логики рассмотрим сдвиговый регистр: для типичного бита статического регистра требуется двухтранзисторная схема для хранения значения, в то время как бит динамического регистра хранит значение на затворе считывающего транзистора. Регистр динамического сдвига с двухфазной синхронизацией может быть реализован в NMOS с использованием четырех NFET и двух резисторов на бит. Для статического регистра сдвига потребуется восемь NFET и четыре резистора на бит. Подходы к динамической логике сегодня не так распространены. Еще в 1970-х годах емкость затвора была значительной, и от нее нельзя было избавиться. Таким образом, не было особой причины не воспользоваться этим преимуществом. Сегодня емкость затвора обычно намного ниже, и производители чипов активно пытаются его уменьшить. Для надежной работы динамической логики часто требуется целенаправленная работа по увеличению емкости затвора. В большинстве случаев дополнительная площадь кристалла, необходимая для увеличения емкости, может быть столь же эффективно использована для добавления дополнительных транзисторов, чтобы сделать емкость ненужной.

Вы упоминаете NMOS и IIRC, существует связь между популярностью динамической логики и тем, что дополнительная MOS (CMOS) еще недоступна.
@jpc: Я изучил схемы различных чипов NMOS — некоторые очень подробно, включая Atari 2600 TIA, который является настоящим произведением гения — люди все еще находят новые способы его использования три десятилетия спустя. Я думаю, что одним из преимуществ NMOS по сравнению с CMOS с точки зрения удобства проектирования является то, что «прострел» (случайная одновременная активация верхнего и нижнего приводов) не является фактором, хотя я признаю некоторое любопытство относительно того, почему CMOS не работает при достаточно низком напряжении, чтобы точка пересечения на входе отключила драйверы высокого и низкого напряжения, а не активировала оба.
@jpc: В NMOS можно реализовать вентиль XOR с двумя транзисторами и двумя резисторами, если входы достаточно «сильны». Даже если нужно добавить инверторы к обоим входам, четырехтранзисторный вентиль xor с четырьмя резисторами будет лучше, чем многие другие подходы. Однако я никогда не видел, чтобы этот подход использовался, хотя я разработал аналогичную схему с использованием BJT примерно в 1978 году (концепция дизайна лучше работала бы с МОП-транзисторами, но я ничего о них не знал).
+1 - Я чувствую, что настоящая жемчужина, которую вы здесь упомянули, заключается в том, что более низкие тактовые частоты действительно экономят энергию, но не так сильно, как спящие режимы, которые специально разработаны для оптимизации энергосбережения. Моя интуиция подсказывает мне, что вы сэкономите больше энергии, используя быстрый осциллятор в сочетании с разумным использованием спящего режима, постоянно работая на очень низкой частоте.
@JoelB: Это зависит от многих факторов. На многих процессорах есть задержка между включением быстрых часов и возможностью их фактического использования; в течение этого времени человек будет тратить энергию впустую. Если вам нужно просыпаться, например, 100 раз в секунду, возможно, лучше непрерывно бежать медленно, чем постоянно начинать и останавливаться. С другой стороны, если кто-то собирается запускать и останавливать быстрые часы, может быть хорошо минимизировать количество времени, в течение которого они работают, до такой степени, что это можно сделать, не тратя впустую дополнительную энергию. Например...
... если ЦП имеет «режим высокого напряжения ядра», который может работать на частоте до 16 МГц, и «режим низкого напряжения ядра», который может работать на частоте до 4 МГц, переключение между режимами «стоп» и «4 МГц» может быть лучше, чем переключение между режимами «стоп» и «1 МГц», если первый требует меньше времени бодрствования; даже если переключение на режим 16 МГц еще больше сократит время бодрствования, это, вероятно, не будет стоить дополнительных затрат энергии.
@supercat - это абсолютно зависит от множества факторов (некоторые из которых не поддаются количественной оценке). В конце концов, энергия является королем, и вам придется адаптировать свою схему часов с учетом вашего приложения/процессора и того, сколько/часто будет происходить обработка. Я просто хотел указать на точку зрения «лес за деревьями», которую вы представили, упомянув спящий режим в этом обсуждении. Моя интуиция подсказывает мне, что все еще существует много производственного кода с 'while (1) {_nop;}', который инженеры с благими намерениями думают, что они экономят больше всего энергии, работая на более медленных скоростях, вместо того, чтобы должным образом реализовывать спящий режим.
@JoelB: Ваш комментарий напомнил мне о проблеме, с которой некоторые коллеги-инженеры столкнулись некоторое время назад: аудиовыход системы иногда раздражающе гудел. Оказалось, что всякий раз, когда ОС обнаруживала, что процессору нечего делать, она переводила его в спящий режим. Это снизило энергопотребление, что, в свою очередь, позволило немного увеличить VDD. Каждые 10 мс процессор просыпался, чтобы узнать, есть ли еще что-то сделать. Проблема была устранена добавлением чего-то вроде: "do {} while(audio_powered_on());" перед оператором «sleep()» в задаче бездействия, поскольку в этой ситуации экономия энергии не была главной.
@supercat - Похоже, эта история доказывает обратное. Правильно подобранный/регулируемый/фильтрованный/развязанный источник питания должен быть спроектирован таким образом, чтобы он не оказывал заметного влияния на звук при ожидаемой рабочей нагрузке процессора. Так что кажется, что мощность (или, точнее, дизайн блока питания ) по-прежнему остается королем. Отличное исправление кстати!
Что вы имеете в виду, говоря, что сон имеет меньшую мощность, чем остановка часов? Например, на atmel единственная разница между режимом сна и запуском заключается в том, какие часы остановлены. Сон больше ничего не может сделать? Разве это не режет питание на разделы?
@JoelB: Фильтрация источника питания имеет три аспекта: (1) предотвращение попадания мусора внутри наружу; (2) предотвратить попадание мусора снаружи внутрь; (3) предотвратить изменение потребляемого тока от изменения внутреннего напряжения. Оптимизация для № 1, как правило, негативно влияет на № 3. Если бы в устройстве использовались полностью отдельные источники питания для аудио и ЦП, это позволило бы избежать проблемы, но потребовало бы большего количества электроники источника питания; проблема заключалась в том, что процессор и звуковая схема находились на одной стороне одного и того же фильтра.
@SectoKia: альтернатива была не между остановкой часов и спящим режимом, а между спящим режимом в режиме ожидания и выполнением бесполезных инструкций для обеспечения более равномерного энергопотребления. Хотя многие процессоры отключают питание на значительных участках в своих спящих режимах с низким энергопотреблением.

Да, вы можете полностью остановить часы и перезапустить их позже без каких-либо последствий. Вы даже можете заменить часы на кнопку и выполнять свою программу буквально шаг за шагом (частота: около 0,1 Гц).

Мощность почти линейна с частотой: на частоте 10 МГц микроконтроллер будет потреблять в 10 раз больше энергии, чем на частоте 1 МГц. Однако это не означает, что при 0 Гц потребление полностью равно нулю. Всегда есть рассеивание статического электричества, но оно очень низкое, обычно 1 мкА или меньше.

PS: обратите внимание, что АЦП имеет минимальную рабочую частоту. Если частота слишком низкая, конденсатор, на котором измеряется напряжение, будет слишком сильно разряжаться, и ваши измерения будут ошибочными.

Нажать кнопку? А как насчет разоблачения?
Требуется дебаунс.

Опоздав с этим вопросом, он напомнил мне о проекте, который я видел некоторое время назад.

Это детектор летучих мышей, который большую часть времени использует PIC, работающий на нулевой частоте, а затем синхронизируется с самим сигналом, который он обнаруживает.

http://www.micro-examples.com/public/microex-navig/doc/077-picobat.html

В этом проекте сигнал является одновременно и тактовым сигналом, и питанием чипа . :)