AVR ATtiny2313 7セグ4桁ボード〜製作、動作チェック
2008年9月製作/10月記事 前回は複数桁の7セグを駆動する方式「ダイナミックドライブ」を解説しました。 7セグをマイコンで点灯させる回路を考え、その動作を検証しました。 今回はいよいよ7セグ4桁ボードを製作します。回路図と部品一覧表を公開します。 このボードを製作するときのポイント、コツを解説するので参考にしてください。 基板が完成して動作確認が済んだ後、応用としてカウンタを作りました。 以下、ページ内の写真はクリックで拡大します。 |
製作のポイント
目標確認 まずは完成品を見てください。これからこれを作ります。 単三形乾電池は大きさ比較のためです。このボードは5Vで動かします。一応、乾電池2個(直列3V)でも動作しますが、7セグはとても暗くなります(光が薄い)。 この7セグ4桁ボードは制御ボードと表示ボードに分かれていて、制御ボードの回路図は7セグのタイプに合わせて2つあります。表示ボードの回路図は共通ですが、アノードコモンの7セグで作った表示ボードがカソードコモン用の制御ボードで動くというわけではありません。逆の組み合わせも動きません。あくまで配線上、同じになるというだけです。
部品一覧はこのページの最後にあります。 |
|||||||||||||||||||||||||||||||||||||||||
カソードコモン用ではエミッタのラインはGNDへつなぐ。 写真(中)では基板左下でスイッチのGNDとつながっている。 アノードコモン用ではエミッタのラインはVCCへつなぐ。 写真(下)の青線のように電源ラインを引けばよい。スイッチのGNDへはつながない。 |
制御ボードの部品配置を検討する 乾電池の大きさから推測できると思いますが、コンパクトな大きさです。ポケットティッシュサイズのユニバーサル基板を2枚に割って使いました。 回路図を見ながら基板上の部品配置を決めていきます。 ここは電子工作のお楽しみポイントの1つだと思います。以前、電子工作の達人に部品配置のコツを尋ねたことがあります。「回路図をじっと見ると、配線パターンが見えてくる」、だそうです。 ……。 見えたような気もしますが、私流のやり方で行きます。 まず表示ボードを挿すコネクタの位置を決めます。背後に1列、配線用の隙間を忘れないようにします。 次にAVRの位置を決めます。両側のピンに抵抗を同じように取り付けるので、空き領域の真ん中に配置します。基板が狭いので抵抗は立てることにします。 AVRの位置を決めたら電源とISPのピンヘッダの位置を決めます。コネクタを挿したときにぶつからないよう、互いに離します。ISPのピンヘッダは、ケーブルを挿したときに表示ボードと干渉しない向きで取り付けます。 スイッチは操作しやすいよう基板手前に配置します。AVRと抵抗の配線を避けて左右どちらかに寄せますが、トランジスタの配置にもよると思うので、まだ決めずに置いておきます。 トランジスタの配置で考えが詰まります。回路図を見るとここが一番複雑です。トランジスタが基板上で占めるスペースや配線のしやすさを考慮します。配線材が基板上で占めるスペース(どこを這わせるか)も考慮する必要があります。 試行錯誤した結果、写真のような配置になりました。横一直線です。 トランジスタの正面が目的の部品の方向を向き、ベースとコレクタが配線しやすいです。トランジスタの背面側でエミッタが1本のラインでまとめられます。ベース〜エミッタ間の抵抗も背面側に立ててコンパクトに収められます。 トランジスタが配置できたのでスイッチの位置を決めます。私は右利きなので右側に寄せました。 最後に言うのも何ですが、ハンダ付け初心者はもっと大きな基板に余裕を持って配置してください。抵抗は立てずに倒した方が作りやすいです。 |
||||||||||||||||||||||||||||||||||||||||
制御ボードの違い カソードコモン用とアノードコモン用の制御ボードを比べて、違うのはトランジスタとその接続先だけです。NPN型でエミッタがGNDへつながるか、PNP型でエミッタがVCCへつながるか、です。 もしこの基板をプリント基板にするなら、カソードコモン用とアノードコモン用を別々に用意せずとも、1枚でどちらにも使えるようにできます。トランジスタを付ける位置と向きはNPN型でもPNP型でも同じですからそこは影響ありません。1本にまとめたエミッタのラインを、GNDかVCCへジャンパー線でつなげるようにしておけばよいのです。 |
|||||||||||||||||||||||||||||||||||||||||
(↑この写真は拡大なし↑) (*)…5Vの電源に470Ω〜1kΩ程度の抵抗を直列につないで、7セグの足に触れるだけのもの。 |
表示ボードの7セグを配線する 表示ボードには7セグとコネクタ以外の部品はありません。それなのに配線の手間では制御ボードよりむしろ7セグの方がヤマ場です。 取り付ける7セグは、4桁分であれば1桁が4個でも2桁が2個でも構いません。2桁だからといってダイナミックドライブ用に内部配線されてはおらず、単純に1桁の7セグが2個くっついているだけです。 7セグの足とセグメントの対応が分からないと配線できません。側面に印刷された型番を頼りにネットで検索、データシートを入手して確認します。 データシートが見付からないときは簡単なテスター(*)を作って手探りで調べます。総当たりです。 1桁の7セグで10本の足なら大抵はコモンが2本あります。これは内部でつながっているので実質1本のコモンです。 2桁の7セグで18本の足なら過不足なしです。もし20本の足ならコモンが2本ずつでしょうが(計4本)、これも実質2本です。 どこにもつながっていない足があることは希です。 具体的な配線の仕方を説明します。 4桁分の同じセグメント(A〜G,DP)をそれぞれ配線していくわけですが、例えば4つのセグメントAを配線するには3本の線が必要で、セグメントA〜G,DPだと合計3x8=24本になります。ハンダ付けは48カ所です。 やっかいなのは数の多さではなくハンダ付けする点の状況です。セグメントの足1つに1本の線を付けるなら簡単ですが、ここでは2本の線を付けることになります。コツを知らないとこれが難しい。セグメントの足に線を1本ハンダ付けし、2本目を付けようとハンダごてをあてると、1本目の線が取れてしまうのです。 そこで少しマシになるやり方を考えました(写真3段目)。 写真右の図を見てください。丸印はセグメントの足です。 2本の線を反対側からハンダ付けすれば、他方が取れにくくなります。 写真左の図を見てください。線を付けるとき、セグメントの足だけでなく手前のランドともハンダ付けします。こうすれば反対側に線を付けるとき、セグメントの足が熱せられてもこちら側の線は取れにくくなります。 「Shuttle K45 改造 レベルメータ+デジタル時計」のときはひどい部品状況での7セグ配線でした。正直言ってこのやり方はもう懲りたので、次からは根本的に違うやり方にします。 |
||||||||||||||||||||||||||||||||||||||||
7セグを簡単に配線するには なぜ7セグの配線が大変だったかというと、セグメントの足1つに2本の線を付けるからです。それが32カ所もあるからです。 もし、1本の線で皮膜が途中途中で少しだけ剥けてるような配線材があったら、7セグの配線は一気に楽になります。 実はそんな配線材があります。ポリウレタン銅線(UEW)です。 見た目は剥き出しの銅線のようですが、表面は絶縁コーティングされています。ハンダごての熱でコーティングを溶かせることが特長です。 具体的にはこのように配線していきます。 まず、目的のセグメントの足をUEWでつなぎます。例えば4本のセグメントAの足にUEWをクルリと巻き付けながら一つながりにします。次に、その巻き付けたところをハンダ付けします。UEWの皮膜が溶けてセグメントの足と線がハンダ付けされます。 多少コツは要りますが、簡単に7セグが配線できます。配線材のボリュームが減るので、どこがつながっているのか見やすくなり、重さも軽くなります。 私は太さ0.26mmのUEWを使っています。 |
|||||||||||||||||||||||||||||||||||||||||
接続したボードとコネクタの向き の関係 ↓表示ボードのコネクタ ↓制御ボードのコネクタ |
コネクタ上の並び順 制御ボードと表示ボードを接続するコネクタは、回路図では1列のコネクタとして描かれています。実際は2列型のコネクタを使うわけですが、信号の並び順は自分が配線しやすいように変えても構いません。私は次のように考えました。 制御ボードは1個作れば足りますが、表示ボードは様々な7セグを使うためにいくつか作るかもしれません。よって、信号の並び順は表示ボードのハンダ面から見てわかりやすい並び順にします。そうすると作業しやすく、配線ミスも減らせます。 桁とセグメントを1列目/2列目どちらにするかも決め方にヒントがあります。制御ボードのコネクタ周辺を考えたとき、背面側への配線がやりにくそうに思います。それでIC側に(線の数が多い)セグメントの配線が来るようにします。 表示ボード側のコネクタのハンダ面はこのようになります (写真・上)。
制御ボード側の並び順はこれに合わせます。表示ボードと左右方向を揃えて見たとき、コネクタの内容は1列目/2列目が逆になりますが、左右は逆にならないことに注意してください。勘違いしやすいです。 制御ボード側のコネクタのハンダ面はこのようになります (写真・下)。
ちなみに、制御ボード側のコネクタがピンソケットで表示ボード側がピンヘッダであることには理由があります。 2x10のピンソケットより2列型ピンヘッダの方が割安なのです。表示ボードは2個以上作る可能性があるので、こちらに安い部品を使った方がコストを抑えられます。 ※呆れないで。 |
なぜこのようなピンアサインにしたのか
7セグの各セグメントと4桁の桁指定、スイッチ2個をどのようにATtiny2313のポートに割り当てるか。 以下の検討は、決してこれがベストだということではなく、参考として読んでください。 図は、黒い枠がIC本体、両側の枠がICのピン、ICを表面側(Top View)から見たイメージです。
プログラミング(ソフト開発)と配線のしやすさを考えると、なるべく機能毎にまとまった(隣り合った)I/Oピンを割り当てると都合がよいです。……が、なかなかそう上手くは行きません。 まずISP用のI/Oピンを除外します。その上で空いているI/Oピンを見ると次のようになっています。 ・AポートはPA0-PA1が隣り合っている。 ・BポートはPB0-PB4の5ピンしか使えない。しかし隣り合った位置である。 ・DポートはPD0-PD1/PD2-PD5/PD6と、元々ピンの位置が飛んでいる。 かろうじてPD2-PD5の4ピンが隣り合っている。 この状況で検討した結果、次のようになりました。 ・まずスイッチをPA0-PA1に割り当てることがすぐに思い付きます。 ・7セグのセグメントA-GをPD0-PD6に割り当てます。 7個のセグメントを1種類のポートに割り当てようと思ったらこれしかありません。配線的にピンの位置がイケてませんが、ソフト的には処理しやすいです。 ・桁指定をPB0-PB3に割り当てます。 1種類のポートで4つ隣り合ったピンなので、配線的にもソフト的にも都合がよいです。 ・残ったPB4に7セグのDPを割り当てます。 他のセグメントとピンが離れているしポートの種類も違うので、配線的にもソフト的にも微妙です。 ※次の「ISPなし」の場合で想定している発振器をこちらでも取り付けるとしたら、スイッチ2個はPB5-PB7のどれかに割り当てます。 スイッチoffならここには何もないのと同じことなのでISPでの書き込みに影響はないし、マイコン動作中はISPのケーブルを抜いておけばよいです。 |
||||||||||||||||||||||||||||||||||||||||||
もしソフトを書き込み済みのAVRを量産化するなら(*)、ISP用のピンは不要なのでI/Oピンがフルに使えます。そのような前提で配線、プログラミング(ソフト開発)します。
I/Oピンの割り当ては次のようなパターンを考えました。 ・PB0-PB7を7セグのセグメントA-G,DPに割り当てます。 1種類のポートで隣り合ったピンで一気に取れるのが配線的にもソフト的にも都合がよいです。 ・桁指定はPD2-PD5……とはせずにPD0-PD3に割り当てます。 ピンの配置は飛んでしまいますが、もし桁を増やすことになってもピンの番号と桁の対応で混乱しません。ソフト的にもLSBから4ビット取る形の方が見通しがよいです。 ・このボードの応用例として「時計」が考えられるので、PA0-PA1は外付け発振器に割り当てます。 ・PD4-PD5にスイッチを割り当てます。 PD6は余りますが、ここに3個目のスイッチを追加したり、何かのセンサーを付けたりしても収まりはよいです。または、7セグを1桁増やすとなったらスイッチ2がずれ込んできます。 (*)…例えば友人に書き込み済みのAVRを配って、基板は自分で工作してもらう、ということは考えられます。そうなったら、ゼロプレッシャーソケットを付けてISPの6ピンだけを配線した書き込み専用のボードを作り、ひたすら書き込みます。 |
||||||||||||||||||||||||||||||||||||||||||
I/Oピンが足りなくなったら 他のマイコンを使うことを検討してください。それが一番よい方法だと思います。 外付け部品を増やしてよいなら、シフトレジスタを使います(8bit、シリアル→パラレル)。セグメントA-G,DPを1個のI/Oピンで制御できます。タイミングを制御するI/Oピンは必要です |
動作確認
(動画) 表示テスト(アノードコモン) (動画) 表示テスト(カソードコモン) どちらの動画も内容は同じです。 カメラの関係で残像がきつい ですが、実際は1セグメントずつ テキパキ光ります。 |
制御ボード/表示ボードともハンダ付けが終わったらとりあえず完成です。 回路図と突き合わせて配線ミスがないか、ハンダ付け自体にミスがないか、よく確認します。テスターで導通/絶縁チェックをすると尚よいです。最低限、電源ラインがショートしていないことを確認してください。 表示テスト ここまでOKなら制御ボードと表示ボードを接続し、電源とISPのケーブルをつなぎ、ソフトを書き込んで動作テストをします。 7セグの配線ミスがないか確認します。 アノードコモン用のテストプログラムはここをクリック。 カソードコモン用のテストプログラムはここをクリック。 拡張子.txtを.cに変更して使ってください。 次のように表示されれば正しく配線できています。表示内容が説明と違うときは配線を確認し、修正してください。 動作1: セグメントA〜G,DPが入れ替わりで順次点灯する。 それが左から右へ4桁順番に表示される。 動作2: 「8.」が左から右へ1桁ずつ入れ替わりで表示される。 以降、動作1から繰り返す。 |
入力テスト スイッチが動作するかテストします。 単純にスイッチON/OFFでセグメントが点灯/消灯するだけのソフトを作ればよいのですが、それでは面白くありません。せっかく複数桁のボードを作ったので、ダイナミックドライブ/スタティックドライブの実験をしてみます。 アノードコモン用のテストプログラムはここをクリック。 カソードコモン用のテストプログラムはここをクリック。 拡張子.txtを.cに変更して使ってください。 動作開始すると「8888」と表示されます。これはダイナミックドライブ中です。 スイッチA0を押すと1秒間だけ表示が停止します。どれか1桁しか点灯していないことから、ダイナミックドライブであったことが分かります。 スイッチA1を押すと1秒間だけスタティックドライブで全桁点灯します。ダイナミックドライブの状態と注意して見比べると、明るさがわずかに違います。また、この一瞬の間はスイッチA0を押しても何も起こらないので、スイッチA1が正常に動作していることが確認できます。 |
|
UP/DOWNカウンタ カウント「147」「-35」が表示されて いる。 |
応用例 UP/DOWNカウンタ 7セグ4桁ボードを使った最初のアプリとして簡単なカウンタを作りました。 スイッチA0で9999までカウントアップ、スイッチA1で-999までカウントダウンします。 アノードコモン用のプログラムはここをクリック。 カソードコモン用のプログラムはここをクリック。 これまで数字は「8」だけでした。しかも数字として意識しているのではなく全部のセグメントを点灯した結果としてです。 このカウンタで初めて0〜9の数字が出てきます。7セグで数字の形を表現する方法や、4桁の数字を表示する方法を、ソースを見て研究してみてください。数字の形を変えることもできますし(「7」の左上に縦棒を付ける/付けないなど)、数字とは関係ない図形を表すこともできます(「-」など)。 もちろんこのUP/DOWNカウンタでやっている方法は一例に過ぎません。人によってやり方は違うでしょう。 ※ソースの詳細解説は敢えて省略。 |
ソフトウェアについて
部品について
部品名 | 部品番号 | 値 | 個数 | 参考価格/備考 |
AVR(マイコン) | ATTINY2313 | ATtiny2313 | 1 | 100円(秋月電子) |
抵抗 | R1〜R8 | 220Ω [赤赤茶金] | 8 | 1個5円/100個100円 |
抵抗 | R9〜R12 | 4.7kΩ [黄紫赤金] | 4 | 1個5円/100個100円 |
抵抗 | R13〜R16 | 10kΩ [茶黒橙金] | 4 | 1個5円/100個100円 |
積層セラミックコンデンサ | C | 0.1uF [104] | 1 | 10個100円 |
タクトスイッチ | SW1,SW2 | 2 | 10個180円 (千石電商 店頭価格) |
|
2列型ピンソケット | CN(制御ボード) | 2x10 | 1 | 50円 |
2列型ピンヘッダ(L型) | CN(表示ボード) | 2x10に切る | 1 | 2x40が100円 |
2列型ピンヘッダ | ISP、電源用 | 2x3と2x1に切る | 1 | 2x25が50円 |
2列型ピンソケット | 電源用 | 2x1 | 1 | 20円 |
ICソケット | 20ピン | 1 | 10個100円(秋月電子) | |
7セグ | D1〜D4 | 赤、緑など | 4桁分 | 1個100円など様々 |
7セグがカソードコモンの場合 | ||||
トランジスタ(NPN型) | Tr1〜Tr4 | 2SC1815 | 4 | 20個100円(秋月電子) |
7セグがアノードコモンの場合 | ||||
トランジスタ(PNP型) | Tr1〜Tr4 | 2SA1015 | 4 | 20個100円(秋月電子) |