//
表示中
モノづくり, Computer - コンピューター, Electronics - 電子工作

ATmega328PにArduino Unoを使ってブートローダーを書き込む


Arduino UnoをISP(In-System Programmer)として使い、ATmega328Pにブートローダーを書き込んでみます。これをやっておくとArduino UnoのATmega328Pが壊れた時の保険になりますし、最終的な電子デバイスを製作する時に不要な機能(オンボードのUSBシリアル変換機能、3.3V電圧の生成機能、LEDなど)を除いた小さなものを作れるようになります。

このページの”Burning the Bootloader”を参考にしてやってみます。

写真は上の大きいのArduino Uno、下の小さいのがArduino Unoに載っているものと同じマイクロコントローラーのAmtel ATmega328P-PU。これがArduino Unoの心臓部です。ブレッドボードを使ってブートローダーを書き込むので脚が出ているタイプが末尾にPUが付くものでブートローダーが書き込まれていないものを秋月電子さんから仕入れました。

IMG_2381

使用する部品は右からATmega328P、15MHzの水晶発信子、10KΩの抵抗、2.2pFのセラミックコンデンサー。抵抗が二つ写っていますが一つでいいです。

 部品名  数量  金額
 ATmega328P-PU  1  250円
 16MHz水晶発信子  1  30円
 10KΩ抵抗  1  1円(100個で100円)
 2.2pFセラミックコンデンサー  2  10円(10個で100円)
 その他ブレッドボードや配線材  必要なだけ  –
 合計  291円

IMG_2382

Arduino UnoにはArduino IDEを使って、スケッチの例からArduinoISPというスケッチを開き、コンパイル&フラッシュメモリへの書き込みを行っておきます。

次に冒頭の部分に記載したリンクに従って配線します。

IMG_2383

いよいよブートローダーの書き込みです。

Arduino IDEの「ツール」メニューから

「マイコンボード: “Arduino/Genuino Uno”」を選択。

「書き込み装置: “Arduino as ISP”」を選択。

そして「ブートローダを書き込み」を実行。

結果はこれ。失敗です。

Arduino:1.6.9 Hourly Build 2016/03/09 10:12 (Mac OS X), マイコンボード:”Arduino/Genuino Uno”/Applications/Arduino.app/Contents/Java/hardware/tools/avr/bin/avrdude -C/Applications/Arduino.app/Contents/Java/hardware/tools/avr/etc/avrdude.conf -v -patmega328p -cstk500v1 -P/dev/cu.usbmodem1411 -b19200 -e -Ulock:w:0x3F:m -Uefuse:w:0x05:m -Uhfuse:w:0xDE:m -Ulfuse:w:0xFF:m

avrdude: Version 6.0.1, compiled on Apr 14 2015 at 16:30:25
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007-2009 Joerg Wunsch

System wide configuration file is “/Applications/Arduino.app/Contents/Java/hardware/tools/avr/etc/avrdude.conf”
User configuration file is “/Users/ktsubaki/.avrduderc”
User configuration file does not exist or is not a regular file, skipping

Using Port               : /dev/cu.usbmodem1411
Using Programmer         : stk500v1
Overriding Baud Rate     : 19200
AVR Part                 : ATmega328P
Chip Erase delay         : 9000 us
PAGEL                    : PD7
BS2                      : PC2
RESET disposition        : dedicated
RETRY pulse              : SCK
serial program mode      : yes
parallel program mode    : yes
Timeout                  : 200
StabDelay                : 100
CmdexeDelay              : 25
SyncLoops                : 32
ByteDelay                : 0
PollIndex                : 3
PollValue                : 0x53
Memory Detail            :

Block Poll               Page                     Polled
Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW  ReadBack
———– —- —– —– —- —— —— —- —— —– —– ———
eeprom        65    20     4    0 no       1024    4      0  3600  3600 0xff 0xff
flash         65     6   128    0 yes     32768  128    256  4500  4500 0xff 0xff
lfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
hfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
efuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
lock           0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00
signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00

Programmer Type : STK500
Description     : Atmel STK500 Version 1.x firmware
Hardware Version: 2
Firmware Version: 1.18
Topcard         : Unknown
Vtarget         : 0.0 V
Varef           : 0.0 V
Oscillator      : Off
SCK period      : 0.1 us

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.02s

avrdude: Device signature = 0x000000 (retrying)

Reading | ################################################## | 100% 0.02s

avrdude: Device signature = 0x000000 (retrying)

ブートローダの書き込み中にエラーが発生しました。
Reading | ################################################## | 100% 0.02s

avrdude: Device signature = 0x000000
avrdude: Yikes! Invalid device signature.
Double check connections and try again, or use -F to override
this check.
avrdude done. Thank you.

「ファイル」メニューの「環境設定」から
「より詳細な情報を表示する:コンパイル」を有効にすると
より詳しい情報が表示されます。

 

原因を調べます。1時間くらい調べました。

上記エラーメッセージの最後の方に “Double check connections and try again, or user -F to override this check.”と出ています。「配線を確認してもう一度やってみろ」ということです。

我に帰って、確認しました。

ATmega328Pがブレッドボードにちゃんと挿さっていませんでした。笑

ATmega328Pを「カチッ!」と挿します。

やり直したらこの通りうまくできました。

avrdude: Version 6.0.1, compiled on Apr 14 2015 at 16:30:25
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007-2009 Joerg WunschSystem wide configuration file is “/Applications/Arduino.app/Contents/Java/hardware/tools/avr/etc/avrdude.conf”
User configuration file is “/Users/ktsubaki/.avrduderc”
User configuration file does not exist or is not a regular file, skippingUsing Port : /dev/cu.usbmodem1411
Using Programmer : stk500v1
Overriding Baud Rate : 19200
Writing | ################################################## | 100% 0.02savrdude: 1 bytes of lfuse written
avrdude: verifying lfuse memory against 0xFF:
avrdude: load data lfuse data from input file 0xFF:
avrdude: input file 0xFF contains 1 bytes
avrdude: reading on-chip lfuse data:Reading | ################################################## | 100% 0.01savrdude: verifying …
avrdude: 1 bytes of lfuse verifiedavrdude done. Thank you.AVR Part                : ATmega328P
Chip Erase delay        : 9000 us
PAGEL                   : PD7
BS2                     : PC2
RESET disposition       : dedicated
RETRY pulse             : SCK
serial program mode     : yes
parallel program mode   : yes
Timeout                 : 200
StabDelay               : 100
CmdexeDelay             : 25
SyncLoops               : 32
ByteDelay               : 0
PollIndex               : 3
PollValue               : 0x53
Memory Detail           :Block Poll               Page                      Polled
Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW  ReadBack
———– —- —– —– —- —— —— —- —— —– —– ———
eeprom        65    20     4    0 no       1024    4      0  3600  3600 0xff 0xff
flash         65     6   128    0 yes     32768  128    256  4500  4500 0xff 0xff
lfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
hfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
efuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
lock           0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00
signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00

Programmer Type : STK500
Description     : Atmel STK500 Version 1.x firmware
Hardware Version: 2
Firmware Version: 1.18
Topcard         : Unknown
Vtarget         : 0.0 V
Varef           : 0.0 V
Oscillator      : Off
SCK period      : 0.1 us

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.03s

avrdude: Device signature = 0x1e950f
avrdude: NOTE: “flash” memory has been specified, an erase cycle will be performed
To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file “/Applications/Arduino.app/Contents/Java/hardware/arduino/avr/bootloaders/optiboot/optiboot_atmega328.hex”
avrdude: writing flash (32768 bytes):

Writing | ################################################## | 100% 0.00s

avrdude: 32768 bytes of flash written
avrdude: verifying flash memory against /Applications/Arduino.app/Contents/Java/hardware/arduino/avr/bootloaders/optiboot/optiboot_atmega328.hex:
avrdude: load data flash data from input file /Applications/Arduino.app/Contents/Java/hardware/arduino/avr/bootloaders/optiboot/optiboot_atmega328.hex:
avrdude: input file /Applications/Arduino.app/Contents/Java/hardware/arduino/avr/bootloaders/optiboot/optiboot_atmega328.hex contains 32768 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 0.00s

avrdude: verifying …
avrdude: 32768 bytes of flash verified
avrdude: reading input file “0x0F”
avrdude: writing lock (1 bytes):

Writing | ################################################## | 100% 0.02s

avrdude: 1 bytes of lock written
avrdude: verifying lock memory against 0x0F:
avrdude: load data lock data from input file 0x0F:
avrdude: input file 0x0F contains 1 bytes
avrdude: reading on-chip lock data:

Reading | ################################################## | 100% 0.01s

avrdude: verifying …
avrdude: 1 bytes of lock verified

avrdude done. Thank you.

一番悪いのは自分。まずはそう考えようと思います。

これでArduino Unoに載っているのと同じ5V/16MHzで動作するマイクロコントローラーが手に入ったことになります。面白い!

kazz12211 について

Working as a OO programmer and enjoying music, bicycle and photography.

ディスカッション

コメントはまだありません。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

評価

ブログ統計

  • 562,221 ヒット

カテゴリー

アーカイブ

カレンダー

2016年4月
« 3月   5月 »
 12
3456789
10111213141516
17181920212223
24252627282930
%d人のブロガーが「いいね」をつけました。