7セグLEDディジタル時計キット(TM1637)で遊びましょ

2018.12.28(since2018.02.18)
サイトマップ トップ  <  ラズパイの部屋 <

TM1637デジタル時計キット
5インチタッチパネルディスプレイ注文したとき、販社から(発注時すでに数時間遅れだけど)お正月サービスでプレゼントされる。 ただし2018/2/18現在在庫切れなのか商品へのリンク切れている。検索すると、5V/3.3V両対応でtitanmec:天微さんという中華メーカさんの、TM1637というコントローラが7セグLEDを制御するキットで、(電源、GNDと、クロック、データ)の合計4端子でラズパイ等から制御するものです。時計といっても時計機能はラズパイが担当して、時計らしく見えるディジタル表示機というのが、キットの本質。 このICチップ名で7セグLEDと一体の商品の型名に使うことがあるようで、”Grove システム”というインターフェース対応コネクタが付いた商品もあるようです。
7セグLED表示機つき商品としては4ケタ表示ですが、IC単体では最大6桁までのアノードコモン7セグメントLEDを駆動できます。

LED(発光ダイオード:light emitting diode)とは、アノード端子電圧>>カソード端子電圧になった時に、電流を流してかつ光る性質を持つ2端子素子です。 このLEDを、デジタル数字の8の字を描くように、7個並べてパッケージングしたものが、7セグメントLEDと呼ばれる商品で、 この場合7*2=14本の端子を持つのではなく、アノード(もしくはカソード)共通にして、原理的7制御端子+コモン電源の8端子素子になります。 一般商品としては、小数点表示用(が一般かな)のLEDを含めて8制御入力+共通電源端子(コモン)という9端子構成になります。 本商品のように、複数桁数表示をコントロールするICは、ピン数の関係で、制御信号8本は、各桁LED共通で、各桁ごとに独立したコモン電源を持っていて、表示したい桁のコモン電源とその桁用の制御信号を出すという動作になります(4桁一体型で共通制御端子と、桁ごと独立のアノードコモン電源を、桁数本もっているデバイスです)。その桁の共通アノードコモン端子を、H(3.3とか5V)にしたとき、8制御端子がその桁用表示データを出力します(他の桁も同じ制御信号が供給されますが、アノードコモン電源off=0Vなので発光しない)。 つまり、時分割で、一桁ことに、その桁表示LEDの共有コモンアノード電源をH電圧(ラズパイの場合は3.3V)にして、同時に、点灯したくないLED制御入力を、Hにすれば点灯しない、点灯したい点に相当制御信号をLにすれば点灯という動作になります。時分割で、一桁づつ短い時間点灯させて、目の残像現象を利用して、全桁点灯しているように見せるという仕様です。 ちなみに、時計特化商品なので、小数点はサポートないですが、あるけた表示機の小数点相当ビットデータで、時:分分離の”:”表示の構成になっているようです。
一般にLEDの照度を変えるのは、連続点灯前提だと、流れる電流を制御する直列抵抗で変化させますが、この時分割方式なら、消灯する時間と、点灯する時間の割合を変えることで、制御することも可能です。

ちなみにこの8本の制御端子と、別の共用端子2本をつかって、2*8キーマトリクス構成から、16ケのスイッチのどれが押されたかを調べる機能をあるようです(メーカ仕様書の回路図より。中国語仕様書読めないので確認してませんが、間違いないでしょう)。

むかしむかし、ワンボードマイコンを作ったときは、同じ原理で、8255という汎用パラレルポートICを使って、7セグLEDと、16進キー入力を実現したことがあります。7セグLEDで、8の字のどこを発光させると、”6”と”B”区別できるかパズルを楽しみましょう(”B”は大文字では”8”と区別つかなくなるので、小文字にして、”b”。今度はこれとと数字の”6”が区別できるように上の横棒を光らせるかどうか等センスを楽しむこともありました。記憶が定かでないけど、ワンボードマイコンの世界だと、納得できない文字のもあるけど、アルファベットも区別して表示させてたような無いような....ちなみに販社提供コントロールソフトでは”HexDigits =”というステートメントで0-0Fhの16進文字の文字デザイン定義が記載されています。ただし、バイトデータのどのビットが、7セグのどの位置を光らせるかというのは、もしかして規格では無いかもしれません(調べたわけではないけど、昔の記憶と、この時計キットの7セグLEDのビット配置違ったような気がする。

さて、キットは、オンラインの解説書を見ながら、配線をつないで、Python(パイソン)という言語のソフトを走らせれば、基本ok。簡単に時計表示ができます。
初期パソコン(8ビットマイコン)は、電源投入でBasicインタプリタ―が起動します(シャープさんMZ80系は特殊で、OSがまずカセットテープからBASICインタプリタ―を読み込みま終了すると、ユーザが使える状態になります)。 インタプリタは、文字通り1行命令実行できました(単純に電卓代わりに計算させることもできるし、汎用のもの無いけど、ハード得意ならポートにデータを読み書きすることも可能でした)が、Pythonという標準実装言語が、その時代の手軽さ思い出させます。 電子工作のかなめになる機能もってますね。万が一壊しても、PC壊すのとは懐具合的にやさしいしね。

今日のお勉強内容

ハード編
電源系:ラズパイボードへの電源は、マイクロUSBソケット経由5Vですが、LAN、USB関連電源を除いて、5Vから減圧した3.3VをつくりCPUに供給される。従って、GPIOの入出力電圧は、0Vと3.3Vの2値電位です(PWMという平均値アナログはあるけれども)。 もし間違ってて、5V系の信号を、GPIO経由でラズパイに印加すると、最悪壊れます(両者どっちが壊れるか我慢比べ)。逆方向接続も両者とも壊す可能性あり。 電源電圧5Vなので5V系だと思ってましたが、要注意です(確かにGPIOには、3.3Vが出力されているので、あるいは、2系統かとおもったけど、CPU(というかSOCというのが正しい)は、3.3Vオンリーでした。
ソフト編
ターミナルから(tm1637というプログラム想定すると、)
ダウンロード命令: wget http://www.**.**/****/tm1637.zip
解凍命令: unzip tm1637.zip
パイソンプログラム実行: sudo python tm1637.py
プログラム自動実行1: ”/etc/rc.local”ファイル最後に、”python /home/pi/tm1637/tm1637.py &”追記
      コマンドの末尾"&"は、そのコマンドを子プロセスとして実行する(暴走しても親プロセスから殺すことが可能)
(プログラムの自動実行2: ”/etc/init.d”フォルダに起動シェルプログラムを置き実行権限等与える方法もあるらしい)

しかし、このパイソンという言語、昔カーニハン&リッチ仕様Cから、オブジェクト指向だとかクラス定義だとかいう上流言語仕様になって挫折したのを思い出す言語仕様の様に思います(C#とか、C++はもうお手上げ)。 デモソフトを読み解いて、これからちょっと勉強予定。 読むとなんとなくわかるけど、一から書けるか?と聞かれると難しい。

データ波形取得しようと思ったけど、はてさて、ロジアナどこに隠してしまったのか、出てこない...対策後で考えよう.。 照度調整がどの時間調整しているとか、さーっと確認してお終いのつもりでしたが、後回しにします。 ただのプレゼントで遊ばせてもらっています(バッテリーバックアップの無いラズパイさんの時計って、あまり実用性無いような気が少し。太陽電池・電波時計がそばにあるしねぇ...ちなみに、ねじ巻式の柱時計(たぶん50年物)も隣の部屋で稼働中)、単二電池4本のからくり時計も同じ部屋:ニッケル水素の単三にタイプアダプタつけると、からくりが回り始めるところで落ちてしまいます。 昔ながらのニッカド単二を止まったら一晩かけて充電して再起動。だって予備のニッカド単二4本買うのって、びっくりするくらい高いんだもん)

(2018.02.27)ちょっと脱線
販社(ソリノベ研究所)提供時計プログラム見ると、"time().ctime[17:19]"で、秒の情報を入手できる事が解るので、時分のオリジナル機能から、分秒計に修正動作確認。秒単位なら、余裕。 たぶん0.1secというタイマー使っているようなので、後1桁以上余力あるインタプリターだと思われる。
実力をみたいので、msec単位表示したかったんだけど、今のところ挫折中(この手法の延長で読めると思ったんだけど...)。 サンプルプログラムでは、A:C:E:F(大文字)、b:d(小文字)の16進キャラクタの定義があるので、冗談として16進秒表示時計に改造して遊ぶ。何の意味あるかってか? これ時計としては確かに価値無いかも。でも10進が必ずしも万能というわけではなく、工学系エンジアにはバイナリが直感的に理解できるかどうか結構重要な場面に出会うこともありますヨ。

ICシステムが暴走するといわれて得意先出向いたとき、社外秘で実験室には入れてもらえないので、会議室で、コマンド・ステータスのバスデータをロジアナで取得印刷したものをもらいました。定規片手に該当する場所をつらつら探して、ここにおかしなデータが入っていると、16進データに直して、示すと、なにやら心当たりのあるデータ系列だったらしく、ソフト屋さんと密談開始。結果は多重割り込み処理失敗で、異なるデータ列を混ぜて送って、結果暴走していることが判明。無罪釈放してもらえました。このとき、定規で線を引っ張って次々先に進むのを見て、”ひとつづつデータ解析せんとだめやん”と相手方のお偉いさんに最初言われましたが、先方ベテランエンジニアさんがあの時間で読めているみたいととりなしてくれてました(笑)。 が、雑音は聞き流しながら、ここがおかしいと見つけて指摘できて、ちょっと気分良かった。内心ガッツポーズ。

(以下ちょっと読む価値あると思うので、加筆修正してブログに指折り数える記事として追記(2018.12.28)
(2018.03.03)何の本で読んだのかは忘れましたが。 両手で数えられるのはいくつ?という質問に対して、一般論では、0~9「1~10」というのが普通の意見ですが、指折りするとき、パーから始めると、最初に折るのは、ほぼ親指だと思いますが、グーから数えるとき、親指より、人差し指が一般的でしょうし、変な人は小指かもしれない。 つまり、一を表すのにいろいろな方法があって、情報の無駄遣いをしているというわけです。 足の指を十の位を示すことにして100まで行ける。だから手だけ限定なら、右手で5まで数えられるから、左手は5の位だとすると、5*5=25まで数えられるというのが、最初の私の考えたことです(後で思えば、0~5なんで、6進数。左手6進の位だとすると6*6=36(0~35)まで数えられる)。
で残念ながら、それでは全然不足。正解は、各指をそれぞれ2^[0:9]の桁の数字(0or1)とすると、”0~1023 (=2^10-1)”まで数えることができます。子供のころ読んだ本で、太閤はんに、褒美をもらえると聞いて、会見した100畳大広間で、最初の1畳目に1粒、2畳目には2粒、3畳目には4粒と倍々に増やしながら100畳分のお米をくださいというお願いをしたら、秀吉は、欲のないやつとほめて、後から部下に検算させてさすがに挫折したというパズルを読んだことがあります(主人公は曽呂利新左衛門だったかな?)。 2のべき乗といえば、昔使っていた関数電卓で2^47が計算できる上限だったような微かな記憶があったりします。確認したいけど電卓どこにしまったっけかな??

実験用便利グッズ紹介ページに工具・ブレッドボード関連グッズ紹介記事を独立させる(2018.03.05)

---------------------
サイトマップ トップ  <  ラズパイの部屋 <