Arduino在11.0592MHz。修改Timer0,delayMicroseconds()

时间:2014-01-01 12:55:56

标签: c++ arduino arduino-ide

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

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

  1. 如果F_CPU为11.0592MHz,则将wiring.c中的变量“us”乘以1.27?容易但只影响delayMicroseconds而不影响millis(),micros(),delay()等。
  2. 将预分频因子从64更改为???
  3. 其他想法或指南?

    提前谢谢。

    菲利克斯

1 个答案:

答案 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的电路板,但实际上只能以相同的速度制作定制电路板。在你的情况下,我很想知道上述内容是否真的有效。