Тактовая частота Arduino Mega 2560

Aravix

✩✩✩✩✩✩✩
4 Май 2020
2
1
День добрый уважаемые форумчане.
Задача такова. Нужно заставить Arduino Mega 2560 работать при частоте кварца 8мГц вместо установленного по умолчанию 16мГц. Вернее заставить Arduino IDE скомпилировать прошивку для этого кварца. Причем на стандартных ардуиновских ядрах и библиотеках. MegaCore не подходит. Загружать могу в принципе через внешний программатор и через стороннюю программу, если нужно. Главное получить "правильный" файл прошивки, на 8 мГц, чтобы все делЕи и мИллисы работали корректно. Предвидя вопросы типа, зачем это нужно, отвечаю. Скорость выполнения особой роли не играет, но при 16мГц Мега работает адекватно от 4.5В, а нужно чтобы работала от стандартного аккумулятора (3.5-4.2в). Всякие повышайки - не предлагать. Вопрос конкретный, не для дискуссии. Буду очень благодарен за помощь!
 

Sergo_ST

★★★★★✩✩
15 Мар 2020
520
456
Если библиотеки используют дефайн FCPU, то достаточно добавить в самое начало прошивки(перед объявлением библиотек) это:
C++:
#ifdef F_CPU
#undef F_CPU
#define F_CPU 8000000UL
#endif
 
Изменено:

Sergo_ST

★★★★★✩✩
15 Мар 2020
520
456
Если нужно оставить кварц на 16мГц то помимо дефа нужно добавить в самое начало сетап пределитель тактовой частотой на 2:
C++:
CLKPR = (0x01 << CLKPCE);
CLKPR = (0x01 << CLKPS0);
Но нужно понимать, что пока работает загрузчик у мк частота будет 16мГц.
Если будете ставить на 8мГц, то нужно учесть что загрузчик перестанет работать, если он нужен, то придется перезалить его под 8мГц.

Так-же не уверен затрагивает ли FCPU миллис/микрос.
 

Aravix

✩✩✩✩✩✩✩
4 Май 2020
2
1
Мне кажется это не совсем то. Так многие параметры перестанут корректно работать. Здесь нужно как то редактировать, менять файлы самой ИДЕ, boards.txt и еще чтото, чтобы при компиляции учитывался кварц 8 мГц, как это делается в более профессиональных программах. Но не могу найти как именно. По идее в теле самой прошивки ничего не должно меняться.
 

Sergo_ST

★★★★★✩✩
15 Мар 2020
520
456
Да, можно изменить и в настройках платы частоту.
Если ядро стоковое, то нужно найти строчку mega.build.f_cpu, и записать в него желаемую частоту.
Но вы должны понимать, если библиотека не рассчитана на работу под другой частотой, то тайминги всё равно поплывут, вне зависимости от того, что будет написано в конфиге платы или в FCPU.
 

bort707

★★★★★★✩
21 Сен 2020
2,500
760
Здесь нужно как то редактировать, менять файлы самой ИДЕ, boards.txt
Для того чтобы все работало корректно, нужно обеспечить две вещи
1. Чтобы сам контроллер работал на частоте 8 МГц
2. Чтобы настройки ИДЕ были выставлены на 8 МГЦ

Первое можно сделать либо заменой кварца на 8 МГц, либо установкой делителя частоты, либо переходом на внутренний тактовый генератор.
Для второго достаточно поменять в IDE макрос F_CPU. Все остальное расссчитывается из значения частоты, в том числе работа системных библиотек и настройки миллис и микрос.
 

Aravix

✩✩✩✩✩✩✩
4 Май 2020
2
1
@bort707, с первым все понятно. Где и как сделать второе? Версия ide последняя у меня.
 

bort707

★★★★★★✩
21 Сен 2020
2,500
760
Нужно найти тот файл boards.txt, что относится к вашей плате (в установленной ИДЕ этих файлов несколько), найти секцию относящуюся именно к Меге и исправить в ней частоту. Частота может быть установлена в нескольких переменных, но все они лежат в одной секции файла(обычно не более 30-50 строк), так что не заблудитесь.
Чтобы не удалить поддержку обычной меги на 16 МГц, лучше эту секцию предварительно скопировать в новую и править отдельно.

Вот тут подробнее

И да, оговорка - если "последняя версия" имеется в виду 2.х.х - то в ней все может оказаться (и почти наверняка окажется) совсем не так. Тогда советую откатится на 1.8 - 1.9
 

te238s

★✩✩✩✩✩✩
14 Ноя 2021
181
35
А оставить 16 МГц не пробовали? Может и проблемы нет. У меня мега128 по даташиту от 4.5 в только должна работать. Но я читать даташиты не умею)))поэтому при 3.3в прекрасно всё работает на 16.5 и 20 МГц.