arduino:writer

Arduino Writer

Arduino as ISPとして書き込むための情報まとめページです。Arduinoのバージョン違いで動作したりしなかったりするので、このページを参照して書き込みを行う際は必ず同じ環境で構築するようお願いします。

  • 利用するArduinoは必ず 1.8.5 もしくはそれ以下を利用してください。1.8.6以上はコンパイラが変わっておりそのせいで裸の328への書き込みがうまく言っていないことが報告されています。
  • その後1.9.0-betaの登場によって、1.9.0でも動作を確認しました。

ArduinoはAVRマイコンからなる汎用IOボードになります.つまり例えば Arduino Unoでは,AVRマイコンは328Pという種類で,これは外部クロック(16MHz)で動作し,シリアル通信用チップも ボード上に組み込まれています.おおよそArduino一台で3,000円程度となります.普段のプロトタイピングにおいて, このような汎用IOボードを利用するのは,お手軽でよいのですが,実際に量産とまでいかなくとも50,100個といった具合に 設計した回路を作る場合,毎回Arduino汎用ボードを利用していては,回路やスペースを無駄にするだけでなく,金額も 大きく異なってきます.例えばArduinoを利用して100個のプロトタイプを作るとします.その一つ一つにArduinoを利用すると 単純計算でも100×3,000=30万円ですが,これをATMEGA328P(250円)と外部クロック(40円)で動作させると100×290=29,000円と 約10分の一まで価格を下げることができます.もちろん電源回路やちょっとゴマふったりと,もう少しお金がかかる部分がある かもしれませんが,価格が大きく下がるのはわかると思います.

ATMEGA328P以外にもATINY85等を利用すれば,もっと小型で価格を抑えてプロトタイプを作成できます. が,メモリ領域が少なかったり,ピン本数が足りなかったりしがちなので,こういった作業に慣れてから,別のAVRマイコンを 試してみることをお薦めします.このページではATMEGA328とAtiny85を利用して書き込みを行います. 非常に小さなプロトタイピングを考えている場合はATINY85を,少しスペースに余裕がある場合は ATMEGA328を使いましょう.

このページでは,Arduino Duemilanove/Nanoを利用して,AVRマイコンATMEGA328PをArduinoボード上でなく,ブレッド上で 単独動作させるやり方をまとめておきます.Arduino Unoを利用することもできますが,一度ブートローダーを書き換える必要 があるため,Duemilanoveを利用したほうが間違いないです.

なおこのページでは書き込み機も自作していますが、DIPを書き込みだけであればaitendoが出している下記が安くておすすめです。

Arduino Uno等の汎用IOボードは実行時の信頼性を考慮し,外部クロックを利用しています. しかし,一般的なPICやAVRといったマイコンは大概内部クロックを持っており,それを利用 することで,外部発信装置を利用せずに,最小構成でプロトタイプをつくることができます. まずは下記を用意してください.

  1. AVRマイコンATMEGA328P-PU(Arduinoから取り外して使用してはダメです.新品は秋月で買えます.)
  2. Arduino Duemilanove
  3. ブレッドボード,ジャンパー線
  4. 110-124オームの抵抗(今回は120Ωの抵抗にします)

1. Arduino DuemilanoveにArduino As ISPのプログラムを書き込む

まずはArduinoとPCを接続し,Arduinoメニューの「ファイル」→「スケッチブックの例」からArduinoISPを選択し,それをArduino Duemilanoveに書き込みます

2. ブレッドボード上に下記回路図を作成する.(抵抗:120Ω,LEDに抵抗付けたい人はどうぞ)

3. Arduinoメニューの「ツール」→「マイコンボード」から「ATMEGA328P/Int.8MHz」を選択,「ツール」→「書込装置」から 「Arduino as ISP」を選択

初期設定状態だと,上記の「ATMEGA328/Int.8MHz」がマイコンボード一覧にはありません. そこで From Arduino to a Microcontroller on a Breadboard を参照して,BreadBoard.zipの中身をダウンロードし,マイコンボード一覧に追加します.追加後は Arduinoを再起動して下さい.追加の仕方はそのサイトを参照してください.

4. Arduinoで新規ファイルを作成し,下記プログラムをペーストする

Arduinoメニューの「ツール」→「マイコンボード」から「ATMEGA328P/Int.8MHz」を選択,「ツール」→「書込装置」から 「Arduino as ISP」を選択を再度確認してください.

int led = 0;
void setup() {                
  pinMode(led, OUTPUT);     
}

void loop() {
  digitalWrite(led, HIGH);   
  delay(1000);               
  digitalWrite(led, LOW);    
  delay(1000);               
}

5. Arduinoメニューの「ファイル」→「書込装置を使って書込み」を選択し,ATMEGA328Pにプログラムを書き込む

LEDが8秒間隔くらいで点滅したらうまく動作しています.プログラムでは1秒間隔のはずですが, このようになるのは,ここまでの状態でATMEGA328が1MHzで動作しているためです.そこで次の手順で 8MHzで動作するようにします.

6. Arduinoメニュー→「ツール」→「ブートローダーを書き込む」を実行し,書込み終わったあと,再度同様の 点滅プログラムを「書込み装置を使って書込み」から実行する

1秒間隔で実行されればOKです.お疲れ様でした.

7. 最後に書き込み終わった328Pをブレッドボードから取り出し,電源とLEDの回路だけで動作するかも 確認してみましょう

なお,3.3V以下でマイコンを動作させる場合,ピン上のすべてのVCC, GNDピンに電源とグランドをつなげるようにしてください.ATMEGA328だと一箇所のVCC供給では動かないことがありました

上記内蔵クロックがお手軽ですが、長期間運営するシステムの一部にマイコンを入れる場合や、動作の信頼性を重要視したい場合、通常は外部クロック(水晶振動子やセラロック等)を載せた状態で書込みを行います。このセクションではその手順を紹介します。先程hardwareにinternal clock 8MHzの328を追加したかと思いますが、今回は外部クロック動作での328になります。そこで、「シナプスのハード製作記」(https://synapse.kyoto/tips/bootloader_ATmega88/page001.html)に記載されている、「5.Arduino IDEにATmega88/88V/168P/328P用のブートローダを登録する方法」を参照して、マイコンボードに追加します。このページでは、(https://synapse.kyoto/zip/ATmega88_168P_328P_100.zip)を利用します。

書込みの手順は上記を参照してください。接続方法は下記の図のとおりです。

  • arduino/writer.txt
  • 最終更新: 2019/10/15 01:13
  • by baba