ざっくりいうと
Arduino Nano互換機を使おうとしたら、うまく動作しなかったのですが、ブートローダーを書き込んだら、ちゃんと動作するようになりました。
書き込みには AVRISP mkII を使いました。
前置き
私はこれまで、AVRマイコンはよく使っていたのですが、Arduinoは使っていなかったのです。AVRマイコンは命令体系も素直だし、この規模のプログラミングで高級言語を使用するまでもないだろう、という判断です。でも、作業の効率化につながりそうだし、食わず嫌い的な面もあったかな、と反省し、Arduinoをいじってみることにしました。
それで、かなり昔になんとなく他の部品と一緒に買った Arduino Nano 互換機 があったので引っ張り出してきました。当時Amazonで380円で購入しました(中国からの配送)。今、AliExpressで同じようなのを買うと$2くらいですね。安い!
Arduino Nano 互換機が動かない
開発環境の Arduino IDE をインストールし、適当なスケッチを書いて、USBに接続して、書き込みをしてみたのですが、書き込みに失敗してしまいました。
安い Arduino互換機 はブートローダーがちゃんと書き込まれていないことがある、という話を目にしたことがあったため、ブートローダーを書き込んでみることにします。
AVRISP mkII で書き込む
私は AVRISP mkII というライターを持っているので、それで書き込んでみました。
接続は↑のようにします。ちなみに、AVRISP mkII の Vccピンは「電源を供給する端子」ではなく、「電源が供給されているか確認する端子」になっています。私はGNDと+5Vを引き出しているので、それを電源に使っています。スイッチを追加して内部で Vccピン と +5V を接続できるように改造するのも便利だと思います。
最初に Arduino IDE でブートローダーを書き込もうとしてみました。「ツール → 書き込み装置」を「AVRISP mkII」にして、「ツール → ブートローダー書き込み」を実行…で、失敗しました。理由はわかりません。
次に Atmel Studio から書き込んでみます。「Tools → Device Programming」で Device Programming ウィンドウを開きます。
Tool/Device/Intrerface を、それぞれ、AVRISP mkII/ATmega328P/ISP にして、「Apply」ボタンを押します。
高性能なブートローダーである optiboot を書き込みます。「Memories」タブの Flashセクション で、Arduino IDEのインストールフォルダ内にある、ブートローダーの hex ファイル「optiboot_atmega328.hex」を選択します。私の環境ではパスは「C:\Program Files (x86)\Arduino\hardware\arduino\avr\bootloaders\optiboot\」でした。「Program」ボタンで書き込みます。
「Fuses」タブでヒューズを設定します。EXTEND を 0xFD、HIGH を 0xDE、LOW を 0xFFにして、「Program」で設定します。optiboot なのでブートローダーのサイズが小さいです。
「Lock bits」タブで、LOCKBITを 0xCF に設定します。これでブートローダーが不用意に書き換わるのを防ぎます。
以上でブートローダーの書き込みは完了です。
改めて動作確認
改めてスケッチを書き込んでみました。正常に書き込むことができ、動作しました。最初のスケッチはもちろん「LEDチカチカ」です。
今回のボードは、Arduinoとしても当然使えるし、「USBシリアル変換付きATmega328Pボード」としても使いやすそうなので、安いし何個か追加注文しました。
今後、Arduino のプログラミングも色々試して、Arduino と アセンブラ とで開発手法を使い分けられるようにしたいです。
更新履歴
2020.04.30 公開
コメント