R3/05/08:更新
テスト動作中の4桁7セグPicで疑似I2c_7segをテスト
<使用部品について:>
- ◎PIC : 12F683:今回も手持ちのものを使いました。(I2c_LCDのセットを流用)
- ◎4桁7seg : HiLetgo 3個セット、amazonで購入(3個で\650)
<HiLetgo 4桁7segLEDについて>
基板の裏側にTM1637というICが付いています。これが疑似I2cインターフェイスの役割を果たしているようです。 スレーブアドレスは無いこととデータ送信の順序が0ビットから7ビットの順であること以外はI2c通信と同じのようです。 接続端子の名前は、SCL→CLK、SDA→DIO となっています。 供給電圧は、3.3v~5v Max のようです。 ![]()
<テスト回路について>
- ブレッドボード上に仮組みしました。
- 動作テスト用ですから、7segLEDにはカウントダウンの時間が表示されるだけです。
- GP2につながるLEDは、main()のwhile_loopの動作確認のためです。
- 回路図には供給電圧5vと記していますが、電圧5vのとき消費電流は15~18mA程度です。供給電圧3.3vでも視認性は十分でかつ消費電流も7~8mAに抑えられます。
<プログラムについて>==>ソース(Hi_tech_c)
- 開発環境は、MPLAB IDE v8.84 です。(HI-TECH C V9.83)
- プログラムの内容は2分のカウントダウン表示です。
- 基本はI2c通信ですので、I2c_LCDのプログラムをベースにしています。
- GP4,GP5ともに内部プルアップを使用しています。
- 1秒の計測はタイマー0を利用しました。クロック周波数の1/4:1MHz(=1μS)にたいして、プリスケーラ 1/128でTMR0の初期値を100にして、156×128=約20mSごとに1回割込みが発生しますから、50回カウントすれば1秒のはずですが、少し遅れ気味で45回にしました。
- 82行目:移動表示モードを指定しました。1桁ずつ表示の場合は44hです。
- 111~115行目:データの送信は、0ビット→7ビットの順番です。
- 116~117行目:疑似i2c通信で複数のスレーブはありませんので、ACKの確認は不要ですが、ACK受信の分です。
- 94行目:輝度(明るさ)の調整は8段階で、88hがMiniで8FhがMaxです。プログラムでは"4/16(8Ah)"の下から3段階目にしましたが、3.3v供給でも室内なら視認性は充分でした。
- ◎参照させていただいたページ
ありがとうございました。
- https://kurobekoblog.com/tm1637
- http://ja0qon.my.coocan.jp/labo/PIC_I2C_TEST/GROVE4DD_TEST.html
- https://denshikousakusenka.jimdofree.com/電子部品/4桁ledディスプレイ/
追記
- この時のPICのクロック周波数は4MHzです。後に8MHzにすると表示されませんでした。TM1637にとって信号が速すぎるようです。
- S7_Out()で各動作間にNOP()を入れて対処しました。