K3NG Arduino CW KeyerをなんとかATmega168Pで動かそうと検討していましたが、keyer_features_and_options.hで機能を限定しても16KBの壁をクリアすることができませんでした。
スケッチを解析して使用しない機能を削れば実現できそうですが、複雑な内部構造のため断念していました。
一方arduino IDEの環境も年々進歩しており、arduino-0023、arduino-1.0、arduino-1.0.5-r2、arduino-1.6.3の4種類をライブラリなどの環境により使い分けています。
先日 Arduino IDE 1.6.3でK3NG Arduino CW Keyerの機能を限定してコンパイルエラーしてみたところ、下のように16KBの壁に肉薄していました。
--
スケッチが プログラムストレージ領域の 15,726バイト (51%) を使用しています。最大は 30,720バイト です
--
コンパイラも進歩しているようで、サイズもだいぶ小さくなってきました。
プロセッサをATMega168Pに変更してコンパイルしたところ、コンパイルサイズは変わりませんが、ATMega168Pに書き込むことができません。
--
スケッチが プログラムストレージ領域の 15,726バイト (109%) を使用しています。最大は 14,336バイト です
--
ブートローダー無しで書き込めば、ブートローダーの分だけ余裕ができるので、書き込めそうです。
そこで、ブートローダー無しで書き込みできる環境が整っている Arduino IDE arduino-1.0.5-r2でコンパイルしたところ、コンパイルサイズが少しオーバーして書き込めそうにありません。
--
コンパイル後のスケッチのサイズ:17,190バイト(最大容量32,768バイト)
--
Arduino IDE 1.6.3環境でArduino as ISPを使用してブートローダー無しで書き込む方法を探してみました。
tadfmacさんのサイトでArduino 1.6でATTiny85やATTiny44を開発できるようにしてみるの記事を見つけて設定してみました。
ようやく、ATmega168P/Int.8MHzでコンパイルできるようになり、思惑通りサイズ内に収まっています。
--
スケッチが プログラムストレージ領域の 15,730バイト (96%) を使用しています。最大は 16,384バイト です。
--
あとはArduino as ISPで書き込むだけですが、upload.toolが見つからないとのエラーで書き込むことができません。
何か設定が足りないようで、Arduino IDE 1.6.3環境でArduino as ISPを使用してブートローダー無しで書き込む方法は断念しました。
とはいうもののArduino IDE 1.6.3環境でコンパイルできるようになったので、hexファイルができているハズなので、これをAVRライターで書き込めば良さそうです。
最近はAVRライターとしてはArduino as ISPしか使用していなので、コマンドラインからavrdude.exeを使用して書き込む方法を探してみました。
しなぷすさんのArduinoISPを汎用AVRライタとして使う(1)に詳細な手順が掲載されています。
avrdude.exeはWinAVRのものを使うようですが、実績のあるArduino IDE arduino-1.0.5-r2から入手しました。
試してみた結果、avrdude.conf、avrdude.exe、libusb0.dllの3つのファイルを任意のフォルダーにコピーすれば動作しました。
コマンドラインで動作するので、バッチファイルを作っておけば毎回同じ設定で動作するので、便利です。
さてArduino IDE 1.6.3環境で作成されたHexファイルですが、コンパイルの最後に一時ファイルの場所が表示されます。
--
F:\arduino-1.6.3\hardware\tools\avr/bin/avr-objcopy -O ihex -R .eeprom C:\Users\wkn\AppData\Local\Temp\build6802101246601032149.tmp/k3ng_keyer.cpp.elf C:\Users\wkn\AppData\Local\Temp\build6802101246601032149.tmp/k3ng_keyer.cpp.hex
--
ここのhexファイルをコピーして使用すればOKです。
Tempフォルダには大量の一時ファイルが残っていたので、消しておきました。
ちなみにArduino IDE 1.7以降は自動的に削除されるようです。
というわけで、ATmega168PでK3NG Arduino CW Keyerが動作するようになりました。
ベースは2.2.2015101801で、以下の機能のみを実装しました。
#define FEATURE_COMMAND_BUTTONS
#define OPTION_PROG_MEM_TRIM_TRAILING_SPACES
#define OPTION_DIT_PADDLE_NO_SEND_ON_MEM_RPT
まだ動作確認をしていませんが、FEATURE_SLEEPを追加してもギリギリ行けそうです。
--
スケッチが プログラムストレージ領域の 16,264バイト (99%) を使用しています。最大は 16,384バイト です
--
FEATURE_POTENTIOMETERの追加は98%でOKでしたが、FEATURE_SLEEPを追加したらオーバーしたので、どちらか一方しか追加できません。
--
スケッチが プログラムストレージ領域の 16,198バイト (98%) を使用しています。最大は 16,384バイト です。
--
スケッチを解析して使用しない機能を削れば実現できそうですが、複雑な内部構造のため断念していました。
一方arduino IDEの環境も年々進歩しており、arduino-0023、arduino-1.0、arduino-1.0.5-r2、arduino-1.6.3の4種類をライブラリなどの環境により使い分けています。
先日 Arduino IDE 1.6.3でK3NG Arduino CW Keyerの機能を限定してコンパイルエラーしてみたところ、下のように16KBの壁に肉薄していました。
--
スケッチが プログラムストレージ領域の 15,726バイト (51%) を使用しています。最大は 30,720バイト です
--
コンパイラも進歩しているようで、サイズもだいぶ小さくなってきました。
プロセッサをATMega168Pに変更してコンパイルしたところ、コンパイルサイズは変わりませんが、ATMega168Pに書き込むことができません。
--
スケッチが プログラムストレージ領域の 15,726バイト (109%) を使用しています。最大は 14,336バイト です
--
ブートローダー無しで書き込めば、ブートローダーの分だけ余裕ができるので、書き込めそうです。
そこで、ブートローダー無しで書き込みできる環境が整っている Arduino IDE arduino-1.0.5-r2でコンパイルしたところ、コンパイルサイズが少しオーバーして書き込めそうにありません。
--
コンパイル後のスケッチのサイズ:17,190バイト(最大容量32,768バイト)
--
Arduino IDE 1.6.3環境でArduino as ISPを使用してブートローダー無しで書き込む方法を探してみました。
tadfmacさんのサイトでArduino 1.6でATTiny85やATTiny44を開発できるようにしてみるの記事を見つけて設定してみました。
ようやく、ATmega168P/Int.8MHzでコンパイルできるようになり、思惑通りサイズ内に収まっています。
--
スケッチが プログラムストレージ領域の 15,730バイト (96%) を使用しています。最大は 16,384バイト です。
--
あとはArduino as ISPで書き込むだけですが、upload.toolが見つからないとのエラーで書き込むことができません。
何か設定が足りないようで、Arduino IDE 1.6.3環境でArduino as ISPを使用してブートローダー無しで書き込む方法は断念しました。
とはいうもののArduino IDE 1.6.3環境でコンパイルできるようになったので、hexファイルができているハズなので、これをAVRライターで書き込めば良さそうです。
最近はAVRライターとしてはArduino as ISPしか使用していなので、コマンドラインからavrdude.exeを使用して書き込む方法を探してみました。
しなぷすさんのArduinoISPを汎用AVRライタとして使う(1)に詳細な手順が掲載されています。
avrdude.exeはWinAVRのものを使うようですが、実績のあるArduino IDE arduino-1.0.5-r2から入手しました。
試してみた結果、avrdude.conf、avrdude.exe、libusb0.dllの3つのファイルを任意のフォルダーにコピーすれば動作しました。
コマンドラインで動作するので、バッチファイルを作っておけば毎回同じ設定で動作するので、便利です。
さてArduino IDE 1.6.3環境で作成されたHexファイルですが、コンパイルの最後に一時ファイルの場所が表示されます。
--
F:\arduino-1.6.3\hardware\tools\avr/bin/avr-objcopy -O ihex -R .eeprom C:\Users\wkn\AppData\Local\Temp\build6802101246601032149.tmp/k3ng_keyer.cpp.elf C:\Users\wkn\AppData\Local\Temp\build6802101246601032149.tmp/k3ng_keyer.cpp.hex
--
ここのhexファイルをコピーして使用すればOKです。
Tempフォルダには大量の一時ファイルが残っていたので、消しておきました。
ちなみにArduino IDE 1.7以降は自動的に削除されるようです。
というわけで、ATmega168PでK3NG Arduino CW Keyerが動作するようになりました。
ベースは2.2.2015101801で、以下の機能のみを実装しました。
#define FEATURE_COMMAND_BUTTONS
#define OPTION_PROG_MEM_TRIM_TRAILING_SPACES
#define OPTION_DIT_PADDLE_NO_SEND_ON_MEM_RPT
まだ動作確認をしていませんが、FEATURE_SLEEPを追加してもギリギリ行けそうです。
--
スケッチが プログラムストレージ領域の 16,264バイト (99%) を使用しています。最大は 16,384バイト です
--
FEATURE_POTENTIOMETERの追加は98%でOKでしたが、FEATURE_SLEEPを追加したらオーバーしたので、どちらか一方しか追加できません。
--
スケッチが プログラムストレージ領域の 16,198バイト (98%) を使用しています。最大は 16,384バイト です。
--
※コメント投稿者のブログIDはブログ作成者のみに通知されます