Simulink Support Package for Raspberry Pi ③ I2C LPS22HBをアクセス
第1回では、気圧センサLPS22HBのブロックを利用して、気圧と温度を取得しました。
ここでは、接続したままになっているセンサを、I2Cブロックを利用して、データを読み出します。
LP22SHBは、AdafruitのSTEMMA QTボードの4ピン・コネクタを利用しています。接続は、次のとおりです。
LPS22HB | ラズパイ4 |
---|---|
赤色 | 3.3V |
黒色 | GND |
SCL | 5番 |
SDA | 3番 |
●WriteとReadブロック
LPS22HBは、
CircuitPython 10行プログラミング STEP7 (2) 気圧センサLPS22HB
のプログラムを踏襲します。
simulinkの記述です。
wakeupのプロパティ
oneshot enableのプロパティ
Press readプロパティ
ファンクション
function y = fcn(u)
y1=0;
y2=0;
y3=0;
y1=double(u(3))*256*256;
y2=double(u(2))*256;
y3=double(u(1));
y= [y1,y2,y3,(y1+y2+y3)/4096.0]
Tempのプロパティ
ファンクション
function y = fcn(u)
y1=0;
y2=0;
y1=double(u(2))*256;
y2=double(u(1));
y= [y1,y2,(y1+y2)/100.0]
●正しく動作しているのか
ブロックを並べただけで、実行順に結線していません。したがって、このような配置で正しいのかがわかりません。調べられる範囲で検討しました。
デバッグの情報のオーバーレイから、実行順序をクリックすると、ブロックに数字がふられました。
期待通りの順番になっています。ただ、pythonのプログラムのようにコマンドを送った後にdelayを入れる方法がわかりません。
ロジックアナライザを起動します。
しかし、すべてのブロックが同時に動いています。ラズパイでは、そのような動きはできません。
ロジックアナライザに信号の状態を反映するには、配線上で右クリックをし、「選択した信号のログ」を選択します。
実際のI2CバスのSCLとSDA信号を、AnalogDiscovery2のプロトコルアナライズ機能で見ます。
プログラムは、実行時間内でサイクリックに動作しています。wakeupとoneshot enableは連続して実行されますが、データのリードまでの時間がかかり、実際にpressとtempレジスタを読むと、すぐに次のサイクルが始まります。