FT232Rモジュール活用 #4 ビットバンモードで7セグを制御する
2011年11月 7セグ(7セグメントLED)はLCD(液晶)モジュールと並んで電子工作ではお馴染みの表示器です。通常はマイコンで制御しますが、FT232Rモジュールを使えばマイコンなしで7セグが制御できます。 PCアプリで簡単に7セグが使えるC#用ライブラリ「FT232_7SegLib」を公開しています。 サンプルプログラムとして、時計とゲームも紹介します。 シリーズ記事 #1 ドライバのインストールからソフト開発まで #2 ビットバンモードでLCDモジュールを制御する #3 FT232-AVRライター とにかく導入が簡単 #4 ビットバンモードで7セグを制御する
|
ビットバンモードの落とし穴 | |||||||||||
FT232Rモジュールのビットバンモードで7セグを制御できるか、考えてみました。 4桁組の7セグには12本のピンがあります。FT232Rモジュールはビットバンモードで8本、CBUSビットバンモードで4本のI/Oが利用できます。合計12本なので7セグ4桁を制御できそうですが、ビットバンモードとCBUSビットバンモードは同時に設定できないので、実は制御できません。 ビットバンモードの設定は排他的に作用します。切り替えるとI/O線のHi/Lo状態はデフォルト値にリセットされます。 失敗案 ビットバンモードでセグメントA〜G,DPにHi/Loを出力し、CBUSビットバンモードに切り替えて桁1〜4を指定する。この繰り返しで7セグ4桁をダイナミックドライブできる…はず!?→できない。 問:FT232Rモジュールのみで7セグを制御できるか? 答:1桁なら制御できる。 おまけ
|
7セグ1桁を制御する | ||||||
回路図とテストプログラム
|
7セグ4桁を制御する | |||||||||||||||
FT232Rモジュールで複数桁の7セグを制御するにはI/Oピンの数が足りません。そこでSerial In Parallel Out (SIPO)タイプのシフトレジスタを使います。ここではNJU3711/NJU3714を扱うことにします。FT232RモジュールのI/O線D0〜D7のうち3本を、シフトレジスタのDATA(データ線)、CLK(クロック線)、STB(ストローブ線)に割り当てます。 シフトレジスタの動作説明
回路図とデモプログラム
セグメントA〜DPをこの順にシフトレジスタのP1〜P8に接続します。 FT232RモジュールのD0,D4,D2でシフトレジスタを制御し、D6,D5,D7,D1で7セグの桁(コモン)を制御します。 7セグはカソードコモンとします。※NJU3711/NJU3714を選んだ理由は秋月でFT232Rモジュールと一緒に購入できるため。 7セグの桁(Digit1,2,3,4)はFT232Rモジュールで直接制御しません。トランジスタを介します。 回路図ではセグメント1つに10数mA、セグメントA〜DP合計で約100mA流れます。FT232RのI/Oピンに流せる電流の絶対最大定格は24mAなので、100mAを受けることはできません。よってトランジスタを使います。 NJU3711/14の出力P1〜P12各々に流せる電流は25mAまでなので、セグメント1つの点灯は余裕です。 参考 7セグでトランジスタを使うことの説明はこちら↓ 「今から始めるAVR #2 ATtiny2313 7セグ4桁ボード〜そこ(7セグ)んとこ、詳しく」 トランジスタアレイは7回路のTD62003を使いました。8回路のTD62083でも構いません。どちらもシンクドライバです。Commonピン(配線図でVと表記しているピン)はどこにも接続しません。 トランジスタアレイの代わりにデジトラを4個使ってもよいです。手持ちにトランジスタ2SC1815などがあればそれを使うこともできます。置き換えの仕方は回路図中の説明図を参照してください。 基板に仕上げてみる 実際に利用するにはブレッドボード+7セグテストボードでは不便なので、基板に仕上げてみました。 青線は基板ウラ面の配線。赤線はオモテ面の配線(ジャンパー線)。オレンジ線は抵抗の挿入位置を表しています。
案3:実際に製作した物の配線図はこちらです。抵抗を全て7セグの下に隠し、見た目を優先しています。 写真のICソケットは微妙な形をしていますが、これは手持ちの28ピン用をカットして、さらに節約(?)したからです。 |
FT232_7Seg4Lib (C#ライブラリ) | ||||||||||||
FT232Rモジュールを使って4桁組7セグを操作するC#ライブラリを用意しました。自由に使ってください。 APIリファレンス的なものはソース内にコメントで記述してあります。※ドキュメントを作るのが面倒だった。 【お約束】このページで公開している全てのプログラムについて、(1)利用に際して何か不都合が起ころうとも当方は一切の責任を負わないものとします。(2)改造・転載は自由です。(3)著作権は放棄しません。 7セグ4桁制御ライブラリ
末尾がpcbの方は基板バージョンです。配線図(案3のカラー図)に示したピンアサインであるとして動作します。 デモプログラムの様子。PutNumber(); PutString(); Clr(); などで簡単に文字が表示/消去できます。 サンプルプログラム「時計」
サンプルプログラム「セグメントアタック」
|
桁数が多い7セグや16セグを制御する | ||||||||||
シフトレジスタのカスケード接続について シフトレジスタをカスケード接続して、制御できるビット数を増やすことができます。 NJU3714にはSO(Serial Out)があります。出力P1〜P12にビットがセットされ、次のクロックでDATAにビットが入ってくると、P12のビットがSOへ押し出されます。 NJU3714を2個用意し、1段目のSOを2段目のDATAに接続すると、1段目からあふれたビットが自動的に2段目へ伝わるので、全体として (P1〜P12) * 2組 = 24ビットのシフトレジスタになります。 一方、NJU3711にはSOがないので、その先に2段目のNJU3711/14を接続することはできません。これらを使ってカスケード接続するには、(NJU3714 * n段) または (NJU3714 * m段 + NJU3711) の形で使うことになります。 前段のSOから次段のDATAへ値を渡すとき、クロックのタイミングに気を付けなければなりません。 NJU3711/14はクロックの立ち上がり(Lo→Hi)でDATAを取り込みます。SOからビットが出力されるのもこのタイミングです。前段と次段を同じクロックで動かしていると、前段のSO出力と次段のDATA入力が同じ瞬間に動作することになり、値を取りこぼします。 従って前段のSOからビットが出力された「あと」(瞬間・同時ではなく、確実に遅れたタイミング)で、次段のDATAから値を取り込むようにする必要があります。 確実な方法は、前段のクロックとは論理を反転した(Hi/Loを逆にした)クロックで次段を動かすことです。クロック信号を、前段のNJU3714にはそのまま入力し、次段のNJU3711/14には反転バッファを通して入力します。前段に対して次段は0.5クロック遅れて動作しているように見えます。 FT232Rモジュールを使った回路では、反転バッファの代わりに論理反転したクロックを別途生成する方法が考えられます。下記2つの回路図とも、D1のクロックに対して論理反転したクロックをD3から出力する設計です。
注意 話を揃えるため、どの回路も7セグ/16セグはカソードコモンを前提にしています。 人気の大型16セグ「KA2311- 42B-UR91」(2011/11現在 aitendo, 共立エレショップで取り扱い)はアノードコモンなので、「16セグ6桁制御 アノードコモン」の回路図を参考にしてください。※他の回路図に当てはめても使えません。 制御ソフトでセグメントを負論理で操作するといっても、変更内容は0/1のビット列を1/0に論理反転する関数を挟むだけです。一応、「8桁対応 7セグテストボード」の記事でアノードコモンの7セグ/16セグをカソードコモンのように使う方法を紹介しています。※部品が増えるし、ソフトを変更できない理由がない限りお勧めしません。 |
部品について |
基本部品は、FT232Rモジュール、シフトレジスタ、トランジスタアレイ、7セグLED、です。 7セグか16セグか、何桁か。それによって、何ビット分のシフトレジスタが必要か、何個のトランジスタアレイが必要か、が決まります。 部品一覧に挙げたシフトレジスタやトランジスタアレイは一例です。この型番でなくてはいけない、ということはありません。が、他の部品を使用した場合、この記事で公開しているプログラムは恐らくそのままでは動作せず、改造する必要があるでしょう。その点については部品のデータシートを読んで研究してみてください。 アノードコモンの7セグ/16セグの回路ではソースドライバのトランジスタアレイが必要です。例えばTD62783です。 ※2011/11現在 共立エレショップで取り扱いあり。 ソースドライバのトランジスタアレイは、桁数分のデジトラRN2205やトランジスタ2SA1015で置き換えることもできます。やり方はカソードコモンの場合と同じなので回路図中の説明を参考にしてください。 この場合さらに、制御ソフトの桁の操作も負論理に変更する必要があります。 ※セグメント操作の変更と同じく、論理反転する関数を挟むだけですが。 |
部品名 | 部品番号 | 値 | 個数 | 参考価格/備考 |
FT232RL USB-シリアル変換モジュール | FT232RL | 24ピン | 1 | 950円(秋月電子) |
NJU3711 8bit SIPO シフトレジスタ | NJU3711 | 14ピン | 数個 | 1個80円 |
NJU3714 12bit SIPO シフトレジスタ | NJU3714 | 20ピン | 数個 | 1個150円 |
TD62003 トランジスタアレイ 7回路 シンクドライバ | TD62003 | 16ピン | 数個 | 2個100円 |
TD62083 トランジスタアレイ 8回路 シンクドライバ | TD62083 | 18ピン | 数個 | 2個100円 |
4桁組7セグLED カソードコモン | -- | 12ピン | 1 | 200円〜 |
積層セラミックコンデンサ | -- | 0.1uF [104] | 数個 | 10個100円 |
抵抗 7セグの電流制限抵抗 | R1-R8 | 220〜470Ω | 8 | 1個10円/100個100円 |
ICソケット 平ピン/丸ピン FT232Rモジュールと7セグには丸ピン推奨 |
-- | 各ピン数 | 各個数 | 10個100円〜 |
基板(秋月電子 片面ガラス基板など) 大きさと枚数は適当に(Bサイズ、Cサイズなど) |
-- | -- | 数枚 | 1枚60円〜 |
USBケーブル Aオス-ミニBオス | -- | -- | 1 | 100円ショップ |
参考価格は全て秋月電子通商。一カ所で通販できるという基準で部品を選定。 |
◆ ◆ ◆ |
FT232Rモジュールを使い、マイコンなしで7セグを制御する方法を紹介しました。 マイコン工作に慣れている人にとっては面白味のない記事だったかもしれません。 マイコンは難しそう、理解するのに時間がかかりそう、でも7セグを使ってみたい、 という人には参考になったと思います。 |
(C) 『昼夜逆転』工作室 | [トップページへ戻る] |