ワークショップ・ねぶりん

開発したものとか。

ハードウェアの準備

Atmel Studio 7.0で行うAVR開発の一連の記事では、MCUとしてATmega328P-PU(PDIP-28)を用います。理由は単純で、Arduino Uno等で広く使われているので、MCUの機能を理解する事が、他のAVRよりも早いと思われるからです。加えて価格も入手性も全く問題が無く、地方の方でも通販で簡単に入手する事が出来ます。価格が安いという事は、例え実験で破壊したとしても、あまりダメージを受けない、という事です。学習に失敗は付き物で失敗はする物、という気持ちで気楽に扱いたいと思います。

しかし、Arduinoでもそうでしたが、実験でFlash ROMEEPROMを頻繁に書き換えると、書き換え上限(ATmega328Pでは、データシートによるとFlashが1万回、EEPROMが10万回)に達してしまった後の動作保証はありません。そこで、通常は出来る限りIDESimulatorを用います。実際にハードウェアを使わないといけない状況になった場合(例:シリアル通信を行う)に初めて、物理的なハードウェアを利用します。従って、最初の章の方ではSimulatorだけで事足りる事が多く、後半に進むに従ってSimulatorと用意したハードウェアの両方を使う事になります。そういった理由で、最初からハードウェア全てを、無理に準備する必要はありません。

  1. MCUボード

    MCUボードを用意する手段はいくつかあります。

    • 既存のMCUボード(orキット)を利用する

      ATmega328P-PUを用いたMCUボード(キット)は、探すと結構見つかります。ISPICSPとも言う。以下ISPで統一)の端子が付いていれば良いです。沢山あるので一例(私は使った事がありませんが)を挙げると、以下で買えると思います。

      秋月電子通商 -

      ATmega168/328マイコンボードキット

    • Arduino(or互換機)を流用する

      ATmega328P-PUが搭載されている入手性の良いArduinoは、Arduino Uno Rev.3と、その互換機となります。Arduino Uno Rev.3にはISP端子があるので問題ありません。互換機では、ISP端子はあったりなかったりします。これらは例を挙げるまでもなく、普通に通販で買えると思います。

      Caution: この選択肢を選んだ場合、Arduinoが用いるブートローダーを破壊してしまう事になります。よって元に戻す(Arduinoに)つもりがあるけれど、自分で戻す方法が判らないのであれば、この選択肢は諦めた方が良いと思います。

      Note: Arduino Uno Rev.3には、PCとのUSB-シリアル通信用にATmega16u2-MUが搭載されていて、こちらにもISP端子があります。間違えない様、注意が必要です。

    • 自作する

      これが一番融通が利く上に、自身の経験値も上がる、良い組み合わせだと思います。私は、自作を選びました。但し、保護回路等が全く追加されていないので、ちょっとした不注意で簡単に壊れてしまいます。が、壊れたら直せば(交換等)良いのです。

      下の写真が、ユニバーサル基板に自作した実験用MCUボードです。5V/16MHzで動作します。実験ボードなので、クロック回路・リセット回路(Arduinoとして使う場合の書き込み用)・電源On表示用LED回路・パスコンがあるだけで、後は端子と配線だけです。

    f:id:neb4nebrin:20181103170646p:plain
    自作MCUボード

    Arduino Uno Rev.3と並べると、これぐらいの大きさです。

    f:id:neb4nebrin:20181103170920p:plain
    Unoとの比較

    Note: 今になって考えると、水晶振動子をピンソケットに刺す形にすれば良かったと後悔しています。

  2. プログラマー

    MCUに対して、作成したプログラムやデータ等を書き込む装置です。Atmel純正のAVR ISP mkIIは、秋葉や通販で気軽に買えるとは言えません。Atmel純正のAtmel-ICEを利用する場合、32bitのAVRを扱うならともかく、ATmega328P-PUを扱うには高価で機能がオーバースペックです。従って、何とか他のプログラマーを探す必要があります。これは、あまり選択肢がありません。

    • AVR ISP mkII互換機を用いる

      IDEとは、最も親和性が高い組み合わせだと思います。Atmel純正品は入手性に難がありますが、互換機は探せばいくつか見つかります。が、中国製が多く、マニュアルが読めない等の問題もあります。私は使った事がありませんが、以下で買えるみたいです。

      千石電商 -

      Seeed Studio Atmel AVRISP2.0 STK500 USB ISPプログラマー

    • IDEと協調動作出来るプログラマーを用いる

      Atmelが発売したスターターキットに、STK500(廃番)がありました。このSTK500と同様の書き込み手順を用いるプログラマーは、IDEと協調動作が出来ます。このタイプは、あまり多くはありませんが、探すと見つかります。私もこのタイプを使っています。以下で買えます。

      スイッチサイエンス -

      Pololu USB AVRプログラマ v2.1

      Pololu USB AVRプログラマ v2 (廃番ですが、本記事で使っています)

      下の写真が、Pololu USB AVR Programmer v2です。意外と小さくて、びっくりしました。ISP用の端子に加えて、USB-シリアル変換用の端子も付いています。PololuのHPはこちら

      f:id:neb4nebrin:20181103171229p:plain
      Pololu USB AVR Programmer v2

  3. USB-シリアル変換アダプター

    以後、シリアル変換アダプターと記述します。Arduinoデバッグするのに、シリアル通信モニタを利用した方は多いと思います。IDEを用いた開発も同様で、MCUISPだけだと、デバッグするのが困難な場合が殆どかと思います。なので、なるべく早い段階でMCUUSART(シリアル通信)機能を学習し、デバッグモニタとして使える様にしたいと思います。これは、その時から利用します。Arduinoへの書き込み用を持っている方は、それをそのまま利用して下さい。それ以外用でも、USARTをカスタマイズすれば使えると思います。Arduino用は、探せばいくつも見つかりますが、動作電圧だけは注意して下さい。使用するMCUボードの電圧と合わせます。私が使っているタイプは、以下で買えます。

    スイッチサイエンス -

    FTDI USBシリアル変換アダプター(5V/3.3V切り替え機能付き)

    下の写真が、私の使っているアダプターです。3.3V/5Vの両対応なので、省電力運用するArduinoを扱うのにもピッタリです。

    f:id:neb4nebrin:20181103171413p:plain
    シリアル変換アダプター

ハードウェアが用意出来たら、次はIDE側でもハードウェアの準備をします。お使いのプログラマーに記載されている作業手順に従って、進めて下さい。

以下は、IDE側の準備を完了した後のAvailable Toolsウィンドウです。私の環境では、STK500(COM4) Program onlyと書かれている箇所が、プログラマーとなります。Simulatorは、最初から表示されています。

f:id:neb4nebrin:20181103171602p:plain
プログラマーの準備

このウィンドウが見当たらない場合は、以下の画像の様に、Available Atmel Toolsメニューを選択すると表示されます。

f:id:neb4nebrin:20181103171716p:plain
Available Toolsメニュー位置

シリアル変換アダプターは、IDE側では特に何も準備する必要はありません。

これでIDEとハードウェアの両方の準備が終わりましたので、双方を接続して簡単な接続テストをしてみましょう。

下は、私が自作したMCUボードをPololu USB AVR Programmer v2と接続し、スイッチサイエンス製シリアル変換アダプターから給電した写真です。当たり前ですが、プログラマーとシリアル変換アダプターは、PCとも接続しています。

f:id:neb4nebrin:20181103171842p:plain
MCUボードの接続

実はこのプログラマー、付属の設定ユーティリティーを使って、ターゲット(MCU)ボードへの電源供給を行う事が出来ます。が、自作したMCUボード側で、ISP端子・シリアル端子もしくはそれ以外のどの端子から給電するか?という選択機能がないので、自分でどこから給電するのか決めなくてはなりません。結論として、シリアル変換アダプターを接続しっぱなし(USARTを使わなくても)にして、常にここから給電する事としました。

ハードウェアを全て接続し、通電を確認したら、IDEAvailable Toolsウィンドウから、プログラマーを右クリックして表示されるメニューから、Device Programmingを選択します。

f:id:neb4nebrin:20181103172125p:plain
Device Programmingメニュー位置

すると、以下の様なDevice Programmingダイアログが表示されます。

f:id:neb4nebrin:20181103172248p:plain
Device Programmingダイアログ:初期状態

このダイアログのToolを、お使いのプログラマーに設定します。私の環境では、STK500(COM4) となります。DeviceATmega328Pで、InterfaceISPを指定します。

f:id:neb4nebrin:20181103172358p:plain
Device Programmingダイアログ:ツール指定

Applyボタンを押すと、プログラマー経由でMCUの情報を読み出し、ダイアログが以下の様になります。

f:id:neb4nebrin:20181103172616p:plain
Device Programmingダイアログ:Interface Settings

左のペインの選択を変える事で、このMCUの各種状態を知る事が出来ます。

f:id:neb4nebrin:20181103172742p:plain
Device Programmingダイアログ:Device Information

MCUを消去したり、FlashEEPROMに対するHexファイルの読み書きをしたり、

f:id:neb4nebrin:20181103172905p:plain
Device Programmingダイアログ:Memories

Fuseビットを読み書きしたり、

f:id:neb4nebrin:20181103173014p:plain
Device Programmingダイアログ:Fuses

Lockビットを読み書きしたり、

f:id:neb4nebrin:20181103173120p:plain
Device Programmingダイアログ:Lock Bits

ELFファイルの読み書きも出来ます。

f:id:neb4nebrin:20181103173218p:plain
Device Programmingダイアログ:Production File

もし上手く動かない場合は、プログラマーMCUボードに問題があると思います。まずは、プログラマーを接続したCOMポート番号(COMx)がWindowsで認識出来ているか?認識したCOMポート番号とIDEに設定したプログラマーのCOMポート番号が合っているか?を確認して下さい。Windowsで認識出来ていないならば、プログラマーを再インストールして下さい。COMポート番号が合っていないならば、IDEAvailable Toolsウィンドウ上でプログラマーを右クリックし、表示されたメニューからRemove(削除)して、再設定して下さい。それ以外ならば、それぞれの製品のFAQ等を読んで対処して下さい。

ここまで終われば、ソフトウェアとハードウェアの両方の基本的な準備は完了です。

2018/11/03


目次はこちら