1

Arduino環境で11.0592MHzのATMega328Pを使用しています。delayMicroseconds() 関数が約 27% 速すぎることがわかりました。その理由は、wirering.c のコードが、クロック速度が現在 8MHz であることを想定しているためです。

今、私はそれを修正しようとしています。さまざまな投稿を見つけましたが、Arduino と最も互換性のある方法が何であるかはわかりません。何をお勧めしますか?

  1. F_CPU が 11.0592MHz の場合、wireing.c の変数「us」に 1.27 を掛けますか? 簡単ですが、delayMicroseconds のみに影響し、millis()、micros()、delay() などには影響しません。
  2. プリスケール係数を 64 から ??? に変更します。

他のアイデアやガイドはありますか?

前もって感謝します。

フェリックス

4

1 に答える 1

0

Arduino の方法は、新しい F_CPU 速度のボード用のカスタム PLATFORM を作成することです。コア ライブラリは、この F_CPU を実行する必要があります。

これは、違いを含めてboards.txtファイルを作成するだけで簡単にできます。ファイルの場所 (2 つの間で同じ) が、現在の 2 つの 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 のサードパーティ GUI エディターです。

免責事項。上記はコンパイルされ、正常に動作するはずです。実際にテストしてユニットにロードしていない場所。


とは言っても、ブートローダーの F_CPU が一致しないことが予想されます。これには 3 つの解決策があります。

最初; optiboot ローダーには、以下の偏差を持つ対応するターゲットが必要です。

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

myArduino11MgHz: AVR_FREQ = 11059200L

2番目; =115200*(11059200/16000000) の変更に一致するように、boards.txt のアップロード速度を変更します。

myArduino11MgHz.upload.speed=79626

これは典型的なボーレートではなく、avrdude またはシリアルポートがサポートしている可能性があります。

第三; ISP プログラマ経由でアップロードすることにより、ブートロードを使用しないでください。


同様に、別の F_CPU を搭載したボードを作成する予定でしたが、実際には同じ速度のカスタム ボードしか作成しませんでした。あなたの場合、上記が実際に機能するかどうか知りたいです。

于 2014-01-01T16:08:16.807 に答える