我正在使用11.0592MHz的ATMega328P和Arduino环境。我认识到delayMicroseconds()函数的速度约为27%。原因是,wiring.c中的代码假设时钟速度为8MHz。
现在我尝试修复它。我找到了不同的帖子,但我不确定什么是最兼容的Arduino方式。你能推荐什么?
其他想法或指南?
提前谢谢。
菲利克斯
答案 0 :(得分:0)
Arduino的方式是使用新的F_CPU速度为您的主板制作自定义平台。核心库应该通过这个F_CPU。
通过制作带有差异的boards.txt文件,这很容易。两个当前IDE之间文件的位置(两者之间相同)的位置不同。在Arduino IDE 1.0.5的情况下:
C:\用户\ mflaga \文件\的Arduino \硬件\ myArduino11MgHz \ boards.txt
并且在1.5.5的情况下:
C:\用户\ mflaga \文件\的Arduino \硬件\ 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的3rd party GUI Editor。
声明。以上编译,应该可以正常工作。我实际上没有测试并加载到一个单元中。
那就是说,我希望引导加载程序的F_CPU不匹配。有三种可能的解决方案。
<强>第一强>; optiboot加载程序应该有一个具有以下偏差的相应目标:
\ Arduino的1.5.5 \硬件\ Arduino的\ AVR \引导程序\ optiboot \生成文件
myArduino11MgHz: AVR_FREQ = 11059200L
<强>第二强>;更改boards.txt上传速度以匹配= 115200 *(11059200/16000000)的更改。
myArduino11MgHz.upload.speed=79626
这是一种非典型的波特率,无论是avrdude还是串口都可能支持它。
<强>第三强>;不要通过ISP程序员上传来使用bootload。
我同样计划制作一个具有不同F_CPU的电路板,但实际上只能以相同的速度制作定制电路板。在你的情况下,我很想知道上述内容是否真的有效。