なんでも作っちゃう、かも。

Arduino/Make/フィジカルコンピューティング/電子工作あたりで活動しています。スタバの空きカップを使ったスタバカップアンプなど製作。最近はもっぱらArduinoと3Dプリンタの自作に興味があります。

Arduinoで遊ぼう-AVRライタを使わないBootloaderの書き込み

Posted by arms22 on 2009年02月15日 19  0

今日はAVRライタを使わずにATmega168にBootloaderを書込む方法を教えるよ!

方法は2つ。



今日おすすめするのは2つ目のArduinoそのものをAVRライタに変えてしまう方法だ。


1.スケッチ

まずは次のURLからスケッチをダウンロードしてこよう。
http://www.arduino.cc/playground/uploads/Code/programmer2.txt

このスケッチはArduinoをAVR ISP programmerに変えるのと同時にBootloaderコピー機としても働く。スケッチにはATmega8、ATmega168用のBootloaderが組み込まれていて、Arduino IDEのSerial Monitorから、またArduino単体でもBootloaderのコピーを作ることができるんだ。

早速、スケッチをアップロードしてBootloaderを書込んでみよう!でもその前に1カ所だけスケッチを修正しておこう。

次のコードはSCKクロックパルスを生成するコードだ。クロックパルスの幅は1usに設定されている。けど実験した結果、1usの設定だと通信が安定しなかったので10usの幅に変更した。
#define PULSE_SCK(level)  { *sckport |= sckbit; delayMicroseconds(1); *sckport &= ~sckbit; delayMicroseconds(1); }

次のようにdelayMicroseconds関数の引数を10にかえる。
#define PULSE_SCK(level)  { *sckport |= sckbit; delayMicroseconds(10); *sckport &= ~sckbit; delayMicroseconds(10); }


スケッチを修正したらVerifyしてUpload to I/O Boardだ。


2.接続
ArduinoとATmega168をこんな感じで接続!
arduino-atmega168-connect.png
pin10 - pin1 (Reset)
pin11 - pin17 (MOSI)
pin12 - pin18 (MISO)
pin13 - pin19 (SCK)
+5V - pin7 (Vcc)
GND - pin8 (GND)


3.Bootloaderの書き込み
Arduino IDEを立ち上げてSerial Monitorを開く。ボーレートは19200 baudに設定する。まず"*s"と入力して送信。ArduinoとATmega168は正しく接続されていれば次のような表示がでるはずだ。
SIGNATURES1e,94,06,ff,
次に"*A"とコマンドを入力して送信。
Writing mega48/88/168 fuses: extended=11111000high=11011111, low=11101111... (2k bootloader at reset, 1xcrystal clock) done.
これでFuseビットの書き込みが完了する。

最後に"*a"とコマンドを入力して送信。
Erase chip... 00... done.
Installing atmega168 serial bootloader at 1C00... ... done.
チップが消去されて、Bootloaderの書き込みが行われる。


色々、Bootloaderの書き込み方法があるけど、これが一番簡単だね!



Making Things Talk -Arduinoで作る「会話」するモノたち
Tom Igoe
オライリージャパン
売り上げランキング: 6278
価格: ¥ 3,990




Ads by Google

-19 Comments

says..."管理人のみ閲覧できます"
このコメントは管理人のみ閲覧できます
2009.04.28 22:12 | | # [edit]
arms22 says...""
ブートローダが書き込まれているArduino(ATmega168)に対しては、通常Arduinoソフトウェア(IDE)でユーザプログラムを書き込むことができます。
ブートローダを書き込まずユーザプログラムを書き込むには、通常AVRライタなどを用いて書き込むことになると思います。
2009.04.29 18:21 | URL | #- [edit]
says..."管理人のみ閲覧できます"
このコメントは管理人のみ閲覧できます
2009.04.30 02:12 | | # [edit]
says..."管理人のみ閲覧できます"
このコメントは管理人のみ閲覧できます
2009.07.13 23:32 | | # [edit]
arms22 says..."Re: プログラムの書き込みができません"
こんばんわarms22です。
返事が遅れてすみません。。

表題の件ですが、Bootloaderの書き込みに成功しているなら、
スケッチ(プログラム)の書き込みにライタ(avrdude)は必要ありません。

サンプルプログラムのBlinkというのはArduino IDEのサンプルだと思いますが、
BlinkをArduino IDEで開いたら左上の三角のボタン(Verify)を押して、
コンパイルします。コンパイルが完了したら、右の方のUpload to I/O Boardボタンを
押してください。プログラムがAtmegaに書き込まれます。
書き込みが終わると自動的にプログラムが走り出します。
2009.07.18 22:18 | URL | #- [edit]
arms22 says..."No title"
ごめんなさい、色々勘違いしてました。

http://www.vector-scan.com/ws/2009/07/atm.php

の回路図を見ると内部発信器を利用しているようです。
Boot-Clonerの"*aA"コマンドで書き込まれるFuseビットの設定は
外部クロックになっていると思います。

Boot-ClonerのFuse_Arduino_Style関数を修正して内蔵クロック用の設定に書き換えてためしてみてください。
2009.07.19 11:09 | URL | #j7sy4omY [edit]
96 says..."atmega168p"
秋月で販売されるようになったATMEGA168Pにブートローダーを書込もうといろいろ試してみましたが、結局WinでFDTI bitbangを使ってやる以外では成功しませんでした。
SIGNATUREがATMEGA168は「SIGNATURES1e,94,06,ff,」となるところでATMEGA168Pだと「SIGNATURES1e,94,0b,ff,」となるのです。

スケッチを弄って誤摩化してみようとしましたがダメでした。
なにかわかりませんか?
2009.09.17 12:14 | URL | #w8htRwn6 [edit]
arms22 says..."No title"
SIGNATUREの違いだけみたいですし書き込めそうですが、
具体的にどのあたりで失敗しているのでしょうか?
2009.09.17 20:27 | URL | #j7sy4omY [edit]
96 says..."atmega168p"
*Aを送ったところで
"Unknown device type. Failed."
とエラーが出てそれ以上何も出来ませんでした。
2009.09.18 23:52 | URL | #w8htRwn6 [edit]
arms22 says..."No title"
programmer2.txtのatmega168のシグネチャを168pのシグネチャに書き換えて試してみてください。何となくこれでいけそうな気がします。

enum { atunknown=0, atmega8=0x7, atmega48=0x5, atmega88=0xa, atmega168=0x6 };

enum { atunknown=0, atmega8=0x7, atmega48=0x5, atmega88=0xa, atmega168=0xb };
2009.09.19 10:08 | URL | #j7sy4omY [edit]
wa! says..."すばらしいです"
Arduino初心者です。
難しそうですが、やってみたいです。
すばらしい情報ありがとうございました。
2010.02.23 14:07 | URL | #EBUSheBA [edit]
says..."凄いですな"
ちなみにこれのatmega328版とか出てないのでしょうか
2011.03.08 23:54 | URL | #- [edit]
arms22 says..."Re: 凄いですな"
atmega328版はなかったような。。
シグネチャの対応とスケッチの中のバイナリを差し替えればできそうですけどね。
今はArduino ISPというスケッチがIDEについてくるのでそれを使うのが簡単でいいですよ。
mega以外のAVRマイコンにも書き込めますし。

この辺が大変参考になります。

http://www.geocities.co.jp/arduino_diecimila/use/attiny.html
http://n.mtng.org/ele/arduino/ArduinoISP.html
2011.03.09 09:22 | URL | #- [edit]
says..."Re: Re: 凄いですな"
ご回答ありがとうございます。
それにしても色々できるものなのですねぇ

すごいなぁ
2011.03.09 19:50 | URL | #- [edit]
Sekine says..."3.3V対応"
ごぶさたしています。
Portabeeのときはお世話になりました。
あれからさらに香港からHuxleyの部品を取り寄せ、もう1台作りました。
こちらはトラブルも無く精度も高い物になりました。

最近、「Arduinoはじめました」
spikenzielabsの電卓を購入したのがきっかけです。
よくできているなぁと思って調べてみたら、3.3VのAVRで内蔵クロックブートローダーのArduinoでした。
スケッチが公開されているし、回路もわかっているので、作りたいなぁと思ったのですが。
普通のArduinoで書き込むと外部クロックの5V版になってしまうので、スイッチサイエンスのブレッドボードArduino(互換機)キットを
使えば内蔵クロック版ブートローダーのAVRにスケッチが焼けそうです。(ブートローダー書き込み済みのAVRが必要)
しかし、これだとキットの電源に3.3V切替があるようですが、内蔵クロックブートローダーの3.3VのVARを用意しないといけないことになりますが
そういうのが無ければやはり3.3VのAVRにブートローダーの書き込みをする方法を考えないといけないです。
Arduionoを始めようキットは持っているので、それにブレッドボードに配線すれば、おっしゃるようにブートローダーは書き込めますが、
3.3V用のAVRに書き込むには電圧変換を間に入れないといけないですよね。

長文になりましたが、ご意見をお聞かせください。
2014.07.20 07:41 | URL | #azLqDgeY [edit]
arms22 says..."No title"
ターゲットに書き込むときの電源は5Vでもいいと思うよ。
つまりターゲット基板にAVRを接続するまえにブートローダを書き込んでおけばOK。
3.3V版って言っているのはたぶん内蔵8MHzで動かすってだけなので、別に5Vで動かしても問題ない。
2014.07.22 12:08 | URL | #j7sy4omY [edit]
Sekine says..."ATMega328P内蔵クロックブートローダー"
こんにちは.
お世話になります。

先日の続きです。
Arduino Uno+ブレッドボードで書き込み器用の配線をして、IDEの設定を書き込み器Arduino as ISP とし、ファイルメニューから
スケッチの例→ArduinoISPを読み出し、Arduinoへ書き込みました。

内蔵クロックブートローダー付きのATMega328Pをブレッドボードに装着。
スケッチを読み込み、ファイルメニューの「書き込み装置を使って書き込む」を使って書き込むと正常に書き込まれました。(書き込み完了と表示されていますが、本当に書き込まれたかどうかは未確認です。)

さて、ATMega328P内蔵クロック用ブートローダーの書き込みはどのようにすればよいでしょうか。。。
一応IDEにはブートローダー書き込みメニューはありますが、何も選択肢が無いので、外部クロック用ブートローダーが書き込まれてしまうみたいですが。

2014.08.10 07:45 | URL | #- [edit]
arms22 says..."No title"
IDEの中にあるhardware.txtに新しいボードを追加.
構成がい一番ちかいボードの設定をコピーして、ヒューズビットの値を内臓クロックをしようするようにしたら良いよ。
ヒューズビットの意味はマイコンによって違うから気をつけてね。
たぶん昔のリリパッドは内臓クロックだったと思う。
328pのリリパッドあったかな?
2014.08.11 09:08 | URL | #j7sy4omY [edit]
Sekine says..."ATMega328P内蔵クロック用bootloaderの書き込み"
ずいぶん前の話で恐縮です。

生のATMega328Pに内蔵クロック用ブートローダーの書き込みができるようになりました。
方法は以下。

---------------------------------------------------------------
UNO+ブレッドボードを用意します。

配線をする前にArduino UNOにISPを書き込む。
(ファイル⇒スケッチの例⇒ArduinoISP)

配線をする。
ブレッドボードに新品のATMega328Pを接続
Arduino UNOのReset端子を120Ωで+5Vに接続

新品のATMega328Pの電源(Vcc2箇所、GND2箇所)をArduinoUNOのVcc,GNDに接続。

ArduinoUNOの10, 11, 12, 13ををそれぞれ新品のATMega328Pの1, 17, 18, 19に接続

新品のATMega328Pの9, 10をセラロック(コンデンサ付き)の3本の両端とつなぎ、
3本の中央の端子はGNDに接続する。


ツール⇒書き込み装置はArduino UNOとし、
ツール⇒マイコンボードは書き込みたい形式(例えばATMega328P on a bread board(8MHz internal clock))
を選択。

ツール⇒ブートローダーを書き込む。

1分ほど待つと完了します。
---------------------------------------------------------------




2014.10.19 11:12 | URL | #- [edit]

Leave a reply






管理者にだけ表示を許可する

該当の記事は見つかりませんでした。
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。