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レジスタを読むと、すぐに次のサイクルが始まります。

 デバッグの実行順序通りに実行されていることが確認できました。

前へ

Simulink Support Package for Raspberry Pi ② ライブラリ

次へ

Simulink Support Package for Raspberry Pi ④ I2C VL53L0XとGPIO