※参考程度にしてね 「叩き台」にはなると思う
特に回路図は、最終を反映していない可能性あり
回路図
I2C AE-AQM1602A 16x2 キャラクタLCD 3.1-5.5V
バスリピータ 要
デバイス側 Pull Up 基板ジャンパ
※ 秋月添付説明書 「初期化の例」
[Clear Diaplay] 発行後 [Waittime > 26.3uS] となっているが、短過ぎるみたいで最初動かなかった(泣
[DISPLAY INSTRUCTION TABLE] を見ると 1.08mS となっている
(他の WaitTime から OSC=380kHz の時間でいいのかな?)
[Execution Time] 26.3uS となっているコマンドは、プログラムで「待ち」をせず連続して送ることが出来た
RasPi I2C Clock 100kHz (default) だと 8bit=80uS かかる
パラレルバス接続でないなら、26.3uS は意識しなくてよさそう (サンプルソースでは連続して送って動いている)
I2C GP2Y0E03 測距モジュール 2.7-5.5V
I2C AE-ADS1015 4ch12bitAD 2-5V
バスリピータ 要
デバイス側 Pull Up 基板ジャンパ
リファレンスとの比較を A/D値として送ってくると思ったが違っていた
A/D値から電圧を求める式に「リファレンス値」は不要 ソースに残骸あり
ADS1015 電気的仕様
変換可能電圧 6.144V [Config Register] [PGA] の設定
[Analog input voltage] は VDD+0.3V [Absolute Maximum Ratings]
[Digital input voltage] は 0-5.5V
5(+0.3)V まで測りたい場合は、ADS1015 VDD に 5V 供給が必要
ADS1015 I2C バスは 3.3V で動作可能
RasPi I2C, バスリピータ PCA9515AD は 3.3V 動作なので、そちらに 5.0V を流さない様に注意
I2C 測離モジュールから距離を取得してLCDに表示。
また測距モジュールが電圧出力するので A/D 変換してLCDに表示。
サンプルソース (zip 分割コンパイル makefile あり)
「バス」らしい動作になってきた
I2C MCP23017 16bitシリアルエクスパンダ 1.8-5.5V
検証中 I2C 通信は確認済
I2C ではデバイスが増えても SCL,SDA だけで選択できるが、
SPI では チップ/レジスタ セレクト・ハードリセット等がデバイス毎に必要で、GPIO が枯渇する可能性がありそう
最初は 74xx138 で考えた
RasPi GPIO が基本1ビットづつ動かすので「ヒゲ」が出そう [OutEnable:Gn]を使えばいいのかな?
チップセレクト分しか節約できない
なのでコレで動かして検討してみる
バスリピータ 要
デバイス側 Pull Up 外付け必須
I2C PCA9515AD バスリピーター 3.0-3.6V
RasPi の I2C にデバイスをつなぐ時は、デバイス毎に付けた方がよいと思われる
I2C には「最大配線容量 Max.400pF」という制限がある(らしい)
デバイスによっては 100pF を超えるヤツもあるから、すぐに制限を越えそう
PCA9515AD では、1つあたり最大 7pF に抑えてくれる
デバイス側にプルアップがない場合は、外付け必須 ex.MCP23017
MCP4726 VDD,VREF について
min typ max
VDD 2.7 5.5 V
VREF VDD-0.04 V
Maximum Output Voltage VDD-0.04 V
-> 4.5V位までを出力するには、VDD に 5.0V を供給する必要がある
I2C のSCL,SDA の動作範囲は?
Digital Interface
Output Low Voltage 0.4 V
Output High Voltage 記載はないが、おそらく VDD 付近 SDA:Read
Input Low Voltage 0.3VDD V (SDA and SCL Pins)
Input High Voltage 0.7VDD V (SDA and SCL Pins)
-> 3.3V の信号では 4726 は HIGH を満たさない VDD:5.0V -> 0.7VDD = 3.5V
VDD,VREF 5.0V
SDA,SCL RasPi:3.3V 4726:5.0V 双方向(SDA)電圧変換が必要
PCA9515AD バスリピータ
入れておいた方が確実
AE-LCNV4-MOSFET レベル変換
バスリピータから 3.3V D/Aに 5.0V
MCP4726 D/A
失敗した・失敗した・失敗した・・ まとめ買いしてしまった(安いけど)
I2C アドレスが固定なので、バス上に一つしか繋げられない
動作確認
RasPi側 RemoteIO (サーバ)
DIO,PWM,I2C はだいたい作ってあるので、今回デバイステストプログラムはなし
Windows側 RemotePi.exe (クライアント)
ネットワークはもう繋がるので、デバッグウィンドウからプロトコルに沿ってコマンド直打ち
確認 OK
サンプルソース 旧
検証中 5x7 (x256) フォント
Sitronix ST7032 (AE-AQM1602A) のデータシートから自作フォントエディタでポチポチと..
とにかく画面が小さい!
裸眼で見るのはじじぃには無理
正味 5x7 だが 6x8 でデータを持っている
6x8 で、右・下に 1ドットラインのマージンが取られる
縦8ドットデータは、SPIバイト書込みの都合上やむなし?
横6バイトは、文字列連続書込み時用の1ドットラインのマージンを含む
右マージン不要ならば、SPI書込みを5バイトにする
フォントの使い方
char *pf = Font7565[c]; // c(00-FF) のフォント先頭ポインタを取得
WriteDatasAQM1248(pf, BYTES_Font7565);
詳細はサンプルソース参照
サンプルソースでは、#include "Font7565b.c" でフォントデータを読込んでいる
ので、コンパイルコマンドラインでのフォントデータの指定はいらない (同一フォルダに置く事)