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