USBテスタkeweisi KWS-V20のLCD(HT1621)用ライブラリ

投稿者: | 2月 17, 2024

きっかけ

前にUSBテスタkeweisi KWS-V20(3.5~9.0V)を改造してみたという記事を書きました。この改造中に1つマイコンを過電圧で壊してしまい、使えなくなってしまったものがありました。今回は、それのLCDをArduinoで使用してみる、と言った内容です。LCDの制御ICがHT1621で、それ用の汎用ライブラリが見つかったのでそれを改造しました。

改造

Arduinoに接続するために、コードを生やすのと同時に、不要な部品の撤去を行いました。USB、マイコン、ROM、抵抗、コンデンサ、三端子レギュレータを取り外しました。
なお、101と書かれた抵抗と三端子レギュレータの上についてるコンデンサは動作に必要なため、外していません。マイコンの2番ピンがCS、7番ピンがDATA、8番ピンがWRとなっています。3番ピンがバックライトのマイナスとなっているので、適当なGND(14番ピン)と接続します。
Arduinoと接続すると5Vが供給されるので、画面の濃さが濃くなり、正面からだとほとんど何も見えなくなってしまいます。ESP32とかの3.3Vで信号を出力するものを使ったほうがいいかもしれません。

USBテスタkeweisi KWS-V20のLCD(HT1621)用ライブラリ
Arduino 液晶 library 改造
改造マニュアル
USBテスタkeweisi KWS-V20のLCD(HT1621)用ライブラリ
Arduino 液晶 library 改造
部品を取り外してコードを付けたところ
USBテスタkeweisi KWS-V20のLCD(HT1621)用ライブラリ
Arduino UNO 液晶 library 改造
Arduino UNOと接続したところ

解析

とりあえず、使用する改変前のライブラリですが、MacduinoさんのLiquidCrystal7S: a library for 7 segments LCD based on HT1621 chipsetを使用しました。ライブラリ自他のダウンロードができなくなっていたので、ダウンロードは、GitHub HT1621(自鯖ミラー)からダウンロードしたものを使用しました。このライブラリを使用して、どのアドレスがどのセグメントなのか判明させました。こちらのサイトを参考にしながら作業しました。対応表はこんな感じです。

USBテスタkeweisi KWS-V20のLCD(HT1621)用ライブラリ
Arduino UNO 液晶 library 改造
解析 セグメント 7セグ
対応表

ここの対応表をもとに、keweisi KWS-V20専用のライブラリを作成しました。

作成したkeweisi KWS-V20専用ライブラリ

HT1621_KWS-V20_sample.zip
GitHubにも上げました↓
keweisi_KWS-V20_LCD_arduinoLibrary

ダウンロードして、sampleを書き込めば動きます。動作はこんな感じです。

追加した、関数はこんな感じです。

    void writeV20(uint8_t address, uint8_t data);
    /*
     * writeのKWS-V20版
     * addressは表示させたい7セグの指定、dataは表示させるセグメントの指定。abcdefghで指定する。
    */

    void writeCharV20(uint8_t address, uint8_t c, bool decimal);
    /*
     * writeCharのKWS-V20版
     * addressで表示させたい7セグの指定、cは表示させたい数字、decimalは1で小数点の表示、0で非表示
    */

    void writeV20voltage(float N,int F,bool V);
    /*
     * 電圧表示部分に表示をさせる。Nは電圧、Fは少数F桁まで表示、Vは1で「V」を表示・0で非表示
     * なお、F=0のときは999~0、F=1のときは99.9~0、F=2のときは9.99~0までしか表示できない。範囲外はどうなるか不明
    */

    void writeV20current(float N,int F,bool A);
    /*
     * 電流表示部分に表示をさせる。Nは電流、Fは少数F桁まで表示、Aは1で「A」を表示・0で非表示
     * writeV20voltageの電流版。ただし、小数点は第2位しか指定できない。F=1としても、F=2となる。
     * F=0のときは999~0、F=1,2のときは9.99~0となっている。範囲外はどうなるか不明
    */

    void writeV20time(int h,int m,bool colon,bool T);
    /*
     * 時間表示部分に表示をさせる。hは時、mは分、colonは「:」の表示・非表示、Tは「T」の表示・非表示
    */

    void writeV20mAh(long N,bool mAh);
    /*
     * mAh部分に表示させる。Nで表示させる数字、mAhは「mAh」の表示・非表示
    */

writeV20、writeCharV20のaddress(セグメント番号)対応表ですが、こんな感じです。

USBテスタkeweisi KWS-V20のLCD(HT1621)用ライブラリ
Arduino UNO 液晶 library 改造
HT1621_KWS-V20
address セグメント番号 セグメントアドレス
address対応表

セグメントのbit番地はこんな感じです。hは小数点だったり、単位の表示だったり、:の表示だったり、なかったりします。

USBテスタkeweisi KWS-V20のLCD(HT1621)用ライブラリ
Arduino UNO 液晶 library 改造
HT1621_KWS-V20
セグメントbit番地
セグメントとビット

ESP32でも動かしてみた

これまではArduino UNOで動かしてましたが、信号、電源が5Vだったので液晶の視野角が死んでました。そこで3.3Vで動くESP32で動かしてみました。液晶は超いい感じに映りました。ピンはDATAを32、WRを33、CSを25につなぎましたが、RX、TX、input onlyとかでなければどこでもいいと思います。

おわりに

うまく行って良かったです。ライブラリを書くのがなかなか大変でした。ただ、単価が270円+改造とコスパは良くないので、あんまり使うことはなさそうです。改造しようとして破壊してしまったときくらいしか使い道がなさそうです。とりあえず今回改造したやつは時間があったらスマートスイッチ(ESP8285)を改造したやつに取り付けしてみようかなと思ってます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)