しゅみ

AVRの導入とLEDチカチカ

20090213up。船田治さまのブログrecotanaのAVRに関する記事のおかげでマイコン初心者であるにも関わらずスムーズに導入する事ができました。丁寧で分かりやすい記事に感謝!

とつぜんAVR

VF-25のスピーカーポッドの電飾を4017を使ってやろうかと思っていたのですが、突然変心。AVRを導入してみる事にしました。AVRはICの中に任意のプログラムが仕込めるというなんともハイテクなシロモノ。なんでPICじゃないのかってまあ色々あるんですが主になんとなく。

ちなみにライタを注文した時点での知識は…
・なにやらプログラミングできるらしい
・プログラムはC言語で作る事ができる
・AVRライターというものでプログラムをチップに書き込むらしい
・LEDならとりあえず抵抗かましてつなぐだけでも光らせられるっぽい。
・PORTAとかBとかあって、足の数で制御できる対象の数が変わったりするらしい。
・最近はISP6PINで接続する方が簡便でいい感じらしいが、安定度というか安心度はSTK500が勝る
・とりあえずMacでも使えるらしい
もう最悪ですね!

マイコン経験のある人ならテキトーに始められるのでしょうが、安心感というかトラブル排除を重視してATMEL純正のスターターキット・STK500を購入する事にしました。安心感とひきかえにするのはマニーです。同じくATMEL純正な上にUSB直結で使えて便利らしいAVRISPmkIIに比べてかなり割高。モノになるかどうかも分からんのに諭吉投入ですよ。まあテストボードも兼ねているのは初心者には便利かもしれません。コストはそれなりにかかりますが最悪でも模型の電飾くらいはモノになるだろうと楽観的に初めてみました。ATTINY2313にしたのはなんだか安くて脚がたくさんあって割と新しいらしいからなのだぜ。はっきり言って何も考えていません。

環境と当面の目標

Windowsでやれよって感じですがMac OS Xです。エミュレータとか再起動とかめんどくさいからなあ!

購入にあたってとりあえずの目標を定めました。
0. ATTINY2313でrecotanaさんちにあるLEDチカチカをやってみる。
1. VF-25のスピーカーポッドの電飾(外周を光が走る)
2. バーチャロイドの発光パターンの再現
さて、どこまで戦えるでしょうね?

ハードウェア的準備

STK500関係の写真

届いたSTK500を開封し、最初についてるチップを外します。えらくでかいですね。

次は通信の確保です。STK500はシリアル接続なのでシリアルポートのないマクではUSBシリアル変換ケーブルが必要になります。手持ちのSRC06-USBを使いました。中の人の製造元であるFTDIのサイトからドライバを落とすと普通に使えます。おや?STK500にUSBシリアル変換ケーブルが付きません!ケーブルのネジ止めのためにポートについてる部品が邪魔です!すみやかに排除。ねじったら取れたぜー。そんなこんなで…
MacBook Pro > USBシリアル変換 > STK500
と接続。

web上にあったstk500の説明書の指定どおり、ATTINY2313をSCT3300D3と書いてあるソケットに差し込みます。後々外しやすくするためにICソケットをかませてあります。基盤状の印刷パターンが欠けてるとこが1ピンですか?たぶん間違ってないよね?

STK500に電源も供給しなきゃいけません。ついでに買った秋月の12VACアダプタを差し込んで終わり。STK500の付属品に電源用のコネクタが付いてますから、手持ちのACアダプタのコネクタを切り飛ばしてすげ替えても良いですね。基盤のすみっこについてるスイッチが電源ですな。カチ。

さっそくLEDチカチカをやるですよ!STK500の端っこについてるのはテスト用のスイッチとLEDで、これが使えるらしいですよ!recotanaさんちのプログラムの注釈をみた所、portBが使われている様なので、PORTBとLEDSを接続すれば良いと見切った!分かった!さっそく接続。たぶん間違ってないよ?

ソフトウェア的準備

Mac OS Xの開発ツールであるXcodeで作業するために必要なAVR MacPackをインストール。さらにrecotanaさんちにあるカスタマイズされたmakefileを導入。記事に書いてあるとおりにmakefileを変更。初心で何も分からんから、とりあえず書いてある通りにやるのだ!まあ書いてあるとは言ってもいくつか自分で調べないといかんです。チップ名、ライタ名、ライタを接続しているポート名の3つですかね。
MCU = attiny2313
AVRDUDE_PROGRAMMER = stk500v2
ライタ名はstk500としといたらAVRDUDEにv2にしといてやるぜって怒られたので後からstk500v2に変えました。あとはライタが接続されているポート名が必要ですね。ターミナルからls /devするとそれっぽいのが二つ。cu.usbserial-FTE00H76とtty.usbserial-FTE00H76。どう違うのか分からんのだぜ?そういう時はとりあえず片方ずつ試せばよいわけです。というわけで結論としては
AVRDUDE_PORT = /dev/tty.usbserial-FTE00H76

ショボい知識で考えますと、どうやらAVRの書き込み超便利ツール・AVRDUDEというのがありまして、それを操ってXcodeでC言語からのコンパイル、さらにチップへの書き込みを可能にしているのがAVR MacPackという訳ですね。AVRDUDEはコマンドラインツールですが、Macで使える「外の人」にはAvrFuseというのも別にあって、こちらを使って読み書きする事もできる様ですね。というか結果から言うと出来ました。世の中には偉い人たちが居るもんだ。

ここまでで準備は終わった!

20100116追記:AVR-MacPackがCrossPack-AVRに名称変更されて、/usr/local/にあるディレクトリ名が変わっています。よってrecotanaさんちのmakefileテンプレートを使っている場合は変更が必要。Xcode左カラムのターゲット/firmwareをダブルクリックして出るウインドウからカスタムビルドコマンド、ビルドツールを/usr/local/CrossPack-AVR/bin/makeに変更。また、Build SettingsのPATHを/usr/local/CrossPack-AVR/bin:$(PATH)に変更。よりマトモな解決法としてはテンプレートのAVR.xcodeprojを開いて2カ所のAVR-MackPackをCrossPack-AVRに変更すればおっけー。

DO IT NOW!

さーて、勇んで書き込み。するとエラーですよ?
avrdude: stk500v2_command(): command failed
avrdude: initialization failed, rc=-1
Double check connections and try again, or use -F to override this check.
というエラーが出る。はて?

STK500LED接続写真

試しにBuild Onlyで実行すると問題なし。という事はライティングに問題がある訳だ。エラーの内容にもconnectionsをチェックしろとかあるしな。そして同じエラーがXcodeでもavrfuseでも出る。つまりは中の人であるAVRdudeがエラーを出しているという事だ。

うーむうーむと唸りながら物理的な接続をチェックしてみたりAVRDUDE_PORTを書き換えたりしてみたりしてる内に原因判明。web上にあったstk500の説明書で一発です。

ISP6ピンヘッダーをターゲットAVRに対応したピンヘッダにフラットケーブルで接続しないといけない事を知る。うわあ恥ずかしいぞ。SPROG3とISP6PINをつないで再挑戦ですよ。

コマンド+B。3つのLEDがチカチカして…

STK500のLED発光の様子

光った光った!LED0が点滅してるのだぜ!左下のオレンジのやつ。

目標0達成です!

VF-25スピーカーポッド用プログラムの製作

調子にのって発光パターンをかえてみるのだぜ。

いろんな情報を参考に…
ふむふむ点灯パターンを2進で指定できるわけですな!
ほうほうタイミング指定ですか。

おお、光る光る。これは楽しいですな!

点灯パターンと時間指定さえ出来れば基本的な電飾は可能だ!というわけで超下品で無駄が多いのが出来ましたよ。延々と発光パターンとパターンを維持する時間だけを記述したプログラム。LED0から7までの順送り点灯を繰り返します。

************************************
#include <avr/io.h>
#include <util/delay.h>//点灯時間の指定に使います

int main (void) {
DDRB=0b11111111; //portBを出力に指定

for(;;){//無限繰り返しです
PORTB=0b11111110; //発光パターン指定
_delay_ms(30); //維持時間指定
PORTB=0b11111101;
_delay_ms(30);
PORTB=0b11111011;
_delay_ms(30);
PORTB=0b11110111;
_delay_ms(30);
PORTB=0b11101111;
_delay_ms(30);
PORTB=0b11011111;
_delay_ms(30);
PORTB=0b10111111;
_delay_ms(30);
PORTB=0b01111111;
_delay_ms(30);
}
return 0;
}

************************************

あれ?LEDを円状に配置すればVF-25のスピーカーポッドのパターンは完成ですよ?もしかしてもう出来ちゃったですか?目標1も達成です!AVR超スゲエ。