組み込みのプログラムはArduinoやってて、それ以外のマイコンを勉強するのは面倒くさくて、でも小さいマイコンを安く使いたいなぁというズボラでケチな発想で色々いじったことの自分用メモです。
Arduinoはいいんだけど大きすぎるということで、表面実装のATmega328-Pを使いたいと考えています。Arduino miniだかproだかを買えばすごく簡単だけど、値段が高いのでただのチップにAVRライターで書き込もうと考えました。
- AVRにブートローダだけライターで書き込んで、USB-シリアル変換基板でプログラムは書き込むという方法
- ライターだけでArduino IDEを使って書き込む。
1の欠点は変換基板買わないといけないし、外にシリアル変換基板と繋げやすい配線つくらないといけないのがめんどくさい。2には欠点はないと思ったのが大間違い、いくつかひっかかった。
ブートローダの書き込み
この記事の最後に書いてるやり方だとブートローダは必要ないけど、手続きがほぼ同じなのでまとめておきます。
「AVRにArduinoブートローダーを焼き込み成功までの過程」「ATMEGA328P の Arduino化まとめ」「本家」とか参考にしました。ただ、チップが違ったりソフトがAVR Studioから新しいAtmel Studioになってたりするので変更部分だけまとめ。
Atmel Studio 6を起動して、「ツール」→「Device programing」。左上の「Tool Device Interface」をそれぞれ「AVRISP mkⅡ Atmega328P ISP」に設定。Apply押すと画面のようなものが出てくる。書き込み速度などはいじらず、ブートローダを書き込みました。ヒューズはチットと設定によって変えなければならないが、今回はAtmega328-Pの最初のままのものにしましした。
EXTENDED:0xFD HIGH:0xDA LOW:0xFF Lock bits:0xFF
ライターを使ってArduinoIDEから書き込めない
Arduino IDEで書いたスケッチ(プログラム)はライターを使って「書込装置を使って書き込む」でOKだと思ったら、「avrdude: usbdev_open(): did not find any USB device “usb”」というエラーを吐いてしまう。Atmel Studioで使っているAVR ISP mk2のドライバとArduino IDEで使っているドライバが違く、しかも共存できないのが原因でした。しかも自分の環境だとArduino IDEの方のドライバを認識してくれないというトラブルがあって、方針変更しました。参考:「AVRISP mkII とAVR StudioとArduinoIDE」
Arduino IDEでスケッチを書き、書き込み用のファイルであるHEXファイルを出力させてAVRライターを使ってAtmel Studioで書き込む。
HEXファイルの出力とライターで書き込み
Arduino IDEからHEXファイルを作るためには以下を参考にさせてもらった。
Arduino1.0だとC:\\[User]\AppData\Roaming\Arduino\preferences.txtに設定ファイルがあるのでそのtxtファイルに
preproc.save_build_files = true build.path = build
と追記した。変更したら、Arduino.exeがあるフォルダにbuildフォルダを作る。フォルダ作り忘れるとIDEでエラーが出る。
ここまでくれば簡単で、Ardino IDEでターゲットとなるマイコンボードの種類と書込装置の設定を確認して、コンパイル(「検証」ボタン)するとArduino.exeの中のbuildフォルダに沢山のファイルができる。この[プロジェクト名].cpp.hexファイルをブートローダを書き込んだのと同様に「ツール」→「Device Programming」→「Memories」の中のFlashに書き込むHEXファイルを参照して「Program」ボタンを押す。
これで無事動きました。
先にブートローダのことを書きましたが、この方法だとブートローダは必要無いです。色々と遠回りをしてるような気がして滅入りぎみ・・・
ピンバック: OSXとAVRライターでArduino at Curb_Press