ゆるりとものづくり

ゆるりとものづくり

夢見るおっさんの工作記録

avr-gccはArduino IDEを入れれば入っているというお話

これまで導通チェックには、テスターの導通チェックモードを使ってたんだけど、ダイオードチェックも兼ねてるためか回路内(IC内)を経由しての導通でもピーっと鳴ってしまうタイプだったんですね。

抵抗値も表示されるのでメーターに目線を向ければ、回路内経由なのかちゃんと配線されているのかは判るんだけど、実装済み両面基板の配線チェックとかには使い勝手が悪い。
そこで ChaNさんの導通チェッカーを作ることにしました。

ただ、これはATTiny13を使って作られていて、ちょっとはまってしまいました。

ATTiny13Aを入手してブレッドボードに仮組みしたまでは良かったんだけど、ファームウェアコンパイルと書き込みに悩むこと1時間。
最近AVR系はArduinoとしてしか使ってなかったため、すっかり手順を忘れているし、環境も作っていません。ググってみると「な~んだ」というような事が分かったのでメモっておきますね。

注意して欲しいのはこのメモは、よくある「素のAVRをArduino IDEで開発するメモ」ではなくて「素のAVRを素のまま開発するメモ」だということ。
なので、コマンドラインでavr-gccを使ってソースコードコンパイルしてavrdudeを使って書き込む手順の紹介になります。



まず重要な事は、AtmelのAVR(ATほにゃらら系のMCU)の開発環境はArduino IDEをインストールすれば一緒にインストールされているということ。
(仕組みを考えればある意味当たり前だけど(笑))

書き込みに使うハードウェアはArduino ISPを、Arduino IDEは1.6系をインストールしました(インストールしてあった)。

肝心の環境設定手順だけど、すでにArduino IDEがインストールされているなら以下の二つをPATHに追加するだけ(笑)

C:Program Files (x86)\Arduino\hardware\avr\bin

C:Program Files (x86)\Arduino\hardware\avr\etc

(64bit Windowsで標準インストールの場合)

— 追記
Arduino IDE 1.6.7を改めてインストールしたところPATHが少し変わってました

C:Program Files (x86)\Arduino\hardware\tools\avr\bin
C:Program Files (x86)\Arduino\hardware\tools\avr\etc

のようにtoolsが挟まるようになっています


これでコマンドラインからavr-gccもavrdudeも使えるようになるし、avrdude用のMCU設定ファイル(avrdude.conf)も自動で読み込んでくれるようになる。
また、avr-gccの標準ライブラリのインクルードパスも設定される。

今回はターゲットがATTiny13で、ソースコードがcc.cなのでコンパイルしてhexファイルを生成するには、以下の順にコマンドを打てばOK

avr-gcc -g -Os -mmcu=attiny13 -c cc.c
avr-gcc -g -mmcu=attiny13 -o cc.elf cc.o
avr-objcopy -j .text -j .data -O ihex cc.elf cc.hex


Arduino ISPを書き込み済みのArduinoとの接続は次の図の通り。




avrdudeに以下のオプションを与えると接続確認ができます。

avdude -p t13 -c avrisp -P(COMポート) -b 19200

フラッシュメモリへの書き込みは以下のコマンド

avrdude -p t13 -c avrisp -P(COMポート) -b 19200 -U flash:w:cc.hex

今回作ったChaNさんの導通チェッカーの場合、クロックを128 Khzにしないとうまく動作しないのでfuse bitを書き換える必要がある。
(過去に知恵袋でうまく動かないと質問していた人がいたけど、おそらくこれが原因だと思う)

書き込むべき値は、このサイトで簡単に調べられる。
http://www.engbedded.com/fusecalc


書き換えは以下のコマンド。

avrdude -p t13 -c avrisp -P(COMポート) -b 19200 -U lfuse:w:0x7b:m

ただし、この時点でターゲットの速度が遅すぎてArduino ISPの標準速度である119200bpsでは通信できなくなります。

壊したのかと焦りましたが、Arduino ISPのスケッチを次のものに変えて2400bpsで繋げば問題なく読み書きできました。
https://github.com/lmpipaon/ArduinoISP_slow_SCK


avdude -p t13 -c avrisp -P(COMポート) -b 2400

最後に導通チェッカーを作るときにはまったのが、回路図のBZ。

説明でも「ブザー」と書かれていたのですっかり圧電ブザーのことかと思って買ってきたのだが、実際には圧電スピーカーでした。(ちゃんとソース見れば事前にわかったのですが・・・)

圧電ブザーをつなげると常時鳴り続けるとか、導通したら止まるとか変な動きになってハマる(ハマった)ので注意です(汗)