Программирование AVR: решение проблем, FAQ Arduino: как поменять для скетча значение F_CPU Fri, June 21 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

Arduino: как поменять для скетча значение F_CPU Печать
Добавил(а) microsin   

Во всех проектах (скетчах) Arduino частота кварцевого резонатора устанавливается при выборе платы, и не предусматривается никакой опции для изменения тактовой частоты системы (константа F_CPU). С этой проблемой я столкнулся, когда пытался скомпилировать скетч CardKeyBoard.ino для мини-клавиатуры M5stack [2]. На этой клавиатуре кварцевый резонатор отсутствует, используется 8 МГц внутренней тактовой частоты ATmega328P, установленный фьюзами. По этой причине было необходимо поменять значение F_CPU с 16000000 на 8000000.

После поиска в интернете нашел 3 способа изменения F_CPU.

1. Включить опцию подробного вывода процесса компиляции. Это делается через меню Файл -> Настройки -> установить галочки "Показать подробный вывод".

enable verbose output

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

Здесь приведен кусок большого вывода лога компиляции скетча CardKeyBoard.ino. Опцию -DF_CPU=16000000L необходимо поменять на -DF_CPU=8000000L, иначе в библиотеке Adafruit NeoPixel не работает управление трехцветным светодиодом по последовательному протоколу [3].

C:\arduino-1.8.13\arduino-builder -dump-prefs -logger=machine -hardware
   C:\arduino-1.8.13\hardware -hardware C:\Users\user\AppData\Local\Arduino15\
   packages -tools C:\arduino-1.8.13\tools-builder -tools C:\arduino-1.8.13\
   hardware\tools\avr -tools C:\Users\user\AppData\Local\Arduino15\packages
   -built-in-libraries C:\arduino-1.8.13\libraries -libraries C:\Users\user\
   OneDrive\Документы\Arduino\libraries -fqbn=arduino:avr:nano:cpu=atmega328old
   -ide-version=10813 -build-path C:\Users\user\AppData\Local\Temp\arduino_build_461155
   -warnings=none -build-cache C:\Users\user\AppData\Local\Temp\arduino_cache_496329
   -prefs=build.warn_data_percentage=75 
   -prefs=runtime.tools.arduinoOTA.path=C:\arduino-1.8.13\hardware\tools\avr 
   -prefs=runtime.tools.arduinoOTA-1.3.0.path=C:\arduino-1.8.13\hardware\tools\avr 
   -prefs=runtime.tools.avrdude.path=C:\arduino-1.8.13\hardware\tools\avr 
   -prefs=runtime.tools.avrdude-6.3.0-arduino17.path=C:\arduino-1.8.13\hardware\tools\avr 
   -prefs=runtime.tools.avr-gcc.path=C:\arduino-1.8.13\hardware\tools\avr 
   -prefs=runtime.tools.avr-gcc-7.3.0-atmel3.6.1-arduino7.path=C:\arduino-1.8.13\
   hardware\tools\avr -verbose C:\asm\CardKeyBoard\CardKeyBoard.ino
C:\arduino-1.8.13\arduino-builder -compile -logger=machine -hardware C:\arduino-1.8.13\
   hardware -hardware C:\Users\user\AppData\Local\Arduino15\packages -tools
   C:\arduino-1.8.13\tools-builder -tools C:\arduino-1.8.13\hardware\tools\avr
   -tools C:\Users\user\AppData\Local\Arduino15\packages -built-in-libraries
   C:\arduino-1.8.13\libraries -libraries C:\Users\user\OneDrive\Документы\Arduino\
   libraries -fqbn=arduino:avr:nano:cpu=atmega328old -ide-version=10813 -build-path
   C:\Users\user\AppData\Local\Temp\arduino_build_461155 -warnings=none -build-cache 
   C:\Users\user\AppData\Local\Temp\arduino_cache_496329 -prefs=build.warn_data_percentage=75 
   -prefs=runtime.tools.arduinoOTA.path=C:\arduino-1.8.13\hardware\tools\avr 
   -prefs=runtime.tools.arduinoOTA-1.3.0.path=C:\arduino-1.8.13\hardware\tools\avr 
   -prefs=runtime.tools.avrdude.path=C:\arduino-1.8.13\hardware\tools\avr 
   -prefs=runtime.tools.avrdude-6.3.0-arduino17.path=C:\arduino-1.8.13\hardware\tools\avr 
   -prefs=runtime.tools.avr-gcc.path=C:\arduino-1.8.13\hardware\tools\avr 
   -prefs=runtime.tools.avr-gcc-7.3.0-atmel3.6.1-arduino7.path=C:\arduino-1.8.13\hardware\
   tools\avr -verbose C:\asm\CardKeyBoard\CardKeyBoard.ino
Using board 'nano' from platform in folder: C:\arduino-1.8.13\hardware\arduino\avr
Using core 'arduino' from platform in folder: C:\arduino-1.8.13\hardware\arduino\avr
Detecting libraries used...
"C:\\arduino-1.8.13\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11
   -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics
    -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L
    -DARDUINO=10813 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR "-IC:\\arduino-1.8.13\\hardware\\
    arduino\\avr\\cores\\arduino" "-IC:\\arduino-1.8.13\\hardware\\arduino\\avr\\variants\\
    eightanaloginputs" "C:\\Users\\user\\AppData\\Local\\Temp\\arduino_build_461155\\
    sketch\\CardKeyBoard.ino.cpp" -o nul -DARDUINO_LIB_DISCOVERY_PHASE
Alternatives for Adafruit_NeoPixel.h: [Adafruit_NeoPixel@1.10.0]
ResolveLibrary(Adafruit_NeoPixel.h)
  -> candidates: [Adafruit_NeoPixel@1.10.0]
"C:\\arduino-1.8.13\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11
   -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics
   -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L
   -DARDUINO=10813 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR "-IC:\\arduino-1.8.13\\hardware\\
   arduino\\avr\\cores\\arduino" "-IC:\\arduino-1.8.13\\hardware\\arduino\\avr\\variants\\
   eightanaloginputs" "-IC:\\Users\\user\\OneDrive\\Документы\\Arduino\\libraries\\
   Adafruit_NeoPixel" "C:\\Users\\user\\AppData\\Local\\Temp\\arduino_build_461155\\
   sketch\\CardKeyBoard.ino.cpp" -o nul -DARDUINO_LIB_DISCOVERY_PHASE
Alternatives for Wire.h: [Wire@1.0]
ResolveLibrary(Wire.h)
  -> candidates: [Wire@1.0]
...
"C:\\arduino-1.8.13\\hardware\\tools\\avr/bin/avr-size" -A
   "C:\\Users\\user\\AppData\\Local\\Temp\\arduino_build_461155/CardKeyBoard.ino.elf"
Скетч использует 6758 байт (21%) памяти устройства. Всего доступно 30720 байт.
Глобальные переменные используют 259 байт (12%) динамической памяти, оставляя 1789 байт
   для локальных переменных. Максимум: 2048 байт.

2. Импортировать скетч в Microchip Studio (бывшая Atmel Studio), тогда можно будет штатными опциями поменять F_CPU и скомпилировать проект в среде Microchip Studio.

3. Поменять определение платы в файле boards.txt, указав там новое значение для F_CPU. Пример:

...
##############################################################
 
nano.name=CardKeyBoard (Nano, f_cpu изменена с 16 на 8 МГц)
nano.upload.tool=avrdude
 
nano.upload.protocol=arduino
nano.bootloader.tool=avrdude
nano.bootloader.unlock_bits=0x3F
nano.bootloader.lock_bits=0x0F
 
nano.build.f_cpu=8000000L
nano.build.board=AVR_NANO
nano.build.core=arduino
nano.build.variant=eightanaloginputs
...

[Ссылки]

1. Почему я не люблю Arduino.
2. CardKB full-featured QWERTY keyboard site:docs.m5stack.com.
3. WS2811: микросхема для управления трехцветным RGB-светодиодом.

 

Добавить комментарий


Защитный код
Обновить

Top of Page