[トップページへ戻る]

FT232Rモジュール活用 #4 ビットバンモードで7セグを制御する

2011年11月
7セグ(7セグメントLED)はLCD(液晶)モジュールと並んで電子工作ではお馴染みの表示器です。通常はマイコンで制御しますが、FT232Rモジュールを使えばマイコンなしで7セグが制御できます。
PCアプリで簡単に7セグが使えるC#用ライブラリ「FT232_7SegLib」を公開しています。
サンプルプログラムとして、時計とゲームも紹介します。

シリーズ記事
#1 ドライバのインストールからソフト開発まで
#2 ビットバンモードでLCDモジュールを制御する
#3 FT232-AVRライター とにかく導入が簡単
#4 ビットバンモードで7セグを制御する

秋月電子通商
FT232RL USBシリアル変換モジュール (商品ページ)


ビットバンモードの落とし穴
7セグ(4桁ダイナミックドライブ用) FT232Rモジュール(秋月電子通商)


参考
7セグの仕組みとダイナミックドライブの
動作原理についてはこちら↓
AVR ATtiny2313 7セグ4桁ボード
セグメント A〜G,DP (8pin)
桁(コモン) Dig1〜Dig4 (4pin)
ビットバンモード D0〜D7 (8pin)
CBUSビットバンモード C0〜C3 (4pin)

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桁なら制御できる。


おまけ

FT232RのCBUS0〜4の動作内容はFT232R内蔵のEEPROMに記録されています。通常はインジケータ(LED点灯)用などの設定になっていますが、CBUSビットバンモードを利用するにはこの設定を書き換える必要があります。書き換えツールはFTDI社から公開されています。
※あまり利用することはないが、他にも様々なデバイス設定を書き換えることができる。
今回、そのツールの代わりに、とりあえずCBUS0〜4を初期値に戻すだけのツールを作成しました。※書き換えツールを使わずとも、CBUSの設定はAPIでプログラム内から変更できる。
ダウンロード Ft232rCbusReset.zip (C#のソースファイル入り)

7セグ1桁を制御する
回路図とテストプログラム
↓左上 「7セグ1桁」の図)

FT232RモジュールのD0〜D7ピンをその順にセグメントA〜DPに接続します。
7セグはカソードコモンとし、コモンのピンはGNDへ接続します。電源が5V、セグメントがVF=2.0Vとすると、電流制限抵抗はR=220〜470Ω程度です。
実験には「8桁対応 7セグテストボード」を使いました。まさにこんなときのために作った便利アイテムです。
7セグの字形については↓こちらのページの一番下を見てください。
今から始めるAVR #4 ATtiny2313 7セグ4桁ボード〜こんなアプリが動く

テストプログラム ダウンロード ft232r7seg1_sample.zip




7セグ4桁を制御する
FT232Rモジュールで複数桁の7セグを制御するにはI/Oピンの数が足りません。そこでSerial In Parallel Out (SIPO)タイプのシフトレジスタを使います。ここではNJU3711/NJU3714を扱うことにします。FT232RモジュールのI/O線D0〜D7のうち3本を、シフトレジスタのDATA(データ線)、CLK(クロック線)、STB(ストローブ線)に割り当てます。

シフトレジスタの動作説明

1.
クロックに乗せてデータをシリアルな形で入力します。出力ポートからはまだデータは出力されません。
2.
データ出力指示を入力します。STB(strobe/ストローブ)信号はカメラで言うストロボのことです。ピカッと光るように「せーの、ハイ!」で出力しろという意味です。
3.
出力ポートからパラレルな形でデータが出力されます。
再度1.2.が実行されるまで出力状態は維持されます。
※CLR(クリア)信号を与えると、その瞬間に出力は全ビットLoになります。

以上の動作により、FT232Rモジュールの任意のI/O線3本と引き替えに、新たなI/O線8本が使えるようになるわけです。
NJU3711(8bit)/NJU3714(12bit)のクロック入力は5MHzまでOKです。FT232のビットバンモードで使用するには十分な対応速度です。

回路図とデモプログラム
右上「7セグ4桁組」の図


シフトレジスタにNJU3711を使います。出力が12bitのNJU3714を使って4bit余らせても構いません。
セグメント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セグテストボードでは不便なので、基板に仕上げてみました。
青線は基板ウラ面の配線。赤線はオモテ面の配線(ジャンパー線)。オレンジ線は抵抗の挿入位置を表しています。

4桁組7セグは左図に示すピン配置のものを使用しました。カソードコモンです。
※秋月電子、aitendoで扱っています。(2011/11)
※購入前に商品説明やデータシートでピン配置を確認してください。

案1:回路図通りD0〜D7を順にP1〜P8と接続した
配線図。抵抗のハンダ付けが大変そうです。
案2:パターンを単純にすることを優先した配線図。
D0〜D7とP1〜P8の対応はソフトで設定します。
5個の抵抗は基板に垂直に、斜め1穴の位置に立てます。

案3:実際に製作した物の配線図はこちらです。抵抗を全て7セグの下に隠し、見た目を優先しています。
写真のICソケットは微妙な形をしていますが、これは手持ちの28ピン用をカットして、さらに節約(?)したからです。







FT232_7Seg4Lib (C#ライブラリ)
FT232Rモジュールを使って4桁組7セグを操作するC#ライブラリを用意しました。自由に使ってください。
APIリファレンス的なものはソース内にコメントで記述してあります。※ドキュメントを作るのが面倒だった。
【お約束】このページで公開している全てのプログラムについて、(1)利用に際して何か不都合が起ころうとも当方は一切の責任を負わないものとします。(2)改造・転載は自由です。(3)著作権は放棄しません。

7セグ4桁制御ライブラリ
ライブラリ+デモプログラム ダウンロード ft232r7seg4lib.zip
exeファイルの末尾がbbの方はブレッドボードバージョンです。回路図に示したピンアサインであるとして動作します。
末尾がpcbの方は基板バージョンです。配線図(案3のカラー図)に示したピンアサインであるとして動作します。

デモプログラムの様子。PutNumber(); PutString(); Clr(); などで簡単に文字が表示/消去できます。




サンプルプログラム「時計」


プログラム ダウンロード ft232r7seg4_clock.zip

シンプルな時計です。
写真の表示は「10.42」、10時42分です。

サンプルプログラム「セグメントアタック」


プログラム ダウンロード ft232r7seg4_satk.zip

ワンキー操作のパズルアクションゲームです。
マイコン用に作ったタイトルを移植しました。
内容は↓こちらでプレイ動画を見てください。
今から始めるAVR #4 ATtiny2313 7セグ4桁ボード
〜こんなアプリが動く


桁数が多い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クロック遅れて動作しているように見えます。
何段カスケード接続するにも0.5クロックずつ遅らせます。すると、奇数番目同士は同論理、偶数番目同士も同論理、奇数番目と偶数番目は反転論理、という関係になります。※2回0.5クロック遅らせるとHi/Loのタイミングは元のクロックと同じになる。

FT232Rモジュールを使った回路では、反転バッファの代わりに論理反転したクロックを別途生成する方法が考えられます。下記2つの回路図とも、D1のクロックに対して論理反転したクロックをD3から出力する設計です。

7セグ8桁制御 16セグ6桁制御


FT232Rモジュールはシフトレジスタの制御に徹します。ピン数で言えば2段目のNJU3711を無くして4桁分のコモンをFT232モジュールのD3〜D6に割り当てても全8桁の制御はできます。が、制御ソフトが複雑になるのでお勧めしません。 「7セグ8桁制御」の回路から2段目のNJU3711をNJU3714に変更し、ビット数を増やしています。
トランジスタアレイを8回路から7回路に変更したのは、単に1回路節約するためです。


7セグ8桁制御の様子。「7.SEG.8.dIG.」と表示しています。
1桁を表示するためにシフトレジスタへ転送するデータ量は、
[セグメントA〜DP+桁1〜8で16ビット]×[CLKのHi/Loで2倍]=32ビット。
制御するビット数が増えると、その分ダイナミックドライブの1桁の表示に時間がかかるため、薄暗くなり、ちらつき始めます。
ちらつきを抑制するには通信速度を上げます(例:9600→38400bps)。

デモプログラム ダウンロード ft232r7seg8lib.zip
7セグ8桁制御用のライブラリ FT232_7Seg8Lib をさりげなく含んでいます。

最大20セグ24桁制御 16セグ6桁制御 アノードコモン


極端な例です。回路図は多セグ・多桁化のやり方を示しています。実際に作った場合、ちらつきと薄暗さに悩まされると思います。 7セグ/16セグをアノードコモンにした例です。
トランジスタアレイはソースドライバを使います。
制御ソフトはセグメントA1〜DPの操作を負論理に変更します(Loで点灯、Hiで消灯)。

注意
話を揃えるため、どの回路も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で置き換えることもできます。やり方はカソードコモンの場合と同じなので回路図中の説明を参考にしてください。
この場合さらに、制御ソフトの桁の操作も負論理に変更する必要があります。
※セグメント操作の変更と同じく、論理反転する関数を挟むだけですが。


FT232Rモジュール用4桁組7セグ制御ボード 部品一覧 (回路図はここをクリック
部品名 部品番号 個数 参考価格/備考
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) 『昼夜逆転』工作室 [トップページへ戻る]
inserted by FC2 system