ATmega328Pのfuse
ATmega328P用のブートローダー作成方法†
(1)改造:以下のファイルを少しだけ編集
- arduino-0017/hardware/bootloaders/atmega/Makefile
#atmega328: CFLAGS += '-DMAX_TIME_COUNT=F_CPU>>4' '-DNUM_LED_FLASHES=1' -DBAUD_RATE=57600 atmega328: CFLAGS += '-DMAX_TIME_COUNT=F_CPU>>3' '-DNUM_LED_FLASHES=1' -DBAUD_RATE=57600
- つまり、MAX_TIME_COUNTをオリジナルの2倍にします。
(2)Make
- avr-gccのPATHを追加してmakeします。
D:> set PATH=%PATH%;D:\arduino-0017\hardware\tools\avr\bin;D:\arduino-0017\hardware\tools\avr\utils\bin D:> cd \arduino-0017\hardware\bootloaders\atmega D:> make clean D:> make atmega328
(3)出来たHEXをhidaspxでATmega328Pに焼きます。
- w.bat
hidspx ATmegaBOOT_168_atmega328.hex hidspx -fl11111111 hidspx -fh11011010 hidspx -fx101
- これで、Arduino400風のUSB-PIC経由によるArduino互換機でスケッチのuploadが可能になりました。
応用†
- AVRチップにATmega88やATmega168を使用する場合にも、
- MAX_TIME_COUNTの値を調整することでRESET後のタイムアウト時間(アプリ起動までのブート待機時間)を短くすることが出来るようです。
- (FT232RLの)DTR#とAVRのRESET間の0.1uFコンデンサと、RESETプルアップ抵抗(10kΩ)、それからRTSが接続されている場合はその抵抗(コンデンサ?)などの合成によるリセット時定数の違いにより、リセット後のスケッチ書き込みがうまくいかないときは
- Makefileの'-DMAX_TIME_COUNT='の項を調整してみてください。
ATmega328Pのfuseに関する驚愕の事実!†
ATmega328PのfuseビットはATmega88P/168Pと異なっています。
- 拡張fuseのbit2:0と、High fuseのbit2:0が、(mega168Pと比べると)入れ替わっています。