部品屋根性(21) Holtek, HT16K33

Joseph Halfmoon

Holtek社と言えば、台湾の立派なマイコン屋さんです。今回はHoltek社にしたら主力MCUの「お供」といった位置づけであろうデバイスを手にいれたので、それを使ってみます。RAM Mapping 16*8 LED Controller Driver with keyscanという長いタイトルのついたデバイス、HT16K33です。

※「部品屋根性」投稿順Indexはこちら

HT16K33を手に入れたのは、マトリックスLEDを使うときにマイコンの端子から何本も配線を引き出して接続するのはあんまりだよな~と思ったからなんであります。このHoltek HT16K33の特徴をまとめれば

    • マイコンとのIFはI2C、信号線2本ですむ。
    • ROW16本xCOMMON8本のLEDアレイを直接駆動できる
    • そのついでに13×3個のキースイッチのアレイもスキャンできる

という優れものです。信号端子の少ないタイプのマイコンのために昔から IO Expanderなどと呼ばれるお供の石があったですが、その正統な後継者?と言えましょう。例によって、秋月通商殿からブレッドボードに刺しやすいモジュールの形態のものを購入。

16×8LEDマトリクスドライバーモジュール(HT16K33)

アイキャッチ画像にモジュールの写真を掲げましたが、なかなか配慮の行き届いた基板で嬉しいです。まあ、これがあればマトリックスLEDなどちょろい筈。といって、簡単に点灯したのではツマラナイ。ということで、最近お世話になることが多い

Digilent製 Analog Discovery 2のロジアナ機能

を「フル」に使ってみる題材としてみようといたしました。Analog Discovery2のロジアナ機能は全16CHあり、これでHT16K33のCOMMON端子8本、ROW端子8本、を観察して「美しい波形」をキャプチャしようという目論見。これがね、失敗の元でした。Analog Discovery2が悪いわけでも、HT16K33が悪いわけでもないんです。私の考え無し。

ごちゃごちゃの配線が嫌だった筈なのに、かえって配線の泥沼に落ち込んだ

のであります。こんな感じ。

HT16K33_TEST上部には、お楽しみの中華部品キット Kuman K4のArduino互換機。そこからI2Cの信号2本とGND, 5V電源を引き出して4本。Analog Discovery2側はどうしても全16本を配線しないとならないですが、それにしてもゴチャゴチャして肝心のHT16K33のモジュールが見えなくなっている。

最初に気付いたのは、ロジアナ機能でなく、オシロでCOMMON端子を当たったときでした。なんか期待と信号波形が違う!データシートをよく見れば、

COMMON端子はLEDから電流をシンクするだけ

ときどき信号がハイになる区間がありますが、これはLEDの駆動の隙間でキーマトリックスを駆動するための波形(一部のCOMMON端子のみの機能)。COMMON端子はLEDを駆動しないときはHiZだったです。これではロジアナ機能で信号レベルをとれない。仕方がないので、COMMONの全8端子を引き出して、プルアップ抵抗で吊り上げました。これで、COMMON端子もHigh/Low確定して「所望の」波形が観測できました。

HT16K33の「ディスプレイRAM」(といっても高々16バイト)の全ビットに1を書き込んで動かすと、以下のような「意図どおり」の波形がとれました。DIO0から7がCOMMON端子の0番から7番、DIO8から15がROW端子の0番から7番。ROWに現れるデータ(HIGH)がLEDを通じて、LOWに電流をシンクしているCOMMONに吸い込まれるという塩梅。途中、ROW端子がLOWになって、COMMON端子がHIGHになっているところはキーボードのスキャン用にリザーブされているタイミング。

HT16K33_LA_WAVE_FFこれで、OKかと思ったですが、書き込むデータを変えてみると、

ROW端子の波形がとても汚い

ことに気付きました。いろいろデータを変えると、ちゃんとRAMに書き込まれているように見えるのですが、動作が変。ぶっちゃけ前の値に「引きづられて」いるように見えるのです。しばらく考えてようやく分かりました。COMMON端子は電流シンクする側のトランジスタしかなかったですが、

ROW端子は、HIGH側ドライブのトランジスタしかついていない。

これまたキースキャンのためにLOW側のプルダウンが一時動くようになっている一部ROW端子もあるのですが、基本は流し出すだけ、LOWは出力されない。ロジアナで0と1を観察しようとすれば、こちらはプルダウン抵抗でもつけないとなりません。どんどんジャンパ線と抵抗が増えます。あんまりなので、一部信号にだけ取り付けました。するとその信号の波形が落ち着いて、ようやく「予想通り」の波形が得られました。

素直にLEDマトリックスに結線すれば問題なく動いた筈が、手っ取り早くロジアナ機能で波形を取ろうとしたために、かえってプルアップとプルダウン抵抗多数、ジャンパ配線多数と?な時間を招いてしまったという次第。ちゃんとデータシートの端子回路図みておけよ!

今日は疲れてしまったので、LEDマトリックス駆動するのはまた明日。トホホ。

部品屋根性(20) 16文字x2行、キャラクタLCDモジュール へ戻る

部品屋根性(22) 8×8 LED Matrix、1588BS へ進む