免責事項

注意、免責事項について
・高電圧、大電流その他高エネルギを扱う実験を行う際にはくれぐれも安全に配慮し、細心の注意を払って行うようにしてください。
・当ブログの記事を参考にして発生した損害についてFEL研究室はいかなる責任も負えませんでご了承ください。

2016年2月10日水曜日

~AVRマイコン開発記~ 第一章:導入~動作確認

こんばんは。今朝注文していたAVRマイコンが届きました。嬉しかったです。今日は結構長くなる予定なので冒頭で油売っている場合ではありません。余談ですがPCのメモリ16GBにしちゃいました。決して僕に悪意があるわけではありませんが、今回の記事は参考にできそうな部分があるように見えたとしてもそれは錯覚です。真似して何かモノを壊されたりしても(ここの読者の方なら予備をたくさん買っているので特に問題ないかと思われますが)残念なので、参考にする場合はくれぐれも自己責任、自分の判断でよろしくお願いします。ちなみに僕は大事な場面ではマージンを甘く見すぎてよく失敗しますがこういうお遊び工作では何故かマージンを見すぎてしまうようで必要数×5~10くらいは買ってしまうことが多いです。

用意したモノ
・ArduinoUNO(僕が用意したのは互換ボードでした^^)
・PC(Win環境でやります)
・ブレッドボーヨ
・書き込みたいAtmelの適当なマイコン(僕が用意したのはATtiny13A)←やすかったからです。
・LED、抵抗等の部品

まず、ArduinoUNOにはArduinoUNOをAVRライタとして使えるようにするファームウェアを書き込んでおきます。ArduinoISPという名前でArduinoIDEからファイル→スケッチの例→11.ArduinoISP→ArduinoISPをクリックしてやると長いコードが表示されます。
取り敢えず何も考えず(いつものこと笑)書き込んでおきます。あとついでに
 赤線で強調してあるCOM3というところ。この数字は人によって違うのですが後から必要になるのでメモしておきましょう。

ArduinoIDEはこれ以降使わないので閉じてもらって結構です。


続いて、開発環境を入れてきます。初めに言っておきますが何故か我が家のPCでは統合開発環境から直接AVRマイコンを焼けなかったので統合開発環境はコンパイルやデバッグのみをさせて、書き込みは別のソフトウェアを使用します。

初めに統合開発環境AVR Studio 4を入れます。こちらに共立さんの分かりやすい導入ページがあるので見たら分かります。めんどくさい人は
から飛んで「AVR Studio 4.19 (build 730)」を探して左のCDのマークみたいなのを押して必要事項を入力してAtmel社からのメールを待つだけです。メール内にダウンロードリンクがあるのでダウンロード、インストールするだけです。

次に書き込みに使用するソフトウェア「AVRdude」を入れます。こちらからダウンロードして同様にインストールするだけです。

以上で書き込む準備が整いました。
取り敢えず定番のLチカをやってみようと思います。チップはATtiny13Aを使ってみます。
AVR Studioを起動してプロジェクトを作っていきます。
New Projectから
プロジェクト名を入力して(フォルダを作るにチェックを入れとくとあとで見やすい)、AssemblerかGCCかを選択します。今回はAssemblerでやってみます。Next>>を押します。
 ここは良くわからないですがデバッガーを選択しろと言っています。動作に影響は無さそうですが取り敢えずAVR Simulator 2にしてみました。横の窓から使いたいデバイスを探してクリックしてFinishでプロジェクトは作成完了です。


 こんな感じの画面になります。
これまた何も考えずに下のソースファイルを上の画面の真ん中の枠内にコピペしてみましょう。



↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

.INCLUDE "tn13def.inc";定義ファイル

setup:;setupというラベル
LDI R16, 0xFF;R16の汎用レジスタに0xFFを代入
OUT DDRB, R16;DDRBにR16の中身を転送、DDRBはポートの状態格納レジスタ
LDI R16, 0x00;R16の汎用レジスタに0x00を代入
OUT PORTB, R16;PORTBにR16レジスタの中身を転送、1ならHIGH、0ならLOW

main:;mainというラベル
RCALL delay;delayという名前のサブルーチンに飛びなさい
LDI R16, 0xFF;R16の汎用レジスタに0xFFを代入
OUT PORTB, R16;DDRBにR16の中身を転送、ポートはHIGHに
RCALL delay;
LDI R16,0x00;
OUT PORTB,R16;DDRBにR16の中身を転送、ポートはLOWに
Rjmp main;mainという名前のラベルに飛びなさい

delay:
LDI R16, 25;
dly2:
LDI R17,50;
dly1:
LDI R18,234;
dly0:

NOP;何もしない
DEC R18;デクリメント

BRNE dly0
;直前の演算結果が0でなければdly0というラベルに飛ぶ
DEC R17
BRNE dly1
DEC R16
BRNE dly2
RET;サブルーチンから復帰


↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

できたら保存して、左上のBuild→Buildを押すかF7キーを押しましょう。これで上で書いたアセンブラが機械語に翻訳されてマイコンに書き込める状態のデータなりました。このデータは先程プロジェクトを作成したファイル内に、プロジェクト名.hexという形式で生成されていますので
 例えばこのフォルダの一個前のフォルダにtemp等適当なフォルダを作りhexファイルをコピーしておきましょう。C\temp等分かりやすいところに置いておくとあとで作業が楽です。
それではそろそろハードを触りたくなってきたのでArudinoUNOと焼きたいマイコンチップの配線でもしましょう。図を書くのがめんどくさいのでATtiny13Aの接続方法のみ以下に示します。

ArduinoUNOデジタル13番ピン→ATtiny13Aの7番ピン
ArduinoUNOデジタル12番ピン→ATtiny13Aの6番ピン
ArduinoUNOデジタル11番ピン→ATtiny13Aの5番ピン
ArduinoUNOデジタル10番ピン→ATtiny13Aの1番ピン
ArduinoUNOのGND→ATtiny13Aの4番ピン
ArduinoUNOの5V→ATtiny13Aの8番ピン

ATtiny13Aに電源を供給しているなら最後の5Vは接続しなくて良いです。
さらに動作確認用のLEDと抵抗をATtiny13Aの1,4,8番ピン以外のどれかに接続しておきます。ちなみにArduinoUNOの基板上のLEDが13ピンに繋がっているため外付けLED無しでも動作確認はできます。LEDつなぐのめんどうくさい人は繋がなくても大丈夫です。
次にコマンドプロンプトを起動します。ArduinoUNOはPCに接続しておきます。
次のコマンドを実行します。

cd C\temp

先ほどのhexファイルがあるディレクトリに移動します。別の場所にhexファイルをコピーした人は自分なりに読み替えてください。そしてhexファイルが存在するディレクトリで次のコマンドを実行します。

avrdude -c avrisp -P COM3 -b 19200 -p t13 -U flash:w:ltica.hex 

赤文字で書いたCOM3は前述の通り人によって違うので自分なりに書きなおしてください。またt13の赤文字はこれは今回しようしているATtiny13Aというマイコンの識別文字的なもので異なるマイコンを使用する場合は変えてください。同じマイコンをご使用ならそのままで結構です。違うマイコンを使用している場合は一度 -p t13 の部分を消してコマンドを打ってみるとそれぞれのマイコンの識別文字一覧みたいなのが出てきますので参考にしてください。そもそもソースコードがATtiny13A用なので他のチップだと動かないことがあります。ファイル名もプロジェクト名に合わせてください。
正常に接続できていれば以下のような画面がでるはずです。
たぶんこんな説明じゃ95割の人が成功しなさそうですが成功したとして話を進めます。
新品のマイコンチップならLEDが2秒周期ほどで点滅すると思います。新品、と言ったのは工場出荷時は内部クロックが1.2MHzなのですがこれはマイコン内部で8分周されているもので本当は9.6MHzなのです。こういった設定もAVRdudeから行うことができますが僕は早速ミスって一個書き込めなくしてしまいました。しかし予備をたくさん買っておいたので困ることはありません。やはり日頃の行いでしょうか。普通の方は予備を買うなり徳を積むなりして壊した時の事を考えるかそもそも壊さないようにするかして対応してください。



とまぁ以上で導入は終了です。成功した人も成功しなかった人も部品の予備が役に立った人もお疲れ様でした。ソースコードの意味が分からなくても、コマンドプロンプトに表示されている英語の意味が分からなくても、何も書かれていないマイコンにプログラムを書き込み動作させることができたというのは素晴らしいことではないでしょうか。次回はソースコードの解説とAVRdudeのもう少し詳し機能を見ていく予定です。

それでは、今日はこの辺で。



メモ:下位ヒューズビット01101010:6a

0 件のコメント:

コメントを投稿

何かあればお気軽にどうぞ。