Каковы последствия работы ATmega328P на частоте 8 МГц и 3,3 В с системой Arduino?

8

Я работаю над кастомным Arduino, который будет работать при 3,3 В без регуляторов или USB-чипов (для энергопотребления). Я слышал, что разгон чипа на 16 МГц / 3,3 В, как правило, хорошо, но я все равно хотел бы остаться в рамках спецификации.

Первый: для работы на 8 МГц, мне просто нужно заменить кристалл? Или я должен еще что-нибудь сделать?

Второе: нужно ли вносить какие-либо изменения в код, чтобы отразить новую скорость? В этом проекте я использую последовательные соединения, SPI и I2C, а также операционную систему NilRTOS и функции миллисекунды / задержки. Будет ли что-нибудь из этого сломано? Будет ли код работать заметно медленнее?

Третье: как я могу запрограммировать чип? Можно ли запрограммировать его на Arduino Uno с частотой 16 МГц, а затем перенести на обычное Arduino?

Четвертое: изменится ли энергопотребление на 8 МГц?

Спасибо!

Вулкан
источник
2
Существует множество плат, совместимых с Arduino, 3,3 В, например, Sparkfun Pro mini. Он поддерживается IDE, поэтому все настройки часов будут выполнены для вас, как только вы выберете его из выпадающего меню.
Олег Мазуров
На частоте 8 МГц вы, вероятно, будете в порядке, используя внутренний генератор вместо кристалла. Будьте осторожны, когда вы компилируете код, когда вы, например, выбираете «Pro Mini 328p на 8 МГц», что 8 применяется к коду, поэтому я бы не советовал компилировать для 16 МГц, а затем трансплантировать, иначе вы можете обнаружить, что задержка (1000) занимает две секунды. в качестве простого примера. И проверьте энергосбережение / сон в коде H2OhNo. (Еще один момент, когда я предлагаю вам вообще взять любого программиста вместо того, чтобы ограничивать себя последовательными загрузками, поищите в Tindie «ISP».)
Патрик Тюдор

Ответы:

7

Формула выглядит так: вольт * 5,9-6,6 = мГц (действительный между 1,8 В и 4,5 В), поэтому при 3,3 В это даст 12,8 МГц. Имейте в виду, что если вы работаете на частоте 12,8 МГц, ЛЮБОЕ падение ниже 3,3 В МОЖЕТ вызвать проблемы (и очень трудно диагностировать тоже!), Или вы МОЖЕТЕ сойти с рук.

Тем не менее, чипы Arduino Atmega328p имеют обнаружение «отключения» на уровне 4,3 В - при любом падении ниже, чип отключается. Вы можете попросить интернет-провайдера (AKA ICSP) заменить предохранители - зайдите на сайт http://www.engbedded.com/fusecalc/, чтобы узнать, на что устанавливать предохранители. Вы также можете использовать ISP для считывания текущих предохранителей или перепрограммировать микросхему без платы Arduino - все мои проекты имеют 6-контактный разъем. Если вы сделаете это, перед перепрограммированием с использованием платы Arduino вам нужно будет «Burn Bootloader» (в меню инструментов). Обратите внимание, что программирование по-прежнему можно выполнять через Arduino IDE.

В качестве альтернативы, если вы хотите стать «легким» (и иметь интернет-провайдера), вы можете заменить предохранители на внутренние часы с тактовой частотой 8 МГц - это также освобождает 2 дополнительных контакта! Имейте в виду, однако, что внутренние часы могут дрейфовать 1,2 часа в день (= 5%), по сравнению с 1,7 секундами в день (= 20 частей на миллион) на типичном кристалле кварца. Если вы не используете его для хронометража, это, вероятно, не имеет значения.

Вам нужно будет внести изменения во время, для вашего кода - вам нужно добавить файлboards.txt с правильными настройками для вашего чипа / тактовой частоты и т. Д. - вы можете скопировать настройки из записи для платы, изменить имя и изменить настройка "build.f_cpu"; перезапустите (или запустите) вашу Arduino IDE, перейдите в «Инструменты-> Доска» и выберите доску, которую вы добавили.

Вы можете переместить микросхему на плату или с нее и перепрограммировать ее там (обратите внимание, что плата, выбранная в Tools-> Board, является платой FINAL, а не платой программирования). Будьте осторожны, подключая / отключая его - в конце концов, вы согнете контакты! В качестве альтернативы, вы можете использовать ISP (ICSP), как указано выше - очень рекомендуется. Программирование ISP также будет работать, если для микросхемы установлен заводской режим по умолчанию, при условии, что он имеет рабочие часы.

Сколько энергии потребляет чип, во многом зависит от того, что вы с ним делаете - не только тактовые частоты, тактовый источник и т. Д., Но также и режимы сна. Если вы много спите, он может меньше тянуться при работе быстрее, чем при медленной работе - если почти все ваше время спит, то энергопотребление следует считать за такт, а не за секунду - если ваши часы в два раза быстрее, и половину тока, то вы получаете тот же ток в каждой инструкции. Поскольку все остальное время вы спите, вы не получаете никакой выгоды. На http://www.gammon.com.au/power приведена очень хорошая разбивка энергопотребления, советы по экономии энергии и т. Д.

Если вы слишком сильно замедляете свои часы, последовательный интерфейс и i2c могут стать ненадежными (если вы не снизите скорость), но я ожидаю, что смогу снизить частоту до 1 МГц, прежде чем это станет проблемой - чип с частотой 1 МГц, пытающийся сделать 9600 бит / с имеет 104 инструкции на бит передаваемых данных. i2c работает с частотой 100 кГц, поэтому вы получаете 10 инструкций на бит (с частотой 1 МГц) - возможно, при нажатии. 8 МГц должно быть хорошо. Тест, тест, тест.

ОБНОВЛЕНИЕ: есть 3 возможных настройки для обнаружения отключения - есть 3 возможных значения для AtMega328p: отключено, 1,8 В, 2,7 В и 4,3 В. У меня сложилось впечатление (выше), что Arduinos обычно были настроены на 4.3v; по-видимому, это не так (см. комментарий ниже). Я помню, что видел где-то, что было обнаружение отключения. Об этом следует помнить, если ваш arduino перезагружается, особенно когда вы нагружаете батарею большими нагрузками (работают моторы, несколько светодиодов и т. Д.).

AMADANON Inc.
источник
Спасибо за этот ответ! Я немного сбит с толку тем, что вы сказали о отключении детектора отключения питания ниже 4,3 В. Сейчас я работаю при 3,7 В, и он работает нормально; не нужно было вносить какие-либо изменения в предохранители.
Вулкан
@ user40, см. раздел «ОБНОВЛЕНИЕ» внизу моего поста.
AMADANON Inc. 22.02.15
4

Первый: для работы на 8 МГц, мне просто нужно заменить кристалл? Или я должен еще что-нибудь сделать?

Нет, запустите внутренний генератор в соответствии с рекомендациями AMADANON Inc.

В качестве альтернативы, установите плавкий предохранитель «деления тактовой частоты на 8» (который будет работать на частоте 2 МГц от кристалла 16 МГц), а затем в коде измените деление обратно до 2. т.е.

#include <avr/power.h>

void setup ()
  {
  // slow clock to divide by 2
  clock_prescale_set (clock_div_2);
  } // end of setup

Или для программирования на другом Uno, оставьте предохранитель в покое, запрограммируйте на 16 МГц, а затем опустите тактовую частоту в целевом чипе, надеясь, что он будет работать достаточно долго при 3,3 В для выполнения этой первой инструкции. Самым безопасным было бы просто установить 8 МГц кристалл или резонатор на целевой плате. Однако, если синхронизация не является критической, запустите внутренний генератор.

Второе: нужно ли вносить какие-либо изменения в код, чтобы отразить новую скорость? В этом проекте я использую последовательные соединения, SPI и I2C, а также операционную систему NilRTOS и функции миллисекунды / задержки.

Если вы сообщаете IDE, что у вас 8-МГц процессор (например, Lilypad), он должен соответствующим образом отрегулировать задержки, расчеты скорости передачи и т. Д.

Будет ли что-нибудь из этого сломано?

I2C и SPI с автоблокировкой. Они могут работать на разных скоростях. Я сомневаюсь, что будут какие-то проблемы с ними. Что касается последовательного соединения, то при условии, что вычисления выполнены правильно, широкий диапазон скоростей передачи данных все еще должен быть доступен.

Будет ли код работать заметно медленнее?

Ну да, он будет работать на половине скорости по сравнению с 16 МГц.

Третье: как я могу запрограммировать чип? Можно ли запрограммировать его на Arduino Uno с частотой 16 МГц, а затем перенести на обычное Arduino?

Вы можете сделать это. Или вы можете подключить заголовок ICSP или заголовок FTDI и запрограммировать его на месте.

Примеры здесь: http://www.gammon.com.au/breadboard

Четвертое: изменится ли энергопотребление на 8 МГц?

Да, это несколько уменьшено.

Вы можете значительно уменьшить его, используя другие методы, описанные на http://www.gammon.com.au/power и упомянутые AMADANON Inc.

Ник Гаммон
источник
Спасибо, Ник! Я действительно читал ваш сайт раньше, и это помогло мне радикально сократить энергопотребление. В результате, AA и AAA в настоящее время являются жизнеспособным источником питания для этого устройства, что имеет большое значение, потому что вес имеет значение. Так что спасибо за этот сайт тоже - это огромный сервис для сообщества и действительно полезен для таких людей, как я.
Вулкан