きっかけ
前にUSBテスタkeweisi KWS-V20(3.5~9.0V)を改造してみたという記事を書きました。この改造中に1つマイコンを過電圧で壊してしまい、使えなくなってしまったものがありました。今回は、それのLCDをArduinoで使用してみる、と言った内容です。LCDの制御ICがHT1621で、それ用の汎用ライブラリが見つかったのでそれを改造しました。
抵抗の接続ミスにより1名が殉職
— Unagi Dojyou (@Unagi_Dojyou) April 25, 2023
起動しなくなってしまった pic.twitter.com/f8XPOF9Fya
改造
Arduinoに接続するために、コードを生やすのと同時に、不要な部品の撤去を行いました。USB、マイコン、ROM、抵抗、コンデンサ、三端子レギュレータを取り外しました。
なお、101と書かれた抵抗と三端子レギュレータの上についてるコンデンサは動作に必要なため、外していません。マイコンの2番ピンがCS、7番ピンがDATA、8番ピンがWRとなっています。3番ピンがバックライトのマイナスとなっているので、適当なGND(14番ピン)と接続します。
Arduinoと接続すると5Vが供給されるので、画面の濃さが濃くなり、正面からだとほとんど何も見えなくなってしまいます。ESP32とかの3.3Vで信号を出力するものを使ったほうがいいかもしれません。
解析
とりあえず、使用する改変前のライブラリですが、MacduinoさんのLiquidCrystal7S: a library for 7 segments LCD based on HT1621 chipsetを使用しました。ライブラリ自他のダウンロードができなくなっていたので、ダウンロードは、GitHub HT1621(自鯖ミラー)からダウンロードしたものを使用しました。このライブラリを使用して、どのアドレスがどのセグメントなのか判明させました。こちらのサイトを参考にしながら作業しました。対応表はこんな感じです。
ここの対応表をもとに、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(セグメント番号)対応表ですが、こんな感じです。
セグメントのbit番地はこんな感じです。hは小数点だったり、単位の表示だったり、:の表示だったり、なかったりします。
ESP32でも動かしてみた
これまではArduino UNOで動かしてましたが、信号、電源が5Vだったので液晶の視野角が死んでました。そこで3.3Vで動くESP32で動かしてみました。液晶は超いい感じに映りました。ピンはDATAを32、WRを33、CSを25につなぎましたが、RX、TX、input onlyとかでなければどこでもいいと思います。
ESP32で動かしたらめっちゃきれいに映った pic.twitter.com/iZHX6IbbwG
— Unagi Dojyou (@Unagi_Dojyou) May 7, 2023
おわりに
うまく行って良かったです。ライブラリを書くのがなかなか大変でした。ただ、単価が270円+改造とコスパは良くないので、あんまり使うことはなさそうです。改造しようとして破壊してしまったときくらいしか使い道がなさそうです。とりあえず今回改造したやつは時間があったらスマートスイッチ(ESP8285)を改造したやつに取り付けしてみようかなと思ってます。