AVR ATtiny2313 テストボード
2008年9月製作/9〜10月記事 はじめに PIC,H8,AVRなどマイコンに興味を持って、これを使えるようになりたいと思いました。 K45S(ShuttleのPC)に搭載した「レベルメータ+時計」で、時計部分はキット物を使いましたが、本当はこれを自分で作って全体を完全に自作にしたかったのです。 昔は時計専用のICがあったようですが既に絶滅、今ではマイコンで高機能な時計が作れるようになったようです。 ということでデジタル時計を作るためにマイコンの勉強を始めました。 なお、この記事はマイコン内蔵の機能や、関連ハード/ソフトの使い方を解説する記事ではありません。そういった味付けもしますが、基本的には「こんなの作ったから紹介するよ」という趣旨の記事です。 しかしながら、この記事を見て「自分も作ってみよう」という人が現れることを期待して、製作に関する情報、ヒント、コツはなるべく書いていこうと思います。回路図、部品一覧、プログラムのソースも公開します。 どのマイコンを使うか マイコンといえば最初に挙げた3つがよく知られているようです。ざっと調べたところ… PIC Microchip社が開発したマイコンで、ずいぶん前から業務でもホビーでも使われている。 解説書籍が豊富。メモリ操作やアーキテクチャに癖がある。開発機材が割と高価。 H8 ルネサステクノロジ社が開発したマイコンで、ホビーユースではマイナー。 AVR ATMEL社が開発したマイコンで、ここ10年くらいの歴史。海外では人気がある。 後発である分、使いやすく作られているだとか、開発機材が安価だとか。 しかし新しいためか業務でもホビーでもPICほど広まっておらず、解説書籍もまだ少ない。 マイコンはアセンブラで開発するイメージがありますが、PIC,H8,AVRともフリーのCコンパイラがあるようで、アセンブラをほとんど知らない私は助かります。ただし使用条件や使い勝手や解説資料の充実度で差があるようです。AVRが有利な模様。 あなたならどのマイコンを使ってみたいですか? 私はAVRに決めました。 よく行くパーツ屋がAVRを安く売っていたことも大きな理由です。 目的/何を作るか 1.先述の「キット物」を置き換えるため、7セグLEDのデジタル時計を作る。 2.それと関係して、7セグLEDのアノードコモン/カソードコモンによる回路の違いや、 ダイナミックドライブのことなど、理屈は知っているが実際に試して身に付けたい。 3.他に、AVRを使っていろいろ遊んでみたい(寄り道)。 基礎知識習得 AVRについて右も左もわからないので、まず解説本を読みました。 書店で3冊の本を読み比べて「試しながら学ぶAVR入門」(CQ出版社)を購入。わかりやすい内容でした。 まずはAVRを単体で使う工作をやって(デジタル時計はこれで行ける)、PCや周辺機器との通信といった一段上の技術はまた後で考えることにします(その辺り、面白そうなんだよな)。 私には電子工作やプログラミングの経験が既にあります。今からやりながら覚える人も大いに結構なので、そのときはこんなスキルを身に付けることを意識してください。 ハードウェアについて、回路図を見て配線できること。ハンダ付けができること。 これだけです。回路図を見ながら作る分には設計の知識は要りません。 ソフトウェアについて、C言語が使えること。if()、for()、while()が分かればよいです。 それと論理演算(AND,OR,NOT)とシフト演算(何ビットシフト)を知ることが重要です。 C++やオブジェクト指向の考えは要らないです。ポインタさえも知らなくてよいのです。 準備:ハードウェア 【AVRライター】 テスト開発を始めるにあたり、まずAVR自体より先に必要なハードウェアがあります。 AVRを動作させるにはICの中にプログラムを書き込みます。マイコン(AVR)をプログラミングすると言います(ソフトウェア開発も「プログラミング」なので紛らわしい)。 この書き込む機器、ライター(writer)が必要です。メーカー品や自作紹介などいくつもの候補があるので、PC環境や予算で決めます。 ※検索サイトから「AVRライタ 製品」「AVRライタ 自作」で検索。 2010/03 追記 「AVRライターを選ぶ 〜始める人の1台目、慣れた人の2台目〜」 ライター選びのヒントにどうぞ。 PCとライターの接続はUSB,COM,LPTのどれかです。 USBポートは今時のPCなら必ず付いていますが、対応ライターは若干高価です。 COMポートは対応ライターが安価、または自作できますが、今時のPCにCOMポートはあまり付いていません。LPTポートもまた然り。 (写真はShuttle K45 Quick Guideより) 私は運良くCOMポートが付いたPCを持っているので、このPCで書き込むことにします。 ライターは「簡易型AVRライターキット」(ストロベリーリナックス社)を購入しました。 書き込みソフトはChaN氏のavrsp.exeのお世話になります。 ChaN氏のサイトELM内、AVRライタの製作のページからダウンロードできます。 以降の製作記事では出てきませんが、USB用のライターならATMEL社純正「AVRISP mkII」がお勧めです。比較的安くて入手しやすいです(2009/06現在、秋月電子で4000円)。 【AVR自体】 AVRは機能や性能によっていくつもの製品(型番)があります。ATMEL社のサイトでAVR一覧を見てください。電子工作で使う候補はtinyAVRシリーズとmegaAVRシリーズです。 その中でまず「ATtiny2313」を使いましょう。比較的よく出回っていて入手しやすく、安く、入門用として最適な規模のAVRです。いや、入門用どころか実用的な物も結構作れるほどの性能で、なかなかやりますよ、これは。初めてでも2〜3個買っておいてください。 AVRに慣れてきて、より高度な機能や使い方に興味が出てきたら「ATmega88」を使ってみましょう。気が早い私は既に買いました。 (写真:上がATtiny2313 [長さ27mm]、下がATmega88 [長さ35mm]。表面の刻印が見づらい) 【テストボード】 テストボードとは、そのマイコン(AVR)がどんな機能を持っているのか、実際に動かしながら把握するための実験用基板のことです。これ自体が何か特定の機能を持った完成品というわけではありません。AVRで何がやれるのか、試行錯誤に使うボードです。自分で作ります。 AVRの動作を目で見てわかるようにするため、LEDが3〜4個必要です。 人の操作を受け付けるよう、スイッチが2個は必要です。 音声を出すことは難しいのでスピーカは要りませんが、ビビーッと音を出すことはできるので、ブザーが1個あってもいいかもしれません。 他は要りません。あくまでテスト用のボードなので、単純なインターフェイスが少数あればよいです。 ※部品一覧はこのページの最後にあります。 準備:ソフトウェア Windows環境でソフトを開発します。 Visual Studioのような開発環境の「AVR Studio」がATMEL社から無償で提供されています。 これをインストールすればとりあえずアセンブラで開発できます。 C言語で開発するにはAVR Studioに加え、「WinAVR」(AVR向けgcc)をインストールします。 ATMEL社のサイトからAVR Studio 4.14 (build 589) WinAVR AVR-GCC for Windows(SourceForge.net)のサイトからWinAVR-20080610-install.exe ※どちらも2008年9月このページ執筆時点での最新版です。 2010/03 追記 「今から始めるAVR #1.1 導入編の補足〜環境構築の説明」 この記事の補足編として、開発環境について簡単に説明しています。 準備オッケー ここまで読んでくれてありがとう。じゃ、始めようか。 まずライター(キット)の製作。次にテストボードの製作。最後にソフトを作って動作確認。 |
写真クリックで拡大
「簡易型AVRライターキット」です。 まずはこれを組み立てます(ハンダ付け)。 プリント基板なので配線材は要りません。簡単楽ちん。 完成したらPCのCOMポートと接続します。PCに直接挿せますが、どう考えてもD-SUB9ピンの延長ケーブルでつないだ方が作業しやすいです。両端がオス−メスのケーブルです。 左側の短い線の先は6ピン(2x3ピン)のメスコネクタになっていて、マイコンボード上のピンヘッダに挿します。 通常、マイコンの書き込みには、まずマイコンをライターのICソケットに載せてプログラミング(書き込み)し、取り外して目的の基板に載せて動作させる、というやり方をします。 ところがAVRはISP(In System Programming)といって、マイコンを目的の基板に載せたままライターから書き込みができます。 そのため目的の基板上には2x3ピンのピンヘッダを付けておき、そこにこのライターのコネクタを挿して使います。 |
|
これがATtiny2313テストボードです。 ※部品一覧はこのページの最後にあります。 LEDが3個、スイッチが2個、AVRにつながってるだけです。 これでAVRの基本動作を試します。 最初はただLEDを光らすだけ。次に、スイッチを押したらLEDが光るといった単純なことをします。 慣れたら、1分ごとに1個ずつLEDを光らせ、ラーメンタイマーにすることもできます。 基板上にはISP用のピンヘッダ(2x3ピン)も取り付けます。 ここからAVRをプログラミング(書き込み)します。 回路の電圧は5Vとします。PCのHDD用電源ケーブルやUSBコネクタから容易に取り出せるからです。 USBコネクタから取る場合は1ポート500mAまでにします。100円ショップで「USBケーブル」や「USB携帯電話充電ケーブル」を買ってきて不要な側のコネクタを切り落として使います。 4つの端子のうちどれが5V/GNDかは検索サイトから「USBコネクタ VCC DATA GND」で検索して確認してください。 普通は、[赤:5V][白:DATA-][緑:DATA+][黒:GND]です。 安定供給のためにはHDD用電源ケーブルから、すなわち電源ユニットからダイレクトに取った方がよいでしょう。「HDD用電源分岐ケーブル」を買ってきて不要な側のコネクタを切り落として使います。分岐ケーブルを「V」字型に見たとき、左上か右上のどちらかを切り落とします。 線の内容は、[赤:5V][黒:GND][黒:GND][黄:12V]です。 |
|
(動画) ラーメンタイマー(デモ) 公開しているソフトでは3分タイマーですが、動画ではデモ用に短時間動作にしています。 (*)…WinAVRで適当な名前のプロジェクトを作り、そこへダウンロードしたソースファイルをコピペして、ビルドしてもよいです。 WinAVRで使うライブラリ(API)の説明はしません。公式サイトや日本語訳を紹介したサイトで解説を読んでください。 レジスタの説明はこのページの始めの方で紹介した書籍やAVRのデータシート(仕様書)を読んでください。 |
写真では「動き」を伝えられませんが、LEDを点滅させるプログラム(ソフトウェア)を作って動作テストしています。 いくつかソースファイルを公開します。 ダウンロードして拡張子.txtを.cに変えて使ってください。(*) AVR Studio 4.14 (build 589) + WinAVR-20080610 で動作確認しています。 ターゲットデバイスは「attiny2313」、最適化オプションは「-Os」。 動作クロックは1MHz(8MHzの8分周)、買ってきたままのヒューズビットです。 ※詳細は次回記事を読んでください。 テストA LEDを10回点滅後、ボタン押下で点灯。 テストB A0ボタンでカウントアップ、A1ボタンでカウントダウン 。 LEDが2進数を表しています。 テストF3 タイマ割り込みでPWM的に輝度調整する。 ボタンA0で輝度調整、ボタンA1で点滅/連続点灯の切り替え。 ATtiny2313はタイマ/カウンタによってPWM機能(波形に従って出力のon-offを高速に切り替える機能)が使えますが、出力できるポート(AVRのピン)が決まっていて(PD5,PB2,PB3,PB4)、そこにつなげた物しかPWM制御できません。 テストF3ではタイマ割り込みでインクリメントする変数を用意し、メインループでその値を見て、自力でPWM的な制御をすることで、他の(PWM出力が割り当てられてない)ポートにつないだLEDの輝度調整をできるようにしています。 ラーメンタイマー 初期状態でLED全点灯。A0ボタンで開始。A1ボタンで中止。 開始すると右端のLEDが点滅し、1分ごとに左へ移り、3分経つと全部が速く点滅します。 AVRの内蔵発振器は正確な1MHzを発してはいません。その上、ソフト側では1MHzを1024分周して得た時間を1msとして計算しています。そのため正確な3分間ではありません。 しかしあくまでテストボードの応用例なので、これでよしです。 割り込みを使った時間計測の参考にはなるでしょう。 |
このテストプログラムを書いていた頃、私はunsigned charをbyte型などと好きなようにtypedefしていました。 WinAVRでは「uint8_t型」のように様々な型を定義しています。現在ではそれに従って記述するようにしています。 ←次回はこれ |
部品について AVRはATtiny2313を使います。ATtiny2313V(低電圧版)でも構いません。 お店では「マイコンで、エーブイアールのタイニーのニィサンイチサンください」で通じます。多分。 固定抵抗はどこでも手に入るカーボン皮膜の1/4Wです。 1本単位で買うより100本100円などまとめて安く買えるならそれがお得です。 LEDが明る過ぎると思ったら、1kΩまでを目安にR1〜R3の抵抗値を大きくして、暗くしてください。 電圧は5Vのまま変えません。 後日追記: ATtiny2313にはプルアップ抵抗が内蔵されているのだから、素直にそれを使えばよいと気付きました。外付けのプルアップ抵抗(部品一覧のR4)は不要です。回路図を新しいものに差し替えました(v1.1.0)。 LEDは赤、緑が無難です。安いし。青、白にするなら電流制限抵抗の値を計算してください。 0.1uFの積層セラミックコンデンサはパスコンとしてこれから何個も使うので、まとめて安売りしてればそれを買った方がお得です。 タクトスイッチは案外高価です。これもこれから何個も使うので、まとめて安売りしてないか探してみてください。 ISP用のピンヘッダは2x3の6ピンですが、この大きさは見かけないようなので、2x10など2列型で長いものを買ってください。3ピン幅で切ればISP用になりますし、1ピン幅で切れば電源用のピンになります。 その電源用にしたピンと対になる2x1のメス形のコネクタも必要です。忘れずに。 ICを基板に直接ハンダ付けすると、他で必要になったときに使い回しができません。基板からICを抜き差しできるようにICソケットを使います。ハンダ付けが苦手な人がICの足に熱を与えすぎてICを壊すなんて話を聞くこともありますが、ICソケットを使えばそれを防げます。 ATtiny2313は20ピンのICなのでソケットも20ピンのものを買います。今後ATtiny2313をいくつも使っていくでしょうから、まとめ買いで安いものがあればそれがお勧めです。 ICソケットの形状は平ピン形でも丸ピン形でもどちらでもよいです。 一覧表には書きませんが、配線材もよく選んだ方がよいです。 複線より単線にしてください。皮膜を剥いたときに細い線が沢山出てくるのではなく、1本だけ出てくる線です。太さは0.5mmくらいで。 ビニールの皮膜より耐熱性の皮膜の線がよいです。特にハンダ付け初心者には。 高価な物は要りません。袋に入ってて10mで300円以下、などの物でよいです。 |
部品名 | 回路図の部品番号 | 値 | 参考価格 |
AVR(マイコン) | ATtiny2313 | -- | 100円(秋月電子) |
抵抗 | R1,R2,R3 | 330Ω | 1個5円/100個100円 [橙橙茶金] |
LED | LED1,LED2,LED3 | -- | 1個数十円 |
積層セラミックコンデンサ | C | 0.1uF | 10個100円 [104]の表示 |
タクトスイッチ | SW1,SW2 | -- | 10個180円(千石電商 店頭価格) |
2列型のピンヘッダ | -- | -- | 100円程度 |
2x1のメス型コネクタ | -- | -- | 20円 |
ICソケット | -- | 20ピン | 10個100円 |