workshop/ArduinoAsISP/main

Arduino Duemilanove/Nanoを利用してAVRマイコン328P/Atiny85へ書き込みを行う

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

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

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

内蔵クロック(8MHz)で書き込む(Arduino Duemilanove/UNO編)

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

  1. AVRマイコンATMEGA328P-PU(Arduinoから取り外して使用してはダメです.新品は秋月で買えます.)
  2. Arduino Duemilanove
  3. ブレッドボード,ジャンパー線
  4. 110-124オームの抵抗(今回は120Ωの抵抗にします)
手順
  1. Arduino DuemilanoveにArduino As ISPのプログラムを書き込む
  2. まずはArduinoとPCを接続し,Arduinoメニューの「ファイル」→「スケッチブックの例」から ArduinoISPを選択し,それをArduino Duemilanoveに書き込みます

  3. ブレッドボード上に下記回路図を作成する.(抵抗:120Ω,LEDに抵抗付けたい人はどうぞ)
  4. Arduinoメニューの「ツール」→「マイコンボード」から「ATMEGA328P/Int.8MHz」を選択,「ツール」→「書込装置」から 「Arduino as ISP」を選択
  5. 初期設定状態だと,上記の「ATMEGA328/Int.8MHz」がマイコンボード一覧にはありません. そこで From Arduino to a Microcontroller on a Breadboard を参照して,BreadBoard.zipの中身をダウンロードし,マイコンボード一覧に追加します.追加後は Arduinoを再起動して下さい.追加の仕方はそのサイトを参照してください.

  6. Arduinoで新規ファイルを作成し,下記プログラムをペーストする
  7. 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);               
    }
    

  8. Arduinoメニューの「ファイル」→「書込装置を使って書込み」を選択し,ATMEGA328Pにプログラムを書き込む
  9. LEDが8秒間隔くらいで点滅したらうまく動作しています.プログラムでは1秒間隔のはずですが, このようになるのは,ここまでの状態でATMEGA328が1MHzで動作しているためです.そこで次の手順で 8MHzで動作するようにします.

  10. Arduinoメニュー→「ツール」→「ブートローダーを書き込む」を実行し,書込み終わったあと,再度同様の 点滅プログラムを「書込み装置を使って書込み」から実行する.
  11. 1秒間隔で実行されればOKです.お疲れ様でした.

  12. 最後に書き込み終わった328Pをブレッドボードから取り出し,電源とLEDの回路だけで動作するかも 確認してみましょう.なお,3.3V以下でマイコンを動作させる場合,ピン上のすべてのVCC, GNDピンに電源とグランドをつなげるようにしてください.ATMEGA328だと一箇所のVCC供給では動かないことがありました

Nanoで書き込み用ブレッドボードを作る

Arduino DuemilanoveでATMEGA328Pへ書込みが出来るようになりました.ただ,現状では ジャンパー線が邪魔だったり少し場所をとってしまいます.上記手順をまるまるArduino Nanoでも 実践できるので,こっちで作っておけば,手元にAVR書き込み機として活用できます.下記の左がDuemilanoveで 構成したもの,右がNanoで構成したものです.

左がDuemilanove, 右がNano

外部クロック(16MHz)で書き込む

これから確認する. Arduinoブートローダを書き込んでいないAVRマイコンの場合は,Arduino基板に差し込んで書き込むことはできないので, 内蔵クロック同様の回路に16MHzのセラロックを追加する

まずは下記を用意してください.セラミック発振子は,公式サイトでは水晶発振子とコンデンサを利用して いますが,それらをまとめた部品です

  1. AVRマイコンATMEGA328P-PU(秋月で買えます)
  2. セラミック発振子(セラロック)コンデンサ内蔵タイプ 16MHz(秋月で買えます)
  3. Arduino Duemilanove
  4. ブレッドボード,ジャンパー線
  5. 110-124オームの抵抗
  • 参考サイト:From Arduino to a Microcontroller on a Breadboard
  • 外部発信としてセラロックを利用した例:http://myboom.mkch.net/modules/pukiwiki/160.html
  • AVRのFuse設定を計算するサイト:http://www.engbedded.com/fusecalc

参考サイトでは,内蔵クロックと外部クロックの両方を紹介しています.どちらを利用するかですが,初めてやって見る場合は,外部クロックで書き込みを行ってみること からスタートしてください.書き込みに失敗したり,新品でないAVRマイコンを利用する場合,外部クロックがないとそれだけで プログラムの書き込みができなくなるためです.つまり16MHzのセラロックを利用するということです.

セラロック(16MHz)を追加して,AVRライタを作成

上記画像が完成品です.ブレッドボードだと何度もマイコンを差し替えていると差込口がゆるくなってしまうので, ゼロプレッシャーソケットと呼ばれる,簡易に取り外し可能なマイコン用ソケットを利用します.また,外部クロックで 動作書き込みがされているAVRも書き込めるようにセラロックも追加しました.画像だとソケットに隠れてみえませんが,

ATINY85にプログラムを書き込む

では今度は同じ要領でATINY85にプログラムを書き込んでみましょう.下のブレッドボード図にある通り,28PinのATMEGA328と比較して 非常に小型のマイコンであるのがわかります.上記接続を行い,同じ手順で書き込みを行えばOKです.


Copyright (c) 2015 Tetsuaki BABA all rights reserved.