1

我在 Arduino 环境中使用 11.0592MHz 的 ATMega328P。我认识到 delayMicroseconds() 函数快了大约 27%。原因是,wiring.c 中的代码假定时钟速度现在为 8MHz。

现在我尝试修复它。我发现了不同的帖子,但我不确定最兼容 Arduino 的方式是什么。你能推荐什么?

  1. 如果 F_CPU 为 11.0592MHz,将wiring.c 中的变量“us”乘以 1.27?简单但只影响 delayMicroseconds 而不是 millis()、micros()、delay() 等。
  2. 将预分频因子可能从 64 更改为 ???

其他想法或指南?

先感谢您。

菲利克斯

4

1 回答 1

0

Arduino 方法是为您的电路板制作一个具有新 F_CPU 速度的自定义平台。核心库应该携带这个 F_CPU。

这很容易,通过制作一个包含您的差异的boards.txt 文件。文件的位置(两者相同)在两个当前 IDE 之间是不同的。对于 Arduino IDE 1.0.5:

C:\Users\mflaga\Documents\Arduino\hardware\myArduino11MgHz\boards.txt

在 1.5.5 的情况下:

C:\Users\mflaga\Documents\Arduino\hardware\myArduino11MgHz\avr\boards.txt

在您的情况下,草图目录会有所不同。

# See: http://code.google.com/p/arduino/wiki/Platforms

##############################################################

myArduino11MgHz.name=Arduino 11MgHz

myArduino11MgHz.vid.0=0x2341
myArduino11MgHz.pid.0=0x0043
myArduino11MgHz.vid.1=0x2341
myArduino11MgHz.pid.1=0x0001

myArduino11MgHz.upload.tool=avrdude
myArduino11MgHz.upload.protocol=arduino
myArduino11MgHz.upload.maximum_size=32256
myArduino11MgHz.upload.maximum_data_size=2048
myArduino11MgHz.upload.speed=115200

myArduino11MgHz.bootloader.tool=avrdude
myArduino11MgHz.bootloader.low_fuses=0xFF
myArduino11MgHz.bootloader.high_fuses=0xDE
myArduino11MgHz.bootloader.extended_fuses=0x05
myArduino11MgHz.bootloader.unlock_bits=0x3F
myArduino11MgHz.bootloader.lock_bits=0x0F
myArduino11MgHz.bootloader.file=optiboot/optiboot_atmega328.hex

myArduino11MgHz.build.mcu=atmega328p
myArduino11MgHz.build.f_cpu=11059200L
myArduino11MgHz.build.board=AVR_myArduino11MgHz
myArduino11MgHz.build.core=arduino:arduino
myArduino11MgHz.build.variant=arduino:standard

##############################################################

这是board.txt的第 3 方 GUI 编辑器。

免责声明。以上确实可以编译并且应该可以正常工作。我还没有实际测试并加载到一个单元中。


也就是说,我希望引导加载程序的 F_CPU 不匹配。对此有三种可能的解决方案。

第一;optiboot 加载程序应该有一个对应的目标,其偏差如下:

\arduino-1.5.5\hardware\arduino\avr\bootloaders\optiboot\Makefile

myArduino11MgHz: AVR_FREQ = 11059200L

第二;更改boards.txt 上传速度以匹配=115200*(11059200/16000000) 的更改。

myArduino11MgHz.upload.speed=79626

这是一个非典型波特率,avrdude 或串行端口都可能支持它。

第三;不要使用引导加载,通过 ISP 编程器上传。


我同样计划制作一个具有不同 F_CPU 的板,但实际上只制作了具有相同速度的定制板。在您的情况下,我很想知道上述方法是否真的有效。

于 2014-01-01T16:08:16.807 回答